2013-07-24 35 views
0

在使用Xcode中的C++命令行工具時,我的可執行文件突然損壞,構建失敗,並且收到Apple Mach-O鏈接程序錯誤。調試企圖大量後,我縮小了問題到這部分代碼:向量結構 - > Apple Mach-O鏈接程序錯誤

struct Word { 
    std::string word; 
    int syllCount, phoCount; 
    std::vector<std::string> syllable, phoneme; 
}; 

struct Unit { 
    std::string str; 
    std::vector<int> probs; 
}; 
// **COMMENT OR RECEIVE ERROR HERE** 
// std::vector<Word> words; 
// std::vector<Unit> units; 

只需通過刪除這兩個向量聲明出來的頭文件,所有錯誤消失;然而,我需要那些載體...

我已經閱讀了這個特定的錯誤了一點,但沒有發現是以這種方式造成的。我做了一個業餘的錯誤,還是這是一個不尋常的錯誤。無論哪種方式,任何意見將不勝感激。

這裏順便錯誤消息:

duplicate symbol _words in: 
>/Users/DASmithII/Library/Developer/Xcode/DerivedData/Organizer->dviebpebgpvwotbsxuwyhrvulzfi/Build/Intermediates/Organizer.build/Debug/Organizer.build/Object>s-normal/x86_64/main.o 
>/Users/DASmithII/Library/Developer/Xcode/DerivedData/Organizer->dviebpebgpvwotbsxuwyhrvulzfi/Build/Intermediates/Organizer.build/Debug/Organizer.build/Object>s-normal/x86_64/Global.o 
>duplicate symbol _units in: 
>/Users/DASmithII/Library/Developer/Xcode/DerivedData/Organizer->dviebpebgpvwotbsxuwyhrvulzfi/Build/Intermediates/Organizer.build/Debug/Organizer.build/Object>s-normal/x86_64/main.o 
>/Users/DASmithII/Library/Developer/Xcode/DerivedData/Organizer->dviebpebgpvwotbsxuwyhrvulzfi/Build/Intermediates/Organizer.build/Debug/Organizer.build/Object>s-normal/x86_64/Global.o 
>ld: 2 duplicate symbols for architecture x86_64 
>clang: error: linker command failed with exit code 1 (use -v to see invocation) 
+1

將'std :: vector '等定義移動到.cpp文件中,並在頭文件中放入'extern std :: vector '等。 –

+0

你應該把它作爲答案,所以它可以被接受 –

回答

0

接頭抱怨並那些符號已經定義多次。這是因爲您已經將它們定義在多個.cpp文件包含的頭文件中,因此編譯器會多次實例化對象。

std::vector<Word>等定義移動到.cpp文件,並將extern std::vector<Word>等放在頭文件中,問題就會消失。

+0

感謝您的快速解決。它現在很好用。 –