6

私は現在、いくつかのCSP(制約充足)理論に関することを学んでおり、このライブラリを使用してXMLファイルを解析しています。XcodeをIDEとして使用しています。

私のプログラムは正常にコンパイルされますが、ファイルをリンクしようとすると、XMLParser_libxml2.hhファイルで重複シンボルエラーが発生します。私のファイルは次のように分離されています。

上記のXMLParserファイルを含むクラスヘッダーファイルクラスヘッダーファイルを含む
クラス実装ファイルクラスヘッダーファイル
を含むメインファイル

main.oとclassfile.oで重複するシンボルが発生していますが、私が知る限り、その.hhファイルを実際に2回追加しているわけではありません。

完全なエラー:

ld: duplicate symbol bool CSPXMLParser::UTF8String::to<std::basic_string<char,
std::char_traits<char>, std::allocator<char> > >(std::basic_string<char,
std::char_traits<char>, std::allocator<char> >&) constin
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-
normal/x86_64/dStructFill.o and
/Users/vash265/CSP/Untitled/build/Untitled.build/Debug/Untitled.build/Objects-
normal/x86_64/main.o`

クラスの実装をメインファイルにコピーし、クラス実装ファイルをコンパイルターゲットから削除すると、エラーが削除されますが、これはまとまりのない混乱であり、すぐにクラスを追加する予定です(それらを別々のファイルに入れてください)。

私が理解したように、これはファイル(XMLParser_libxml2.hh)が1つのファイルにクラスと関数の定義と実装の両方を持っていることが原因です(そして、テンプレートの使用のためにこれが必要だったようですその「ヘッダー」ファイル)。main.cppにすべてのクラスファイルを貼り付ける方法について何かアイデアはありますか?(私は試しましたが#ifdefs、機能しません)。

4

1 に答える 1

3

ジェームズは正しかった。適切にリンクするには、ヘッダー ファイル内の 3 つのテンプレート関数をインラインで宣言する必要がありました。ありがとう!

于 2010-06-02T10:16:23.830 に答える