2010-06-02 48 views
6

我正在學習一些CSP(約束滿足)理論的東西,並且正在使用this庫來解析XML文件。我使用Xcode作爲IDE。重複符號鏈接器錯誤(C++幫助)

我的程序編譯得很好,但是當它連接文件時,我得到了XMLParser_libxml2.hh文件的重複符號錯誤。我的文件被分開,例如:

,其包括上述
甲類實現文件包括類的頭文件中的XMLParser的文件中的類的頭文件
甲主文件,其中包括類頭文件

重複的符號出現在main.o和classfile.o中,但據我所知,我實際上並沒有將該.hh文件添加兩次。

完整的錯誤:

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)在一個文件中同時具有類和函數的定義和實現(似乎這可能是必要的,由於在'header'文件中使用模板)。任何想法如何解決我所有的類文件在我的main.cpp? (我試過#ifdefs,他們不工作)。

+3

聲明'inline'的頭文件中的所有函數(在類定義或函數模板中定義的成員函數除外)? – 2010-06-02 00:29:27

+0

我們需要更多關於代碼結構的詳細信息,並且需要知道生成重複符號錯誤的類是由您編寫還是已經存在。基本上,這意味着你正試圖鏈接你的代碼兩次。它聽起來像是我曾經遇到過的一個問題,這是由於我構建我的應用程序的方式,即我使用了靜態和動態鏈接的混合。所以確保你鏈接靜態或一切動態的一切。混合兩者都很複雜,我沒有深入瞭解 – 2010-06-02 00:32:24

+0

@James 如果你指的是鏈接中提供的頭文件,那麼我相信所有的函數都是成員函數的一個類。由於代碼是一團糟,所以有點難以分辨。就我自己的代碼而言,我沒有任何不是成員函數的函數。 @Yan 生成錯誤的文件最終由我創建。這個錯誤是由於在我的類頭文件中包含了XMLParser頭文件(不是我寫的),而這個頭文件又被包含在主函數和類實現文件(我寫的,並且是錯誤中指定的文件)中。 – Vash265 2010-06-02 00:41:29

回答

3

詹姆斯是對的。頭文件中的三個模板函數需要內聯聲明才能正確鏈接。謝謝!