0

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 の 3 つのコンストラクターです。

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

このエラーを修正するための助けをいただければ幸いです。ありがとうございました!

4

1 に答える 1

1

treeNode「treeNode.cpp」でメソッドを実装したと思われます。

その場合、それらはインスタンス化されていません。

すべてtreeNode実装はtreeNode.hヘッダーにある必要があるため、コンパイラーは使用時に関数をインスタンス化できます。
そうしないと、コンパイラが何も生成できなかったため、宣言だけで定義がなくなり、実装がまったくない場合と同じリンクエラーが発生します。

于 2013-03-11T20:38:09.057 に答える