關(guān)于VS2019 C++項目同時出現(xiàn)LNK2005 和LNK1169 error 的解決辦法
同時出現(xiàn)LNK2005 和LNK1169 error 的解決辦法 項目場景:Visual Studio C++項目問題描述原因分析cpp引用cpp導(dǎo)致報錯 解決方案方案1:如果是簡單的項目,可以先移除被引用的cpp文件,在解決方案管理器中新建頭文件,將被移除的cpp文件內(nèi)容拷貝進(jìn)來,效果如下。方案2:正規(guī)措施是:給被引用的cpp文件創(chuàng)建單獨(dú)的頭文件,再將此頭文件引入到需要的文件中,效果如下: 問題總結(jié)
項目場景:Visual Studio C++項目
Visual Studio 的C++ 項目中,在main.cpp中引入LinkStack.cpp時會出現(xiàn)以下報錯:
問題描述
嚴(yán)重性 代碼 說明 項目 文件 行 禁止顯示狀態(tài)
錯誤 LNK1169 找到一個或多個多重定義的符號 queue2 F:\Cplusplus\queue2\Debug\queue2.exe 1
警告 C6011 取消對 NULL 指針“p”的引用。 queue2 F:\Cplusplus\queue2\LinkStack.cpp 33
錯誤 LNK2005 “void __cdecl DestroyStack(struct node * &)” (?DestroyStack@@YAXAAPAUnode@@@Z) 已經(jīng)在 LinkStack.obj 中定義 queue2 F:\Cplusplus\queue2\main.obj 1
錯誤 LNK2005 “int __cdecl GetTop(struct node *,char &)” (?GetTop@@YAHPAUnode@@AAD@Z) 已經(jīng)在 LinkStack.obj 中定義 queue2 F:\Cplusplus\queue2\main.obj 1
錯誤 LNK2005 “void __cdecl InitStack(struct node * &)” (?InitStack@@YAXAAPAUnode@@@Z) 已經(jīng)在 LinkStack.obj 中定義 queue2 F:\Cplusplus\queue2\main.obj 1
錯誤 LNK2005 “int __cdecl Pop(struct node * &,char &)” (?Pop@@YAHAAPAUnode@@AAD@Z) 已經(jīng)在 LinkStack.obj 中定義 queue2 F:\Cplusplus\queue2\main.obj 1
錯誤 LNK2005 “int __cdecl Push(struct node * &,char)” (?Push@@YAHAAPAUnode@@D@Z) 已經(jīng)在 LinkStack.obj 中定義 queue2 F:\Cplusplus\queue2\main.obj 1
錯誤 LNK2005 “int __cdecl StackEmpty(struct node *)” (?StackEmpty@@YAHPAUnode@@@Z) 已經(jīng)在 LinkStack.obj 中定義 queue2 F:\Cplusplus\queue2\main.obj 1
原因分析
cpp引用cpp導(dǎo)致報錯
在這個Visual Studio項目中,main.cpp通過#include <LinkStack.cpp>直接引用另一個cpp文件,導(dǎo)致出現(xiàn)上述報錯。但是在Visual Studio中不能夠在一個cpp文件中引用另一個cpp文件,因為在Visual Studio中的每個cpp源文件在沒有被main.cpp引用時也都會被編譯為obj文件,所以在被直接#include引入cpp文件時會被報出已定義的錯誤。
解決方案
方案1:如果是簡單的項目,可以先移除被引用的cpp文件,在解決方案管理器中新建頭文件,將被移除的cpp文件內(nèi)容拷貝進(jìn)來,效果如下。
方案2:正規(guī)措施是:給被引用的cpp文件創(chuàng)建單獨(dú)的頭文件,再將此頭文件引入到需要的文件中,效果如下:
問題總結(jié)
Visual Studio中因為每個源文件都必定會被編譯一遍,因此不能在一個源文件中直接引用另一個源文件,只能以頭文件的形式進(jìn)行引用。
到此這篇關(guān)于關(guān)于VS2019 C++項目同時出現(xiàn)LNK2005 和LNK1169 error 的解決辦法的文章就介紹到這了,更多相關(guān)VS2019 C++項目內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
- c++?error:crosses?initialization?of問題解決分析
- 解決c++?error:crosses?initialization?of?問題
- 詳解C/C++ Linux出錯處理函數(shù)(strerror與perror)的使用
- 解決啟動MongoDB錯誤:error while loading shared libraries: libstdc++.so.6:cannot open shared object file:
- 解決VC++編譯報錯error C2248的方案
- c++ mk文件出錯Jni調(diào)用產(chǎn)生java.lang.UnsatisfiedLinkError錯誤解決方法
- c/c++?Error:?redefinition?of?'xxx'的問題及解決方法
相關(guān)文章
VS2022實現(xiàn)VC++打包生成安裝文件圖文詳細(xì)歷程
本文主要介紹了VS2022實現(xiàn)VC++打包生成安裝文件圖文詳細(xì)歷程,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下2022-02-02詳解c++ atomic原子編程中的Memory Order
在多核編程中,我們使用內(nèi)核對象【如:事件對象(Event)、互斥量對象(Mutex,或互斥體對象)、信號量對象(Semaphore)等】來避免多個線程修改同一個數(shù)據(jù)時產(chǎn)生的競爭條件。本文將詳細(xì)介紹c++ atomic原子編程中的Memory Order。2021-06-06C語言使用scanf連續(xù)輸入字符串出現(xiàn)的問題
這篇文章主要介紹了C語言使用scanf連續(xù)輸入字符串出現(xiàn)的問題,本文給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下2020-12-12c實現(xiàn)linux下的數(shù)據(jù)庫備份
本文給大家簡單介紹下c實現(xiàn)linux下的數(shù)據(jù)庫備份的方法和具體的源碼,十分的實用,有需要的小伙伴可以參考下。2015-07-07C++中AVL樹的底層以及實現(xiàn)方法總結(jié)
這篇文章主要介紹了C++中AVL樹的底層以及實現(xiàn)方法的相關(guān)資料,AVL樹是一種自平衡的二叉搜索樹,每個節(jié)點(diǎn)的左右子樹高度差不超過1,通過旋轉(zhuǎn)操作保持平衡,詳解了AVL樹的結(jié)構(gòu)、插入、旋轉(zhuǎn)、查找和遍歷方法,展示了其保持平衡的機(jī)制及對應(yīng)代碼實現(xiàn),需要的朋友可以參考下2024-10-10