简单关于模板类的问题

辉歌 2005-05-08 04:44:37
treenode.h
//====================
#pragma once

template<class T>
class TreeNode
{
private:
TreeNode<T>* left;
TreeNode<T>* right;

public:
T data;
TreeNode(T d,TreeNode<T>* l=NULL,TreeNode<T>* r=NULL);

TreeNode<T>* Left() const;
TreeNode<T>* Right() const;

};

//================
treenode.cpp
//======================
#include "StdAfx.h"
#include ".\treenode.h"

template<class T>
TreeNode<T>::TreeNode(T d,TreeNode<T>* l,TreeNode<T>* r)
: data(d)
, left(l)
, right(r)
{
if( left == NULL && right == NULL )
cout << "\nThis is a leaf.\n";
}

template<class T>
TreeNode<T>* TreeNode<T>::Left() const
{
return left;
}

template<class T>
TreeNode<T>* TreeNode<T>::Right() const
{
return right;
}


//main.cpp
#include "stdafx.h"
#include "Treenode.h"

typedef TreeNode<int> IntTreeNode;
int _tmain(int argc, _TCHAR* argv[])
{

IntTreeNode* left = new IntTreeNode(2);

delete left;

system("pause");
return 0;
}


//=======================
vc7.1
编译后提示:
Tree.obj : error LNK2019: 无法解析的外部符号 "public: __thiscall TreeNode<int>::TreeNode<int>(int,class TreeNode<int> *,class TreeNode<int> *)" (??0?$TreeNode@H@@QAE@HPAV0@0@Z) ,该符号在函数 _main 中被引用
Debug/Tree.exe : fatal error LNK1120: 1 个无法解析的外部命令

不知道哪里出了问题。
...全文
151 11 打赏 收藏 举报
写回复
11 条回复
切换为时间正序
当前发帖距今超过3年,不再开放新的回复
发表回复
zdy_8212 2005-05-23
怎么又重提了一次,呵,我还以为是新的问题呢。。呵。
  • 打赏
  • 举报
回复
studiovc 2005-05-23
函数(类)模板不是真正的函数(类),它只是c++编译器生成具体函数(类)的一个模子。所以不能把函数(类)模板的声明和定义分开放在不同的文件中,而普通的函数(类)可以这样做。
  • 打赏
  • 举报
回复
Rosicky10 2005-05-08
又学到一招
  • 打赏
  • 举报
回复
277894613 2005-05-08
唉!~~~~~~~~
VC的这个功能限制曾经浪费了我很多时间

在此也对楼主深表同情!
  • 打赏
  • 举报
回复
carek 2005-05-08
函数定义的template前加export
  • 打赏
  • 举报
回复
wj19451880 2005-05-08
模板的定义在编译的并不生成代码的, 在对它们进行事例化时才调用生成,并生成其相应的“事例”代码 如果不声明则找不到它们的定义所在。我怀疑它的实现是个巨集, 当然还没有验证。

如果有兴趣可以参考一下:侯杰的C++高效编程。推荐。
  • 打赏
  • 举报
回复
oyljerry 2005-05-08
编译器的限制
  • 打赏
  • 举报
回复
v41dugu 2005-05-08
恩 我也遇到过类似的问题啊~~~~`我在模版类中定义了一个模版函数为友员 在类里面定义就没错 但是我把这个友员函数放在外面定义就报错~~~郁闷~~
  • 打赏
  • 举报
回复
qhfu 2005-05-08
模板类是不可以的,,这个问题好像提的人不少, 要可以好像要加个 export ,但是vc 7。1好像不能这么用, c++primer里面有说
  • 打赏
  • 举报
回复
辉歌 2005-05-08
是的。我这么做了后就对了。难道实现和声明不能分开么?
  • 打赏
  • 举报
回复
wangix 2005-05-08
把模板定义函数写在头文件里应该就可以了
  • 打赏
  • 举报
回复
发帖
C++ 语言

6.2w+

社区成员

C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
帖子事件
创建了帖子
2005-05-08 04:44
社区公告
暂无公告