首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

怒重发一帖,适才没人知道答案=。=

2012-06-27 
怒重发一帖,刚才没人知道答案。主要是关于模板类的初始化。我已经把代码简化到最少,其他的无关的都被我删

怒重发一帖,刚才没人知道答案=。=
主要是关于模板类的初始化。我已经把代码简化到最少,其他的无关的都被我删了。
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;
}



总之,模板函数不支持声明与定义分开,也就是说声明与定义必须放在同一个头文件中。


楼主遇到的问题就是这里出的问题。


[解决办法]
模板函数的声明与定义必须放在同一个头文件中。

热点排行