一个模板编译错误

积木 2004-09-19 01:53:07
MulTree.h:322: instantiated from `MulTreeNode<T>* MulTree<T>::findFirst(T) [with T = std::string]'
MulTree.cpp:21: instantiated from here

错误语句

template<typename T>
MulTreeNode<T>* MulTree<T>::findFirst(const T key)
{
MulTreeNode<T>* result=this->findFirstInSubTree(Root,key);<-
return result;
}
...全文
223 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
darcymei 2004-09-20
  • 打赏
  • 举报
回复
template <typename T>
class MulTree
{
public:
void funb(const T a);
void funa(const T a);

};


template <typename T>
void MulTree<T>::funa(const T a)
{
}

template <typename T>
void MulTree<T>::funb(const T a)
{
this->funa(a);
}

无论分离编译 还是一起编译都没问题 (dev 4.9.9.0)
估计还是楼主的代码 或者 编译器的问题
hewittlee 2004-09-20
  • 打赏
  • 举报
回复
const T key 应该改为 const T& key
pacman2000 2004-09-20
  • 打赏
  • 举报
回复
instantiated from here...
那编译器提示的错误究竟是什么呢?
kakajenifer 2004-09-20
  • 打赏
  • 举报
回复
呵呵,三井 哥的帖子,帮你顶一下^_^
zhangfjj 2004-09-20
  • 打赏
  • 举报
回复
有时间硬是要自己写个模板来试试,再换换其他编译器试试
daylove 2004-09-20
  • 打赏
  • 举报
回复
还有更好的吗?
积木 2004-09-20
  • 打赏
  • 举报
回复
谁知道呢,等我找到了答案就来结了这个帖子,哈哈
idleguy 2004-09-20
  • 打赏
  • 举报
回复
是不是因为如果是const T key,那么参数传进来的时候需要提供一个copy constructor.
而const T& key则不是。

而copy constructor对于引用来说,效率不说,不一定安全。所以才会有这样的要求吧?

随便猜猜……请各位高手指正。

积木 2004-09-19
  • 打赏
  • 举报
回复
可是const T key 就是编译不通过阿
Dong 2004-09-19
  • 打赏
  • 举报
回复
另外,const T key 应该改为 const T& key
---------------------------------------------------
可没有原因说明为什么必须使用上面这个格式的哦!
因为处理方法的不同对const T key 或者const T& key有不同的选择。
问题是你要怎么处理,而不是选择那一种调用方式。

积木 2004-09-19
  • 打赏
  • 举报
回复
呵呵,
findFirstInSubTree
这个东西就是我自己写的,传进去的东西也是const T~。
daylove 2004-09-19
  • 打赏
  • 举报
回复
template<typename T>
MulTreeNode<T>* MulTree<T>::findFirst(const T& key)
{
MulTreeNode<T>* result=this->findFirstInSubTree(Root,key);
return result;
}


又学一招,加const member &
whyglinux 2004-09-19
  • 打赏
  • 举报
回复
没有什么,只不过已经遇到过类似的问题罢了。我的感觉是:在类中能够加 const 的地方,一定不要放过,这样成员函数参数才能接受常量参数或者常量对象才可以调用 const 成员函数。

程序中 findFirst 成员函数并没有改变其数据成员,因此除了上面参数改为 const 引用之外,还应该把这个成员函数设置为 const。
zhangfjj 2004-09-19
  • 打赏
  • 举报
回复
没有研究过,但key在模板中这样的调用,
MulTreeNode<T>* result=this->findFirstInSubTree(Root,key);
就要看findFirstInSubTree()的原型了
积木 2004-09-19
  • 打赏
  • 举报
回复
狠了,whyglinux(山青水秀) ,我是遍历了n各地方都没有找到为什么要用const T& key
而不可以const T,这个我足足郁闷了两个小时,呵呵。在哪本书的哪个地方讲过这个问题呢?
whyglinux 2004-09-19
  • 打赏
  • 举报
回复
没有提供更详细的信息,只能猜着来回答了。

现在的大多数编译器还不支持分离编译模式(即没有实现C++关键字export的功能)。因此,需要把类的定义和类成员的定义放在同一个文件中(一般是头文件),不能象非模板类那样成员函数声明和定义分开来存放。

另外,const T key 应该改为 const T& key。

64,654

社区成员

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

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