2011-07-12 61 views
0

當鏈接錯誤未定義參考這只是有我難住了,所以我想我會查詢位置:使用和MyClass的:: MyFunction的

我有一個類如下:

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 

不使任何意義。令我特別奇怪的是這是一個鏈接器錯誤。我包含了我的兩個對象文件。

誰能告訴我發生了什麼事?如果它可能是相關的,我在Windows上的MinGW。

編輯:

史詩般的失敗。在我的cpp文件中定義函數時,我忘了MyClass ::前綴。我只是沒有決定檢查。幾乎和在班級定義之後忘記半夏林一樣糟糕。

+0

哈哈,對不起!我編輯了錯誤代碼,以便對問題的概念佈局有意義。不想阻塞我的應用程序的具體細節。 – cemulate

+4

顯然'MyClass :: myThreadFunc()'沒有被定義,或者在鏈接時沒有包含的對象文件中。您需要添加更多詳細信息和/或重現問題的小樣本。 –

+0

@Georg Fritzsche我已經將它更改爲我的小測試用例應用程序中的錯誤,我原來包含發生問題的實際應用程序中的錯誤。 – cemulate

回答

2

您需要在某處爲MyClass::myThreadFunc()編寫函數體。爲MyClass寫入構造函數與實現MyClass::myThreadFunc()成員函數不同。

如果您在C/C++中調用一個函數,它必須有一個函數體。這就是爲什麼它是一個鏈接器錯誤;它試圖在所有可用的目標文件中找到函數體,但是你沒有編寫一個,所以它不能。

相關問題