简单关于模板类的问题

辉歌 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 个无法解析的外部命令

不知道哪里出了问题。
...全文
174 11 打赏 收藏 转发到动态 举报
写回复
用AI写文章
11 条回复
切换为时间正序
请发表友善的回复…
发表回复
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
  • 打赏
  • 举报
回复
把模板定义函数写在头文件里应该就可以了

64,649

社区成员

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

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