編譯的多重定義怎麼解決
1. 編譯C程序出現多重定義,怎麼解決
應該是你在2個c文件中都定義了全局的MmiUtil_WaitKeyMenu,可以聲明為static,或者改個名字
2. 關於multiple defination of (多重定義 )的錯誤
1.
不要在.h裡面聲明變數,而是在.c(.cpp)裡面定義int mm=3;
然後在A.h裡面用extern int mm;
2.
extern不要賦值。
ps:還沒解決?
回樓上,沒用的,那個能防止重復include,但是不能解決這里的問題。
頭文件裡面是不提倡也不應該定義一個變數的。
如果熟悉VC的win32程序,就知道那個theApp也是放在cpp文件里的,而不是頭文件。
3. c語言編譯出現了 多重定義的符號 的報錯
程序為:
#include<stdio.h>
intmain(){
printf("Helloworld!");
return0;
}

4. C++項目編譯錯誤:找到一個或多個多重定義的符號。。我覺得應該是include的問題,但是不知道怎麼改
確實是include的問題
因為錯得比較離譜,對於函數的定義、函數的聲明、函數的定義和聲明分開等等概念不清楚,所以建議還是專門找找這方面的資料,了解如何編寫多文件工程再來。
另:有個不正統的方法可以把你這個改得能編譯通過,把book.cpp和BData.cpp從工程中去掉(不是刪除文件)應該就沒問題了
5. C語言編譯出現了 多重定義的符號 的報錯
同一個工程中創建了多個main函數
關閉當前工程,另建一個工程後重新編譯
6. c語言里系統總是說,有符號多重定義,怎麼找是哪個符號,選取下面的
一般編譯器會提示哪個符號被重定義。下面是VS2012環境編譯的情況。如果編譯器不指出,可以右擊變數,點擊轉到定義,看下是否多個地方定義。

7. c++避免多定義或重定義
你好,最好的處理辦法是在工程的cpp文件里定義全局變數,然後在別的文件里不要包含。直接用
extern聲明就好了。比如extern int g_a;
8. 多重定義怎麼解決
鏈接時多重定義怎麼辦?一般解決方案是:只保留一個定義的地方就好了,這對強迫症,很友好!但往往有時又嫌麻煩,或者雜七雜八的的原因導致了,兩個定義都保留,但只讓鏈接時,只鏈接第一個遇到的定義函數!
其實吧,如果這多重定義的函數是存在於不同的庫,一般默認都只會找第一個遇到的庫裡面的函數就好了。
但是,因為,鏈接的最小單元一般是文件,.o。如果a.o和b.o同時存在test1(),但是a.o有test2(),b.o有test3(),結果這兩個介面函數都會被系統使用,那麼a.o和b.o就會被同時鏈接進去*。這就是為何會報多重定義的錯誤。
為了讓這種情況下,鏈接器還是不報錯,還是只會找第一個遇到的庫裡面的函數。可以使用以下參數:
-Wl,-z,multidefs或者Wl,'-z muldefs',以及--allow-multiple-definition
讓ld在遇到重復定義時候,只處理第一個定義。
9. 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;
多謝問題哈,終於搞清楚了這個問題!
10. 在vs2008軟體上,編譯下面這個,結果出現一個或多個多重定義的符號,請問什麼意思,怎麼改
我使用2008編譯運行都沒有問題。就是生成的文件名出現亂碼。我推測,你是不是在創建2010的項目時,直接選擇,從現有文件中導入。沒有將源文件放入項目目錄造成的。你可以檢查一下
