|
我作练习时写了一个叫SeqList的类,它的所有声明都在SeqList.h里,所有定义都在Seqlist.cpp里,测试的文件叫test.cpp(包含main()函数)。用gcc编译,报错如下:
g++ -o seqlist seqlist.o test.o
test.o: In function `main':
test.o(.text+0x20): undefined reference to `SeqList<char>::SeqList[in-charge]()'
collect2: ld returned 1 exit status
make: *** [seqlist] Error 1
后来用VC 6.0或者BCC5.5也不能通过编译。
类的声明和定义大概是这样的,以下以其中一个方法(函数)为例:
//seqlist.h
template<class T>
class SeqList
{
private:
...
public:
...
SeqList();
};
//seqlist.cpp
template<class T>
SeqList::SeqList()
{
...
}
//test.cpp
int main()
{
...
SeqList<char> mylist;
...
}
如果把类的声明和定义写在一个文件里(我把它们一起写到.h文件,格式不变),就能顺利地通过编译,并能运行。
是否用类模板就一定得把类的声明和定义定在同一个文件里? |
|