2012-04-21 106 views
3

我有這樣的錯誤:爲架構x86_64的錯誤未定義符號

Undefined symbols for architecture x86_64: 
    "my::Queue<int>::Queue()", referenced from: 
     _main in ccdwI88X.o 
ld: symbol(s) not found for architecture x86_64 
collect2: ld returned 1 exit status 

此代碼 '的main.cpp':

#include "Queue.hpp" 

int main() 
{ 
    my::Queue<int> myqueue; 
    return 0; 
} 

'Queue.hpp':

#ifndef QUEUE_HH__ 
#define QUEUE_HH__ 

namespace my 
{ 
    template <typename T> 
    class Queue 
    { 
    public: 
    Queue();  
    }; 
} 

#endif 

和'Queue.cpp':

#include "Queue.hpp" 

template <typename T> 
my::Queue<T>::Queue() 
{ 
} 
+1

請在本頁面右側的「相關」列表中至少閱讀的第一個問題。 – Mat 2012-04-21 22:54:29

+0

我讀過它,但這不是我有的問題。不管怎麼說,還是要謝謝你。 – Bebeoix 2012-04-21 23:03:13

+0

這是同樣的問題。 – Mat 2012-04-21 23:04:16

回答

5

答案發布在這裏:https://stackoverflow.com/a/312402/700926是我認爲你需要的。

如果我編輯Queue.cpp文件,以這樣的:

#include "Queue.hpp" 

template <typename T> 
my::Queue<T>::Queue() 
{ 

} 

template class my::Queue<int>; 

..它編譯罰款。

有關詳細說明,請參閱我首先提到的URL。

+0

好吧,它的工作。但我認爲模板的原理是它可以採用我們事先不知道的類型......如果我想用我的隊列類創建一個庫,並且我希望將來在不知道該類型的情況下使用它TI將使用? – Bebeoix 2012-04-21 23:10:45

+0

正如此處所述:http://stackoverflow.com/a/312402/700926:「如果您不知道將使用哪個模板參數,則必須將所有定義放入標題中。這應該是你在找什麼:) – 2012-04-21 23:13:24

+0

好吧,它的工作表示感謝。但它就像在main.cpp中包含.hpp後面跟着.cpp。有點奇怪。 – Bebeoix 2012-04-21 23:26:51

相關問題