C ++程序中未定义的引用错误

时间:2013-03-11 20:23:36

标签: c++ xml-parsing compiler-errors linker-errors

我使用RapidXML在C ++中解析XML文件。我已经制作了treeNode.h和treeNode.cpp文件。我正在创建一个treeNode对象来帮助我解析。当我尝试这样做时,它给了我一个未定义的引用错误。给我错误的代码行(我认为)是以下行:

treeNode<xml_node<> > * tn = new treeNode<xml_node<> >(root_node);

如果你想知道我从哪里获得root_node,它在我的main.cpp中定义如下:

xml_document<> doc;
doc.parse<0>(&buffer[0]);               
xml_node<> * root_node = doc.first_node();

错误信息是:

undefined reference to `treeNode<rapidxml::xml_node<char> >::treeNode(rapidxml::xml_node<char>*)'
collect2: ld returned 1 exit status

这是我在treeNode.h中的三个构造函数:

treeNode(T* element1);
treeNode(T* element1, T* parent1);
treeNode(T* element1, T* parent1, vector<treeNode<T>*> child1);

任何有关修复此错误的帮助都将非常感激。谢谢!

1 个答案:

答案 0 :(得分:1)

我怀疑你已经在&#34; treeNode.cpp&#34;中实现了treeNode方法。

在这种情况下,他们还没有被实例化。

所有您的treeNode实现都需要在treeNode.h标头中,因此编译器可以在使用它们时实例化这些函数。
否则,您将只有声明,没有定义 - 因为编译器无法生成任何定义 - 并且您将获得相同的链接错误,就好像您根本没有任何实现一样。