當前位置:首頁 » 編程軟體 » 代碼編譯多重定義

代碼編譯多重定義

發布時間: 2025-06-01 04:14:11

❶ C++中兩個文件讀取一個.h時多個多重定義錯誤

從昨晚到現在查了很多東西,但結果卻超級簡單:
首先#include在編譯時會被預處理器將.h中的所有內容拷貝到當前文件中, 如果.h中還include了別的.h, 則遞歸拷貝;
如果.h文件中沒有頭文件保護,即#ifndef ... #define ... #endif則如果某文件include 1.h和 3.h, 而1.h也#include了3.h, 則會有完全相同的兩份3.h中的代碼, 這樣就直接報錯了; 但加入了頭文件保護後就可以保證在單一文件中只會編譯一遍3.h的代碼;
所以到目前為止如果加入了頭文件保護,在單一文件中不會有重聲明(定義),編譯可以通過,生成各個.o文件了, 頭文件中定義的變數都定義並分配了空間,就你的問題而言,tool.o中有Map, 同時main.o中也有Map;
然後就是鏈接了,此時會將各.o中的全局符號加入全局符號表中,如果.o中有相同的全局變數則會報重定義, 即tool.o和main.o中的Map沖突了。

總結下:頭文件保護只是保證在 單一文件中不會重復include, 但不保證在不同文件中重復include。

解決辦法為在.h中只聲明變數: extern map Map; 而在tool.cpp中定義: map Map;

多謝問題哈,終於搞清楚了這個問題!

❷ 編譯C程序出現多重定義,怎麼解決

應該是你在2個c文件中都定義了全局的MmiUtil_WaitKeyMenu,可以聲明為static,或者改個名字

c語言編譯時one or more multiply defined symbols found 。剛學c求大俠幫忙看看

意思是:一個或多個符號定義錯誤。

解決的方法和詳細的操作步驟如下:

1、第一步,將源代碼保存在文件中,然後編譯並運行,如下圖所示,然後進入下一步。

❹ C語言編譯出現了 多重定義的符號 的報錯

同一個工程中創建了多個main函數
關閉當前工程,另建一個工程後重新編譯

熱點內容
java返回this 發布:2025-10-20 08:28:16 瀏覽:593
製作腳本網站 發布:2025-10-20 08:17:34 瀏覽:888
python中的init方法 發布:2025-10-20 08:17:33 瀏覽:581
圖案密碼什麼意思 發布:2025-10-20 08:16:56 瀏覽:765
怎麼清理微信視頻緩存 發布:2025-10-20 08:12:37 瀏覽:683
c語言編譯器怎麼看執行過程 發布:2025-10-20 08:00:32 瀏覽:1012
郵箱如何填寫發信伺服器 發布:2025-10-20 07:45:27 瀏覽:255
shell腳本入門案例 發布:2025-10-20 07:44:45 瀏覽:113
怎麼上傳照片瀏覽上傳 發布:2025-10-20 07:44:03 瀏覽:806
python股票數據獲取 發布:2025-10-20 07:39:44 瀏覽:712