1. 程式人生 > >error:LNK2005 _main 已經在 *.obj 中定義

error:LNK2005 _main 已經在 *.obj 中定義

這裡寫圖片描述

出現這個錯誤有如下幾種情況

  1. 重複定義全域性變數。可能存在兩種情況

    A:這種情況一般存在於建立的工程之中,我用的是vs2015.全域性變數是針對整個工程的。正確的應該是在一個CPP檔案中定義如下:int g;那麼在使用的CPP檔案中就應該使用:extern int g
    (1)宣告必須使用extern關鍵字;
    (2)不能給變數賦初值

    2.標頭檔案的包含重複。

    此時應該在標頭檔案中設定 相關的巨集 等防止重複連結的措施。

    #ifndef MY_H_FILE //如果沒有定義這個巨集
    #define MY_H_FILE //定義這個巨集
    ……. //標頭檔案主體內容
    …….
    ) #endif

或者新增預編譯

#pragma once

3.使用第三方的庫造成庫衝突

C執行期函式庫和MFC的庫衝突。具將那個提示出錯的庫放到另外一個庫的前面就行了

還有一種方法就是把檔案字尾名改成*.c 這樣在編譯的時候就會自動忽略,但是easy X不支援C的,只能支援C++.
這裡寫圖片描述

綜上,你應該把要申明的變數放在一個1.h中,然後在其中寫如下程式碼

#pragma once 
int i=0;

然後新建的.cpp檔案中包含#include<1.h>

至此大部分都可以解決,大家還可以參考如下幾位博主的見解,感謝幾位博主

風華正茂

相關推薦

1>test.obj : error LNK2005: _main 已經在 main.obj 定義【c的學習之路】

下決心要在空餘時間學習C語言,從今天開始。 遇到的一個小問題,查詢資料結果如下。 造成LNK2005錯誤主要有以下幾種情況: 1.重複定義全域性變數。可能存在兩種情況: A、對於一些初學程式設計的程式設計師,有時候會以為需要使用全域性變數的地方就可

error:LNK2005 _main 已經在 *.obj 定義

出現這個錯誤有如下幾種情況 重複定義全域性變數。可能存在兩種情況 A:這種情況一般存在於建立的工程之中,我用的是vs2015.全域性變數是針對整個工程的。正確的應該是在一個CPP檔案中定義如下:int g;那麼在使用的CPP檔案中就應該使用:ext

C++報錯:error LNK2005: _main 已經在 1.obj 定義

C++初學者可能會遇到這樣的報錯:error LNK2005: _main 已經在 1.obj 中定義。 這個報錯的意思是說你的當前工程裡定義了兩個main()主函式,在C++裡是不允許出現兩個入口的,即不能出現兩個main()主函式。 解決方法: 方法1:去掉一個主函

2&gt;MSVCRTD.lib(MSVCR100D.dll) : error LNK2005: _calloc 已經在 LIBCMTD.lib(dbgcalloc.obj) 定義

