关于VS2019 C++项目同时出现LNK2005 和LNK1169 error 的解决办法

同时出现LNK2005 和LNK1169 error 的解决办法 项目场景:Visual Studio C++项目问题描述原因分析cpp引用cpp导致报错 解决方案方案1:如果是简单的项目,可以先移除被引用的cpp文件,在解决方案管理器中新建头文件,将被移除的cpp文件内容拷贝进来,效果如下。方案2:正规措施是:给被引用的cpp文件创建单独的头文件,再将此头文件引入到需要的文件中,效果如下: 问题总结

项目场景:Visual Studio C++项目

Visual Studio 的C++ 项目中,在main.cpp中引入LinkStack.cpp时会出现以下报错:

问题描述

严重性 代码 说明 项目 文件 行 禁止显示状态
错误 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) 已经在 LinkStack.obj 中定义 queue2 F:\Cplusplus\queue2\main.obj 1
错误 LNK2005 “int __cdecl GetTop(struct node *,char &)” (?GetTop@@YAHPAUnode@@AAD@Z) 已经在 LinkStack.obj 中定义 queue2 F:\Cplusplus\queue2\main.obj 1
错误 LNK2005 “void __cdecl InitStack(struct node * &)” (?InitStack@@YAXAAPAUnode@@@Z) 已经在 LinkStack.obj 中定义 queue2 F:\Cplusplus\queue2\main.obj 1
错误 LNK2005 “int __cdecl Pop(struct node * &,char &)” (?Pop@@YAHAAPAUnode@@AAD@Z) 已经在 LinkStack.obj 中定义 queue2 F:\Cplusplus\queue2\main.obj 1
错误 LNK2005 “int __cdecl Push(struct node * &,char)” (?Push@@YAHAAPAUnode@@D@Z) 已经在 LinkStack.obj 中定义 queue2 F:\Cplusplus\queue2\main.obj 1
错误 LNK2005 “int __cdecl StackEmpty(struct node *)” (?StackEmpty@@YAHPAUnode@@@Z) 已经在 LinkStack.obj 中定义 queue2 F:\Cplusplus\queue2\main.obj 1

原因分析

cpp引用cpp导致报错

在这个Visual Studio项目中,main.cpp通过#include <LinkStack.cpp>直接引用另一个cpp文件,导致出现上述报错。但是在Visual Studio中不能够在一个cpp文件中引用另一个cpp文件,因为在Visual Studio中的每个cpp源文件在没有被main.cpp引用时也都会被编译为obj文件,所以在被直接#include引入cpp文件时会被报出已定义的错误。

解决方案

方案1:如果是简单的项目,可以先移除被引用的cpp文件,在解决方案管理器中新建头文件,将被移除的cpp文件内容拷贝进来,效果如下。

方案2:正规措施是:给被引用的cpp文件创建单独的头文件,再将此头文件引入到需要的文件中,效果如下:

问题总结

Visual Studio中因为每个源文件都必定会被编译一遍,因此不能在一个源文件中直接引用另一个源文件,只能以头文件的形式进行引用。

到此这篇关于关于VS2019 C++项目同时出现LNK2005 和LNK1169 error 的解决办法的文章就介绍到这了,更多相关VS2019 C++项目内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

(0)

