//includes, using etc.
int main()
{
List<int> a;
cout << a.size() << endl;
return 0;
}
//list.h
template <class T>
class List{
int items;
public:
List();
~List();
int size() const;
};
//list.cpp
#include "list.h"
template<class T>
List<T>::List() :
items(0)
{}
template<class T>
List<T>::~List()
{}
template<class T>
int List<T>::size() const
{ return items; }
這應該工作,不應該嗎?當我在主函數上面定義list.h和list.cpp的內容時,一切正常。然而,這給了我一些錯誤:C++模板 - 未定義的參考
main.cpp:(.text+0x12): undefined reference to
List<int>::List()'
List::size() const'
main.cpp:(.text+0x1e): undefined reference to
main.cpp:(.text+0x4f): undefined reference toList<int>::~List()'
List::~List()'
main.cpp:(.text+0x64): undefined reference to
,當我在主函數改變List<int> a;
到List<int> a();
我得到的唯一錯誤是這樣的:
main.cpp:10:12: error: request for member ‘size’ in ‘a’, which is of non-class type ‘List()’
幫助我,有什麼不對?
請參閱http://stackoverflow.com/questions/495021/why-can-templates-only-be-implemented-in-the-header-file – Jarod42
模板必須定義和實現必須在一個文件中。 – andre