我試圖使用開源的VC++代碼。 我想將一個新項目添加到現有的VC++解決方案中,這個解決方案變成了一場噩夢。 我面臨的其中一個問題是修復「類型重定義」錯誤,我已經修復了一些錯誤,但現在我陷入了其他一些錯誤。代碼庫很大,所以沒有snippests ...如何處理「類類型重定義」
我的問題是,是否有任何「最佳實踐」來追查這些錯誤?
謝謝。
我試圖使用開源的VC++代碼。 我想將一個新項目添加到現有的VC++解決方案中,這個解決方案變成了一場噩夢。 我面臨的其中一個問題是修復「類型重定義」錯誤,我已經修復了一些錯誤,但現在我陷入了其他一些錯誤。代碼庫很大,所以沒有snippests ...如何處理「類類型重定義」
我的問題是,是否有任何「最佳實踐」來追查這些錯誤?
謝謝。
通過類型重定義,我假設在您的工作區項目中定義了相同的名稱class
es或typedef
,並且它們在編譯時導致問題(不會與多個定義鏈接器錯誤混淆)。
最好的做法是始終將它們放在模塊或項目庫中的namespace
。
例如
// project1.h
namespace project1 {
class X {};
}
// project2.h
namespace project2 {
class X {};
}
10x,請參閱我對@sharptooth的評論。 「包含」代碼不是我的,所以我不能添加命名空間。我只是在尋找一種方法來追蹤重新定義。 –
我的建議是將單獨項目中的所有代碼放在單獨的名稱空間中。那麼你不必擔心衝突。如果你有很多頭文件和源文件,這可能是很多工作,但從長遠來看它可能是值得的。
而且您不必將名稱空間添加到所有函數/類,只需在所有頭文件/源文件的頂部添加namespace foo {
,並在底部添加}
。
10x。請看我對@sharptooth的評論 –
當您嘗試在兩個或多個不同的程序中包含相同的頭文件時,如 調用B和B調用C,並且如果在A和B中都包含C,則會發生此類錯誤。同樣的事情發生在我身上,並解決了它。
嘗試#pragma一次。 – ervinbosenbacher