盘点c/c++中照成未定义或多重定义的原因

注:

1.顺序按照由易到难

2.使用的ide为VS

3.都是实际开发中遇到的问题以及解决方法,仅供参考

4.欢迎补充

未定义报错

1. 仅仅进行了声明,未进行定义
2.已定义,检查实现文件,可能是实现文件中的头文件包含错误,导致编译器为成功链接
3.检查项目文件.vcxproj,

        所有的头文件需要使用ClInclude

        <ClInclude Include="deps\hiredis\adapters\ae.h" />

        所有的实现文件需要使用ClCompile

        <ClCompile Include="src\tio.cpp" />

        vcxproj文件是自动生成和更新的,为了避免3造成的错误,请不要随意的将.cpp更成.h,反之同样成立。

        如果已经修改,有两种方式可以修改vcxproj文件:1.直接在文件资源管理器中找到vcxproj文件使用记事本进行修改(不推荐,容易改错)2.利用自动更新的特性,在ide中排除项目文件,然后再将其包含进来,vcxproj文件会自动更新。

多重定义报错

1. 同一个函数多次在同一个文件或是不同的文件中定义
2.文件间循环依赖

        在这种情况下 预编译指令#ifndef... 同样不起作用,唯一的方式就是解耦,或者使用前向声明注意使用前向声明时,如果涉及到对类或结构体的具体操作同样会报错(类型不完整), 这时唯一的方式就是解耦。

3.同一个文件被包含多次

        在文件头使用#pragma once 和预编译指令 #ifndef #endif 

4.文件重名

        同一个文件夹下的文件重名是致命的

        不同文件夹下的文件重名也是致命的,即使在指定文件路径的情况下,编译器仍有可能会报错

5.函数直接定义在头文件中,定义和声明应分离
6.在函数声明处加上inline关键字,然后重新编译
7.在文件资源管理器中删除于项目文件并列的.vs文件夹,然后重新编译
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值