我使用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);
任何有关修复此错误的帮助都将非常感激。谢谢!
答案 0 :(得分:1)
我怀疑你已经在&#34; treeNode.cpp&#34;中实现了treeNode
方法。
在这种情况下,他们还没有被实例化。
所有您的treeNode
实现都需要在treeNode.h
标头中,因此编译器可以在使用它们时实例化这些函数。
否则,您将只有声明,没有定义 - 因为编译器无法生成任何定义 - 并且您将获得相同的链接错误,就好像您根本没有任何实现一样。