怒重发一帖,适才没人知道答案=。=
怒重发一帖,刚才没人知道答案。主要是关于模板类的初始化。我已经把代码简化到最少,其他的无关的都被我删
怒重发一帖,刚才没人知道答案=。=
主要是关于模板类的初始化。我已经把代码简化到最少,其他的无关的都被我删了。
3个文件main.cpp,list.cpp,list.h
list.h
C/C++ code#include <iomanip>#include <iostream>#ifndef LIST_H_#define LIST_H_using namespace std;template <class T>class node{public: T data; node<T> *next;};template <class T>class List{public: List();private: node<T> *head;};#endif
list.cpp
C/C++ code#include "list.h"template<class T>List<T>::List(){ head = new node<T>; head->next = 0;}
main.cpp
C/C++ code#include "list.h"using namespace std;int main(){ node<int> node;//OK List<int> iList;//ERROR return 0;}
现在问题是node初始化没问题,可是LIST初始化就报错,怎么想都想不出来,换了2个编译器了都说LIST那行有错,应该是程序问题。谢谢各位。
[解决办法]template <class T>
class node{ //由于node类没有定义构造函数,因此在创建对象的时候,系统会提供
//默认构造函数
public:
T data;
node<T> *next;
};
template <class T>
class List{
public:
List();//提供了构造函数,但是没有定义,只是声明,所以在创建对象时,无法完成创建。
private:
node<T> *head;
};
#endif
list.cpp
C/C++ code
#include "list.h" //这里出问题了,模板函数的定义必须放在类的声明的头文件中,
不能在另外的源文件中定义
template<class T>
List<T>::List(){
head = new node<T>;
head->next = 0;
}
总之,模板函数不支持声明与定义分开,也就是说声明与定义必须放在同一个头文件中。
楼主遇到的问题就是这里出的问题。
[解决办法]模板函数的声明与定义必须放在同一个头文件中。