残念ながら、ここにすべてのソースコードを投稿することはできません。構造は説明できますが。すべてのヘッダーファイルには、#ifndef /#define /#endifガードがあります。構造は次のとおりです。
- node.h-tree.hに含まれています
- tree.h-tree.cppおよびmain.cppに含まれています
- tree.cpp
- main.cpp
グローバル名前空間のnode.hで、次の独立した関数を宣言します。
bool char_sort_func(Path first, Path second)
{
return (first->label() < second->label());
}
(注:以下に示すように、パスは単なるshared_ptrです)ビルドしようとすると、関数がtree.oとmain.oの両方に存在するという複数の定義エラーが発生します。
> make
g++ -c -g -Wall main.cpp -I /usr/include
g++ -c -g -Wall tree.cpp -I /usr/include
g++ -Wall -o tool tree.o main.o -L /usr/lib -l boost_program_options
main.o: In function `char_sort_func(boost::shared_ptr<Edge>, boost::shared_ptr<Edge>)':
node.h:70: multiple definition of `char_sort_func(boost::shared_ptr<Edge>, boost::shared_ptr<Edge>)'
tree.o:node.h:70: first defined here
collect2: ld returned 1 exit status
make: *** [all] Error 1
すべてのソースファイルを検索して、それが正しいかどうかを確認しようとしましたが、間違った場所には表示されません。
> grep char_sort_func *
Binary file main.o matches
node.h:bool char_sort_func(Path first, Path second)
node.h: std::sort(edges_.begin(), edges_.end(), char_sort_func);
Binary file trie.o matches
案の定、それはバイナリファイルにあります。このリンクの問題を防ぐためにコードを再構築するにはどうすればよいですか?