请教一下一个问题,关于.h和.cpp的问题
我用的visual studio2010,
有一个简单代码,队列。h中代码为
template<class T>
class SLNode{
public:
T date;
SLNode<T> *next;
SLNode(SLNode* nextNode=NULL);
SLNode(const T &item,SLNode* nextNode=NULL);
};
队列.cpp中代码如下
template<class T>
SLNode<T>::SLNode(SLNode* nextNode=NULL){
next=nextNode;
}
template<class T>
SLNode<T>::SLNode(const T &item,SLNode* nextNode=NULL){
date=item;
next=nextNode;
}
检查时总会出错,请问一下原因
错误1error C2143: 语法错误 : 缺少“;”(在“<”的前面)c:\users\dell\documents\visual studio 2010\projects\第一次作业\第一次作业\队列.cpp2
错误2error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 intc:\users\dell\documents\visual studio 2010\projects\第一次作业\第一次作业\队列.cpp2
错误3error C2988: 不可识别的模板声明/定义c:\users\dell\documents\visual studio 2010\projects\第一次作业\第一次作业\队列.cpp2
错误4error C2059: 语法错误:“<”c:\users\dell\documents\visual studio 2010\projects\第一次作业\第一次作业\队列.cpp2
错误5error C2143: 语法错误 : 缺少“;”(在“{”的前面)c:\users\dell\documents\visual studio 2010\projects\第一次作业\第一次作业\队列.cpp6
错误6error C2447: “{”: 缺少函数标题(是否是老式的形式表?)c:\users\dell\documents\visual studio 2010\projects\第一次作业\第一次作业\队列.cpp6
[解决办法]
模板的编译比较特殊,把类的声明和实现全部放在cpp文件里即可,然后用到的地方直接#include "XX.cpp",这个方法不是很雅观,你可以搜一下C++模板类的编译方式,还是可以学到不少东西的
[解决办法]
1 你的构造函数的参数错了 SLNode(SLNode* nextNode=NULL);改为 SLNode(SLNode<T>* nextNode=NULL);
后面的类似
2 模板的定义最好和声明放一起 都放在 .h文件中。 不然 就要在使用模板的文件中 包含 .h 和 .cpp
大概是这样。没有帮你编译。
[解决办法]
模版的声明及定义必须放在同一文件中,这是规定