LinuxSir.cn,穿越时空的Linuxsir!

 找回密码
 注册
搜索
热搜: shell linux mysql
查看: 851|回复: 4

关于C++类模板的问题

[复制链接]
发表于 2004-8-4 17:16:50 | 显示全部楼层 |阅读模式
我作练习时写了一个叫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文件,格式不变),就能顺利地通过编译,并能运行。

是否用类模板就一定得把类的声明和定义定在同一个文件里?
发表于 2004-8-4 17:34:11 | 显示全部楼层
u got it
发表于 2004-8-5 23:16:29 | 显示全部楼层
模板类中所有与模板相关定义都必须放在头文件中
发表于 2004-8-7 21:38:07 | 显示全部楼层
在seqlist.h最下面加入
template class SeqList<char>;
发表于 2004-8-8 10:05:32 | 显示全部楼层
那要是以后还要用int实例化呢,难道再去改头文件
您需要登录后才可以回帖 登录 | 注册

本版积分规则

快速回复 返回顶部 返回列表