1
不幸的是我不能在這裏發佈所有的源代碼。我可以描述結構。所有頭文件都有#ifndef/#define/#endif保護。的結構如下:C++連接問題:多重定義
- 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
果然,雖然,它是二進制文件。我如何重構我的代碼以防止此鏈接問題?