未解决的外部符号。定义好

时间:2016-09-27 20:27:54

标签: c++

我知道当我声明函数而不是定义它时可能会出现这个问题。 但事实并非如此。

//In the 'H' file. Template class.
BSNode(T data);


\\In the cpp definitions

template <class T>
BSNode<T>::BSNode(T data)
{
    _root = this;
    _data = data;
    _right = NULL;
    _left = NULL;
}

然而,我得到了下一个错误:

Error   1   error LNK2019: unresolved external symbol "public: __thiscall BSNode<int>::BSNode<int>(int)" (??0?$BSNode@H@@QAE@H@Z) referenced in function _main  c:\Users\a\OneDrive\ss\visual studio 2013\Projects\Project5\2\Source.obj    2_TREES

如果不是&#39; H&#39;之间的不兼容性,也可能导致此错误发生。而且&#39; cpp&#39;文件?

1 个答案:

答案 0 :(得分:0)

使用带有commented and liked and reported实例化的构造函数的代码也应该在int文件中。编译器需要它来生成代码实例,因为它无法生成所有可能的实例。

几种解决方案:

  • 使用.cpp文件中的int实例移动至少一次使用构造函数
  • cpp文件重命名为.cpp文件,您可以将其包含在使用.template个实例的每个文件中。
  • BSNode文件中添加template class BSNode<int>;以强制模板实例化。