包含头文件的问题

时间:2021-03-17 16:45:17
MFC对话框程序
我在stdAfx.h文件中 加入#include <winsock2.h>
                       #include <afxsock.h>
这两个头文件
编译后说
LNK2005: "int m_Port" (?m_Port@@3HA) already defined in AA.obj
AA.exe : fatal error LNK1169: one or more multiply defined symbols found
实在是弄不好了 烦劳大哥指点下

我刚开始把 #include <afxsock.h>
注释了 提示我error C2065: 'AfxSocketInit' : undeclared identifier

9 个解决方案

#1


不要放到stdAfx.h里,会被重复包含。你哪个cpp文件需要用到socket,就把这两个头文件放进哪个.cpp里。
而且,建立工程时,如果选择socket支持, #include <afxsock.h> 是自动包含的。

#2


难道你mfc的socket和winsock都用?
去掉一种吧

#3


估计你MFC只用了AfxSocketInit吧?
那样就改一种初始化socket的办法
WSADATA wsaData;        
    WORD version = MAKEWORD(2, 0);        
    WSAStartup(version, &wsaData);

#4


大家的说法是正确的,选择SDK或者MFCsocket一种即可。一版包含的头文件不要放在stdafx里面了。

#5


LS各位大哥
我刚开始用工程向导创建对话框程序时,选择socket支持了
但程序里要用到WSASocket等函数 又添加了 winsock2.h头文件

但如果默认stdAfx.h的话(里面有afxsock.h)
并且在CMYDLg中定义winsock2.h 会出现很多错误 117个错误 估计是两个版本冲突
该怎么解决啊?

难道winsock2.h和afxsock.h不能在一起用吗?

#6


用winsock2.h, 应该还要包含静态库. #pragma comment(lib,"Ws2_32.lib")

#7


ding

#8


stdAfx.h是预编译头,一般是系统默认的。。最好不要动这个文件。

#9


结贴给分 
没解决
难道 WINSOCK2.H和afxsock.h真的不能共用吗
只能把AfxSocketInit给删了,直接用WSASTAUP初始化了

#1


不要放到stdAfx.h里,会被重复包含。你哪个cpp文件需要用到socket,就把这两个头文件放进哪个.cpp里。
而且,建立工程时,如果选择socket支持, #include <afxsock.h> 是自动包含的。

#2


难道你mfc的socket和winsock都用?
去掉一种吧

#3


估计你MFC只用了AfxSocketInit吧?
那样就改一种初始化socket的办法
WSADATA wsaData;        
    WORD version = MAKEWORD(2, 0);        
    WSAStartup(version, &wsaData);

#4


大家的说法是正确的,选择SDK或者MFCsocket一种即可。一版包含的头文件不要放在stdafx里面了。

#5


LS各位大哥
我刚开始用工程向导创建对话框程序时,选择socket支持了
但程序里要用到WSASocket等函数 又添加了 winsock2.h头文件

但如果默认stdAfx.h的话(里面有afxsock.h)
并且在CMYDLg中定义winsock2.h 会出现很多错误 117个错误 估计是两个版本冲突
该怎么解决啊?

难道winsock2.h和afxsock.h不能在一起用吗?

#6


用winsock2.h, 应该还要包含静态库. #pragma comment(lib,"Ws2_32.lib")

#7


ding

#8


stdAfx.h是预编译头,一般是系统默认的。。最好不要动这个文件。

#9


结贴给分 
没解决
难道 WINSOCK2.H和afxsock.h真的不能共用吗
只能把AfxSocketInit给删了,直接用WSASTAUP初始化了