关于类模板的定义时的代码布置问题(有点怀疑编译器了)
//x.h中定义类
template<class T>
class A{
public:
int Length() const;
};
//x.cpp类实现文件
#include "x.h"
template<class T>
int A<T>::Length() const
{
return 10;
}
//使用类
#include "x.h"
#include <iostream.h>
main()
{
A<int> a;
cout << a.Length();
}
连接错误:
error LNK2001: unresolved external symbol "public: int __thiscall A<int>::Length(void)const " (?Length@?$A@H@@QBEHXZ)
可是如果x.cpp和x.h合并到x.h就没有问题
奇怪啊~~~~~~~~~~
问题点数:100、回复次数:5Top
1 楼zhouqingyuan(浪帆)回复于 2003-12-02 22:58:38 得分 50
没有什么奇怪的,这个问题已经问了好多次了,VC6.0对于模板的支持是不好,必须把定义和实现防在一个文件中才可以。
不过vc7.0已经可以放在两个文件了。Top
2 楼nbb()回复于 2003-12-02 23:16:08 得分 0
对Top
3 楼Polarislee(北极星)(无房无车,飘在北京)回复于 2003-12-02 23:23:42 得分 0
不过vc7.0已经可以放在两个文件了。
可以了吗,vc7已经支持export关键字了?真的假的Top
4 楼cniou(混混)回复于 2003-12-02 23:46:06 得分 50
其实template在编译时扩展时同宏几乎一样
C++标准并没有规定其具体实现应该放在哪儿
就连C++ Programming Language也说如果在不同的CPP文件中实现编译器不会报错
所以你在使用template的时候必须保证该CPP文件能找到template的定义。
template的定义一般是在头文件里定义的,这样可以保证不同CPP文件可以引用同
一个定义Top
5 楼crab_hn(螃蟹)回复于 2003-12-03 07:37:02 得分 0
7.0真的可以吗
怎么我的不可以
而且dev-c++也不可以
原来是这个问题啊
谢谢各位Top




