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

wlnju 2012-06-25 07:53:03
主要是关于模板类的初始化。我已经把代码简化到最少,其他的无关的都被我删了。
3个文件main.cpp,list.cpp,list.h
list.h


#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

#include "list.h"
template<class T>
List<T>::List(){
head = new node<T>;
head->next = 0;
}

main.cpp

#include "list.h"
using namespace std;
int main(){
node<int> node;//OK
List<int> iList;//ERROR
return 0;
}

现在问题是node初始化没问题,可是LIST初始化就报错,怎么想都想不出来,换了2个编译器了都说LIST那行有错,应该是程序问题。谢谢各位。
...全文
77 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
aopha 2012-06-25
  • 打赏
  • 举报
回复
坑爹的,我还是基础不扎实呀,调半天才发现问题,答复后,悲催的发现已经结题。
aopha 2012-06-25
  • 打赏
  • 举报
回复
模板的实现不能放到cpp中,需定义在同一个.h文件中
smsgreenlife 2012-06-25
  • 打赏
  • 举报
回复
模板函数的声明与定义必须放在同一个头文件中。

wlnju 2012-06-25
  • 打赏
  • 举报
回复
果然高手风范,那可否再问下,如果以后想尽量让工程低耦合,那我只能把所有的模板放到头文件里而不是CPP文件里?谢谢
[Quote=引用 1 楼 的回复:]

template <class T>
class node{ //由于node类没有定义构造函数,因此在创建对象的时候,系统会提供
//默认构造函数
public:
T data;
node<T> *next;
};

template <class T>
class List{
public:
List();//提供了构……
[/Quote]
  • 打赏
  • 举报
回复
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;
}



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


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

64,654

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