c++由於標頭檔案重複包含了所定義的變數或者常量,編譯器就會報重複定義的錯誤。如果你碰見這樣的問題可以考慮重下面幾個方面去解決:
1、在出現重定義錯誤的標頭檔案加上:
#ifndef filename_h_
#define filename_h_
....(標頭檔案內容)
#endif
注意如果filename_h_這個名字已經被使用,將會出現未定義問題(這裡不討論),這是你保證filename_h_唯一就可以。
2、在出現重定義錯誤的標頭檔案加程式設計客棧上這一句:#pragma once 就可以解決(vs建立的類都會預設新增這一行),方式2與1其實是一樣的,二選一即可(個人推薦使用方式1)
採用方式1或方式2基本上可以解決95%以上的重複定義的問題。在開發過程中,經常會使用第三方的api,單獨使用某乙個api都正常,但是同時使用多個api的時候就會出程式設計客棧現某些結構體重複定義的問題,此時可以按照下面幾種方式處理:
3、將重複定義的struct、變數名、常量,提出到乙個公共的.**件中,然後將原檔案中公共部分的struct、變數名、常量遮蔽或刪除yrsgiprjfc,同時在標頭檔案中包含公共的.**件。
4、如果三防庫中,出現c風格、c++風格兩種不同的struct定義方式,就不能按照3的方式解決了(方式3解決後編譯正常,但是會出現鏈結問題,分析lib中的匯出函式中引數與c風格參www.cppcns.com數差異)。此時只需要將c風格方式的struct修改為c++風格的struct,同時更新api標頭檔案中對應使用c風格struct位置。
本文標題: 解決c++中重定義的方法總結
本文位址: /ruanjian/c/95079.html
c 中的重定義,重包含。
1.重定義的概念 乙個變數被直接或者間接多次定義導致的錯誤 導致重定義的三種情況 第一種 就是同乙個變數多次在乙個檔案中定義,例如 int a 1 int a 2 a就是 重定義 第二種 由於重複包含標頭檔案導致的變數的重定義,例如在a.h中定義了乙個變數 int a 3 後來b.h包含了a.h,並...
C 中的型別重定義
發現重複定義是由於從兩個不同的路徑包含了同乙個標頭檔案而引起的,同事也建議從另外乙個路徑開啟工程試試,這才慢慢發現了原因。這個原因可能有些拗口,而事實上要出現這種錯誤也有些 曲折 讓我從不同情況下的型別重定義來解釋一下吧。我總結的型別重定義情況有三。一 沒有在檔案頭加 pragma once指示符。...
解決C 重定義問題 匿名命名空間
今天遇到乙個命名空間重定義的問題,程式框架大體如下 inte ce中定義的是乙個namespace,形式如下 namespade np 並且三個module 1,2,3 以及core模組全都需要引用這個命名空間中的資料 與訊息傳遞有關 並且這幾個模組是分別編譯的,最後鏈結起來,編譯module1,m...