当前位置:  开发笔记 > 编程语言 > 正文

带有模板的c ++类无法找到其构造函数

如何解决《带有模板的c++类无法找到其构造函数》经验,为你挑选了2个好方法。

我有一个问题,我真的不明白.我有一个类Node.

template
class node {
protected:
    T _data;
public:
    node(T data);   
};

这是在"node.h"文件中.在"node.cpp"文件中,有这个构造函数:

#include "node.h"

template
node::node (T data) {
    _data = data;
}

虽然编译器没有发现错误,但链接器(ld)告诉我:

/ usr/bin/ld:未定义的符号:

节点的::节点(int)的

奇怪的部分...如果我将构造函数从.cpp移动到.h文件,一切正常.问题出在哪儿?



1> Michael Kris..:

问题是模板不是类 - 您通常不会将它们写在两个单独的文件中.模板类是编译器用于生成类的代码.因此,您的实现代码需要有效内联,即在您发现的标题中.

要更全面地解释为什么必须这样,请参阅C++ FAQ Lite.



2> JaredPar..:

作为一般规则,您必须将所有模板成员放在头文件中.模板是在使用的基础上编译的,因此整个定义需要在任何使用它们的地方都可用.将代码放在头文件中将解决该问题.

您可以将模板定义放在CPP文件中的唯一时间是模板仅在该CPP文件中使用.原因是它符合整个定义可用于编译的标准.

将node.cpp的内容移动到node.h将解决问题.

奇怪的情景

然后,您还可以将所有内容放在CPP文件中并包含CPP文件.C++以这种方式很灵活.我只提到这个,因为我之前见过.当它碰到我桌子的顶部时,我的下颚实际上擦伤了.

推荐阅读
N个小灰流_701
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有