本文主要介绍VS2019 C项目中同时出现LNK2005和LNK1169错误的解决方案。这篇文章很详细,对大家的学习有一定的参考价值。有需要的朋友可以参考一下。
同时出现LNK2005和LNK1169错误的解决方案。项目场景:Visual Studio C项目问题描述原因分析cpp引用cpp,导致错误。解决方案1:如果是简单的项目,可以先移除引用的cpp文件,在解决方案管理器中创建新的头文件,复制移除的cpp文件的内容。效果如下。方案二:正式的措施是为引用的cpp文件创建一个单独的头文件,然后将这个头文件引入到需要的文件中。效果如下:问题总结
项目场景:Visual Studio C++项目
在Visual Studio的c项目中,将LinkStack.cpp引入main.cpp时,会出现以下错误:
问题描述
严重性代码表示禁止显示项目文件行。
错误LNK1169找到一个或多个多重定义符号queue 2f:\ cplusplus \ queue 2 \ debug \ queue 2 . exe 1。
警告C6011空指针“p”的取消引用。queue 2 F:\ Cplusplus \ queue 2 \ link stack . CPP 33
错误lnk 2005 " void _ _ cdecl destroy stack(struct node *)"(?Destroystack @ @ yaxaapaunode @ @ z)已经在LinkStack.obj中定义了queue 2f:\ cplusplus \ queue 2 \ main . obj 1
错误lnk 2005 " int _ _ cdeclgettop(struct node *,char)"(?GetTop@@YAHPAUnode@@AAD@Z)已经在LinkStack.obj中定义了queue 2f:\ cplusplus \ queue 2 \ main . obj 1
错误lnk 2005 " void _ _ cdecl init stack(struct node *)"(?Stack @ @ yaxaapaunode @ @ z)已经在LinkStack.obj中定义了queue 2f:\ cplusplus \ queue 2 \ main . obj 1
错误lnk 2005 " int _ _ cdeclpop(struct node *,char)"(?Pop @ Pop @ @ YAHAAPAUnode @ @ AAD @ Z AAD @ Z)queue 2f:\ cplusplus \ queue 2 \ main . obj已经在LinkStack.obj中定义
错误lnk 2005 " int _ _ cdecl push(struct node *,char)"(?push @ @ yahapaunode @ @ d @ z)queue 2f:\ cplusplus \ queue 2 \ main . obj 1已在LinkStack.obj中定义
错误lnk 2005 " int _ _ cdecl stack empty(struct node *)"(?Stack empty @ @ yahpaunode @ @ z)已经在LinkStack.obj中定义了queue 2f:\ cplusplus \ queue 2 \ main . obj 1
原因分析
cpp引用cpp导致报错
在这个Visual Studio项目中,main.cpp通过#include LinkStack.cpp直接引用了另一个cpp文件,导致了上面的错误。但是在Visual Studio中是不可能引用另一个cpp文件的,因为Visual Studio中的每一个cpp源文件在没有被main.cpp引用的时候也会被编译成obj文件,所以在直接# included到cpp文件中的时候会报错。
解决方案
方案1:如果是简单的项目,可以先移除被引用的cpp文件,在解决方案管理器中新建头文件,将被移除的cpp文件内容拷贝进来,效果如下。
方案2:正规措施是:给被引用的cpp文件创建单独的头文件,再将此头文件引入到需要的文件中,效果如下:
问题总结
在Visual Studio中,因为每个源文件都必须编译一次,所以不能在一个源文件中直接引用另一个源文件,只能以头文件的形式引用。
关于VS2019 C项目中同时出现LNK2005和LNK1169错误的解决方案,本文到此为止。有关VS2019 C项目的更多信息,请搜索我们之前的文章或继续浏览下面的相关文章。希望大家以后能多多支持我们!
郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。