Неопределенная ссылка на ссылку при использовании & MyClass :: MyFunction - PullRequest
0 голосов
/ 13 июля 2011

это просто поставило меня в тупик, поэтому я решил запросить здесь:

У меня есть класс следующим образом:

class MyClass {
    public:
        void myThreadFunc();
};

Это в шапке. В конструкторе

MyClass::MyClass() {
    ...
    boost::thread t(boost::bind(&MyClass::myThreadFunc, this));
    ...
}

Как я уже видел. НЕТ ошибок времени компиляции. Тем не менее, когда я ссылаюсь следующим образом:

g++ -o test.exe main.o MyClass.o /*specify boost and other libraries */

Я получаю:

MyClass.o:MyClass.cpp:(.text+0xa4): undefined reference to `MyClass::myThreadFunc()'
collect2: ld returned 1 exit status

Что не имеет никакого смысла. Что меня особенно удивляет, так это ошибка linker . Я включил оба моих объектных файла.

Может кто-нибудь сказать мне, что происходит? Если это может быть уместно, я на MinGW на Windows.

EDIT:

Эпический провал. Я забыл префикс MyClass :: при определении функции в моем файле cpp. Я просто не решил проверить это. Почти так же плохо, как забыть о семиколине после определения класса.

1 Ответ

2 голосов
/ 13 июля 2011

Вам нужно где-то написать тело функции для MyClass::myThreadFunc(). Написание конструктора для MyClass отличается от реализации функции-члена MyClass::myThreadFunc().

Если вы вызываете функцию в C / C ++, она должна где-то иметь тело функции. Вот почему это ошибка компоновщика; он пытается найти тело функции во всех доступных объектных файлах, но вы не написали его, поэтому он не может.

...