关于模版类的有关问题
关于模版类的问题
我建了一个最简单的模版类,可测试的时候出错了。
==========================
//A.h
#ifndef A_H
#define A_H
template <class T>
class A {
public:
A();
};
#endif
==========================
//A.cpp
#include "A.h "
#include <iostream>
using std::cout;
template <class T>
A <T> ::A() {
cout < < "construct " < <endl;
};
===========================
//test.cpp
#include "A.h "
void main()
{
A <int> a;
}
============================
错误信息是error LNK2001: unresolved external symbol "public: __thiscall A <int> ::A <int> (void) " (??0?$A@H@@QAE@XZ)
不知道是什么原因
------解决方案--------------------
又是模板试图分离编译。把a.cpp里的内容全挪入a.h
------解决方案--------------------
模板实现放在那个.h文件
分离编译看你的编译器支持export关键字么
希望说情出了
------解决方案--------------------
不管VC几,尽量不要把模板放实现在cpp文件中。
除非你的模板只在那一个文件中被使用。
export功能也非常有限的,并不能实现真正意义上的独立编译,而且还比较复杂,尤其对于初学者,别去了解也罢。
------解决方案--------------------
哎,楼主,你错了一个概念。模板类不是类,正确叫法应该是“类模板”。
我建了一个最简单的模版类,可测试的时候出错了。
==========================
//A.h
#ifndef A_H
#define A_H
template <class T>
class A {
public:
A();
};
#endif
==========================
//A.cpp
#include "A.h "
#include <iostream>
using std::cout;
template <class T>
A <T> ::A() {
cout < < "construct " < <endl;
};
===========================
//test.cpp
#include "A.h "
void main()
{
A <int> a;
}
============================
错误信息是error LNK2001: unresolved external symbol "public: __thiscall A <int> ::A <int> (void) " (??0?$A@H@@QAE@XZ)
不知道是什么原因
------解决方案--------------------
又是模板试图分离编译。把a.cpp里的内容全挪入a.h
------解决方案--------------------
模板实现放在那个.h文件
分离编译看你的编译器支持export关键字么
希望说情出了
------解决方案--------------------
不管VC几,尽量不要把模板放实现在cpp文件中。
除非你的模板只在那一个文件中被使用。
export功能也非常有限的,并不能实现真正意义上的独立编译,而且还比较复杂,尤其对于初学者,别去了解也罢。
------解决方案--------------------
哎,楼主,你错了一个概念。模板类不是类,正确叫法应该是“类模板”。