1、error LNK2005:
在头文件“a.h”中定义了结构体类型和函数定义,生成工程的时候,出现LNK2005错误。
经过排查是a.h头文件在多个头文件中引入造成的。因为这样会使头文件a中定义的函数进行多次重复定义;解决方法是把在头文件a中定义的函数定义在a.cpp文件。
若在a.h头文件中定义变量int a,也会导致变量a重复定义。
注:LNK2005的错误也可参考https://blog.csdn.net/u012145971/article/details/50268129
2、error C4430
该错误可能由以下问题之一导致:
(1)没有包含头文件。
(2)缺少宏定义,导致项目不能根据宏定义确定使用哪一个头文件。
(3)函数声明有返回值,函数未写返回值。
(4)头文件包含顺序错误。
(5)头文件互相包含。
该错误参考于https://blog.csdn.net/skdkjzz/article/details/17072277
3、error C2011
该问题以error C2011: “sockaddr_in”:“struct”类型重定义为例:
该问题是由于windows.h和winsock2.h存在有类型重定义,方法以下2种方法之一,推荐第二种:
(1)#include<windows.h>之前 #include <winsock2.h>
(2)在C/C++预处理中添加WIN32_LEAN_AND_MEAN
遇到问题介绍:
1、遇到C4430,填写命令宏HAVE_WINSOCK_H,让项目选择winsock.h头文件;但将别人模块代码引入自己的项目中时,出现了C2011错误。
原因是再解决C4430问题时,选择的winsock.h头文件,但别人模块代码中选择的是winsock2.h,最后将解决C4430的宏换成HAVA_WINSOCK2_H,让项目选择winsock2.h,解决了该问题。
出现该问题原因包含头文件与其他模块头文件包含冲突导致。