Это сводило меня с ума. Я получал сообщение «Нет соответствия функции« Ошибка WordCloud :: WordCloud() ». Кажется, что был вызван конструктор по умолчанию, но поскольку я не определял его, возникла ошибка.C++ - почему этот член должен быть объявлен статическим?
Конструктор:
WordCloud(map<string, int> *source);
И в главном файле CPP, ошибка происходила на указанной линии
class FontTestingApp : public AppBasic
{ // <-- error was appearing on this line
public:
void setup();
void mouseDown(MouseEvent event);
void update();
void draw();
map<string, int> wordList;
WordCloud wc; // comment out this line and it compiles
};
Итак, я предполагаю, что объект Wordcloud был быть инстанцирован когда был создан экземпляр класса FontTestingApp.
Если я закомментируйте строку
WordCloud wc;
Затем он компилирует.
Чтобы исправить это, я, наконец, изменил строку
static WordCloud wc;
И скомпилированного.
Я действительно не знаю, почему, и это не очень хорошо :) Если бы кто-нибудь мог объяснить, что здесь происходит, я был бы очень благодарен. Я использую libCinder кстати (libcinder.org)
Это декларация ctor, вы пробовали реализовать пустой ctor? – mingos
После добавления статики все еще работает, если вы создаете объект 'FontTestingApp' в вашем' main'? – Jaywalker
Нет, если я стану статичным, он будет компилироваться, но не будет связываться. Как отмечали другие, статические просто маскируют проблему. Проблема была более элементарной; Я должен был объявить wc как WordCloud * - WordCloud * wc. При объявлении как wc я создавал экземпляр, и, таким образом, вызывал конструктор по умолчанию. Заставляет меня чувствовать себя довольно глупо :) Я виню слишком много лет в Java ... – Sam