相关推荐

  • vs2019 实现C#调用c++的dll两种方法

    1.托管与非托管的区别 链接地址(仅供参考) 除了链接中的,在实用角度出发: 非托管需要一个个声明引用,就很繁琐 但是托管(虽然麻烦)不用声明,只需要调好配置即可,还是比较方便的 为什么写这个博客,也是因为不同版本vs2017和vs2019有所区别,托管就容易踩坑,希望大家能看看,解决问题(我也很菜,大佬轻喷) 2.非托管类的实现 第一步:创建C++空项目(命名Caculate)添加一个类AddOperate .h代码部分: #pragma once extern "C" _decls

  • VS2019中CMake项目如何指定c++语言标准

    VS2019中CMake项目怎么指定语言标准 博主前几天在使用c++17新特性结构绑定时报错了,代码如下: #include<bits/stdc++.h> using namespace std; int main() { unordered_map<int, int> mmid; for (auto [a, b] : mmid) { cout << a << ' ' << b << endl; } return 0; } 后来查了一

  • 详解如何在VS2019和VScode中配置C++调用python接口

    why 看到这个标题有些人说了,为什么好好的C++你非要调用python?人家明明是两种语言呀! 但是在实际应用中,有时候会用到C/C++调用python来更简单地去完成一些功能,不然人家python为什么有一个文件夹叫include,里边全是.h文件呢? VScode中配置环境 首先是在VScode中为C++调用python接口配置环境,这里假设你已经配置好了c++编程环境! 1.配置step1 用快捷键Ctrl+Shift+X打开Extensions 商店,输入python,install:

  • VS2019如何创建C++项目的实现示例

    打开VS2019,选择空项目后,点击下一步(如果没有找到空项目,说明你下载的时候没勾选C++模块) 输入项目名,更改项目存放路径后,选择下一步 选择C++文件,修改程序名称,点击添加 找到"解决方案资源管理器",右键点击源文件,选择添加新建项 此时可以开始编写C++程序了 到此这篇关于VS2019如何创建C++项目的实现示例的文章就介绍到这了,更多相关VS2019创建C++项目内容请搜索我们以前的文章或继续浏览下面的相关文章希望大家以后多多支持我们!

  • VS2019开发简单的C/C++动态链接库并进行调用的实现

    小白提升:VS2019开发简单的C/C++动态链接库并在解决方案中进行调用 一. vs2019简单动态链接库的开发 1.VS2019新建立一个空项目(DLL1) VS有提供dll项目的模板,可是对于我来说反而搞不懂模板中的文档,于是建立空白项目,自己去做简单的配置. 2.解决方案管理器中为项目添加一个头文件,选择新建项 在新建的头文件(DDL.h)中声明要导出的API,我添加一个简单的加和函数: __declspec(dllexport) int ADD(int a,int b); 3.添加一个

  • 关于VS2019 C++项目同时出现LNK2005 和LNK1169 error 的解决办法

    同时出现LNK2005 和LNK1169 error 的解决办法 项目场景:Visual Studio C++项目问题描述原因分析cpp引用cpp导致报错 解决方案方案1:如果是简单的项目,可以先移除被引用的cpp文件,在解决方案管理器中新建头文件,将被移除的cpp文件内容拷贝进来,效果如下.方案2:正规措施是:给被引用的cpp文件创建单独的头文件,再将此头文件引入到需要的文件中,效果如下: 问题总结 项目场景:Visual Studio C++项目 Visual Studio 的C++ 项目中

  • VS2019属性管理器没有Microsoft.Cpp.x64.user的解决办法

    下载个VS2017 曾经在一个博主那里看到过,尝试过一次,安装vs2017之后,发现vs2019的Microsoft.Cpp.x64.user又出现了.猜测安装的vs2019没有Microsoft.Cpp.x64.user的原因是因为装在D盘的原因(纯属个人观点). 配置属性表(建议) 在视图中找到资源管理器,并打开 右键Debug|x64 点击添加新项目属性表,名称可以自定义(我填的是opencv4.props)然后点添加后关闭此页面.一定要记住opencv4.props保存的位置,后面会用到

  • VS2019无法启动程序(系统找不到指定文件)解决办法

    新人小白第一次用vs就出现了问题,如图: 主要表现为:发生生成错误.是否继续运行上次的成功生成 这时候点击"是",就开始报上图的错. 新人小白的解决办法 如果你只是写一个小程序运行一下的话 最大的原因可能是,你的源文件里面有两个不相干的.c或.cpp文件,这两个文件里都有主函数,删掉其中一个就可以了 比如说我刚开始学习,你可以换一个创建项目的方法 如图:创建Windows桌面向导,点击下一步 然后勾选空项目,点击确定 之后再在源文件右键添加–新建项–C++文件–确定 再输入我们的代码

  • VS2019 自定义项目模板的实现方法

    前言: 使用"宇宙最强IDE"开发项目时,都需要根据不同情况选择一个项目模板,来满足开发需求:如下 VS为我们提供了基础的项目模板,但现有项目模板未包含基础功能如:日志输出.审计日志.SwaggerUI.认证等,那么我们能否自定义项目模板来满足我们的需求呢?答案当然是肯定的 那么接下来开始实现自定义项目模板的创建 一.自定义项目模板创建 本次我们来创建一个实现了基础功能的webapi模板 创建自定义的项目模板,有以下几个步骤: 1.创建原始的项目(模板项目) 创建WebApi项目: 实

  • Eclipse启动Tomcat后无法访问项目解决办法

    Eclipse启动Tomcat后无法访问项目解决办法 前言: Eclipse中的Tomcat可以正常启动,不过发布项目之后,无法访问,包括http://localhost:8080/的小猫页面也无法访问到,报404错误.这是因为Eclipse所指定的Server path和Deploy path的问题. 在Eclipse配置的Tomcat Server上双击,可以看到下图: 要想解决上述问题,需要修改Server path 和 Deploy path.选择上面第二项Use Tomcat inst

  • Eclipse 项目出现错误(红色叹号)解决方法

    Eclipse 项目出现错误(红色叹号)解决方法 情况:就是项目出现红色感叹号  解决方法: 对准项目右键选择Build Path → configure build path 点击eclipse项目的configure build path后,在弹出来的窗口中,找到Libraries页签,可以看到一些jar包是红色叉号的,这种jar包就是找不到对应文件的jar包,引起这种eclipse项目前面出现红色叹号.eclipse项目前面出现红色感叹号.eclipse项目前面出现红色惊叹号.eclips

  • eclipse导入appcompat项目报错解决办法

    eclipse导入appcompat项目报错解决办法 我们在eclipse导入开源项目后,经常会发现找不到类似Theme.AppCompat.Light.DarkActionBar的style,解决办法也比较简单,就是导入com.android.support:appcompat-v7包,不过又两点需要注意: 不能只导入appcompat-v7.jar包,而是要导入appcompat-v7项目 因为这个项目包含有资源文件,只导入jar包没有效果,这个项目地址是在: -\android-sdk\e

  • vue-cli webpack模板项目搭建及打包时路径问题的解决方法

    这里建议刚学vue的同学第一个小案例不要使用vue-cli进行操作,待对基本的api使用的比较顺手了之后再进行vue-cli的体验比较好.本人是一名后端开发人员,接触前端时间不长,这里有说的不好的地方,还请大家评论建议下. 1. 安装必要的环境准备 首先我们要能够暗转node.js,这个环境.百度搜索node,进入官网根据自己的操作系统进行下载即可.现在的版本都是自带npm的了.所以安装后,环境变量正常情况下会自动配置,开启一个命令行终端,输入node,npm,就可以看到相应的信息.那么说明安装

  • Vue 项目中遇到的跨域问题及解决方法(后台php)

    问题描述 前端 vue 框架,后台 php,百度跨域问题后台加这段代码 header("Access-Control-Allow-Origin: *"); 加了之后报这个错: The value of the 'Access-Control-Allow-Origin' header in the response must not be the wildcard '*' when the request's credentials mode is 'include'. The valu

  • vue-cli项目无法用本机IP访问的解决方法

    所遇问题 启动vue-cli项目服务,用本机IP无法访问此网站,拒绝了我们的链接请求.从而无法从手机上预览效果 原因分析 在我们的bulid目录下有一个webpack.dev.config.js的配置文件,发现devServer对象里的host属性取自process.env.HOST || config.dev.host. 于是这里我们去查看config.dev.host.在我们的config目录下有一个index.js, 找到dev对象的host属性 发现该版本的vue-cli将host主机名

随机推荐