ont cal 鏈接器 使用 size lib rac amp svc 使用VS2010,在FireBreath裏面調用ortp庫和Speex庫。編譯的時候出現錯誤: 2>MSVCRTD.lib(MSVCR100D.dl

[Visual Studio C++] [MFC 除錯錯誤]:error LNK2005: "class std::...已經在 Multimediatimer.obj 定義

1.編譯問題描述: error LNK2005: "class std::basic_ofstream<char,struct std::char_traits<char> > Sim_Data_Write" ([email protected]@[email&

error LNK2005:已經在 XXX.obj 定義/fatal error LNK1120: 1 個無法解析的外部命令

>main.obj : error LNK2005: "void __cdecl Creat_graph(struct graph *)" ([email protected]@[em

error:LNK2005 已經在*.obj定義

實習專案中涉及到靜態庫的編寫,在用例項除錯靜態庫的時候,遇到LNK2005重複定義錯誤:已經在“*.obj”中定義。 上網搜了一下,總結有如下幾種情況: 1、重複定義全域性變數 全域性變數是針對整個工程的,在一個CPP檔案的定義:int nCount;那麼在使用的CPP檔案

關於VS2008編譯錯誤"error LNK2005: 已經在 .obj 定義"

無意中遇到了這樣的編譯問題, 於是google,發現在.h檔案裡定義變數,發生這問題的概率是灰常大的. 下面這段紅字是參考網上的說法: 當你第一個使用這個頭的.cpp檔案生成.obj的時候,int i 在裡面定義了當另外一個使用這個的.cpp再次[單獨]生成.obj的時候,int i 又被定義然後兩個o

LNK2005:htons已經在Win32_Interop.lib(Win32_FDAPI.obj)定義

今天編譯一個專案,在兩個標頭檔案中都呼叫了 winsock2.h,然後出現如題錯誤, 經過半天查詢及網上資料搜尋,最終通過https://stackoverflow.com/questions/137

VS 編譯出現 LNK2005 XXX 已經在 XXX.obj 定義

    造成該問題的可能性比較多,本人將在今後遇到時新增進來,今天先放出本人遇到的一種情況。     多重包含含有變數定義的.h檔案所造成     這個現象很容易重新,首先新建一個1.h檔案,然後在裡

【VS開發】VS編譯時提示"已經在 LIBCMT.lib(new.obj) 定義uafxcw.lib"解決辦法

  錯誤  1  error LNK2005: "void * __cdecl operator new(unsigned int)" ( [email protected]@Z )

error LNK2005 --類的宣告和定義放在一個檔案

刷C++primer的時候,將類的宣告和定義均放在標頭檔案中,報錯error LNK2005 1> Sales_data.h 1>Sales_data.obj : error LNK2005: "public: class Sales_data & __this

C++已經在 test.obj 定義”的錯誤

在使用模板過程中,容易發生這樣的錯誤。 錯誤原因如下: 1.模板類的申明和實現要在一個檔案裡面。當我們所有實現都是用模板時,我們會知道應該放在一個檔案裡面,不會範錯誤。但如果有的用了模板,而有的沒用模板的時候,這個時候就容易出現問題了。如果把申明放在.h,實現在

已經在 LIBCMTD.lib(dbgdel.obj) 定義 解決

解決方法:編譯工具:VS2008專案--〉屬性--〉配置屬性--〉連結器--〉輸入--〉附加依賴項--〉Nafxcwd.lib;Libcmtd.lib專案--〉屬性--〉配置屬性--〉連結器--〉輸入

mfcs100ud.lib(dllmodul.obj) : error LNK2005: [email

今天用VC2010寫一個用了MFC的規則DLL,編譯時報告如題錯誤。 必應後發現這篇文章  error LNK2005: [email protected] 已經在 MSVCRTD.lib(dllmain.obj) 中定義   http://wangl

連結錯誤nafxcwd.lib(afxmem.obj) : error LNK2005: "void __cdecl operator delete(void *)" (??

最近在VC 6.0上作業,有幾個地方都遇到一個十分惱人的錯誤。就是出現下述的錯誤: Linking... nafxcwd.lib(afxmem.obj) : error LNK2005: "void * __cdecl operator new(unsigned int)" ([email

nafxcwd.lib(dllmodul.obj) : error LNK2005: [email&#

朋友編寫一個dll,編譯時總出現"nafxcwd.lib(dllmodul.obj) : error LNK2005: [email protected]..."錯誤!後發現是,其建立dll時選擇的時不使用MFC,而後來工程中又添加了與MFC相關的東西.才引起上述問題.採用如

codeblock無法編譯,提示函式沒有定義,但是函式已經 在標頭檔案定義

你在新增檔案時沒有選中Targets。預設情況下,一個工程會有兩個Targets,一個叫Debug,一個叫Release,前者可以除錯,用於開發。後者不能除錯,用於生成最終釋出的軟體。CodeBloc

LIBCMT.lib(crt0dat.obj) : error LNK2005 錯誤的解決方法

最近為了解決跨lib之間vector產生的問題,將link的Code Generation的Use run-time library 修改為MultiThreaded Dll,結果導致了系列錯誤。 LIBCMT.lib(crt0dat.obj) : error LNK2005: _exit alread

libcmtd.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCRTD.dll) 編譯錯誤解決方法

[問題描述] 今天在VC6下編譯G279軟體時,已編譯通過,連結時報一下錯誤: Linking...libcmtd.lib(crt0dat.obj) : error LNK2005: _exit already defined in msvcrtd.lib(MSVCRTD.d