#include "Winsock2.h"问题

zdrone 2009-06-08 05:22:34
vs08 sp1
新建一个console程序
在程序文件srv.h中如果
#include "Winsock2.h"
#include "windows.h"
包含的话没有问题
#include "windows.h"
#include "Winsock2.h"
出错
错误信息:
>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(91) : warning C4005: “AF_IPX”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(460) : 参见“AF_IPX”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(127) : warning C4005: “AF_MAX”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(479) : 参见“AF_MAX”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(163) : warning C4005: “SO_DONTLINGER”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(402) : 参见“SO_DONTLINGER”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(206) : error C2011: “sockaddr”: “struct”类型重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(485) : 参见“sockaddr”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 语法错误 : 缺少“}”(在“常量”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2143: 语法错误 : 缺少“;”(在“常量”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(384) : error C2059: 语法错误 : “常量”
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(437) : error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(518) : warning C4005: “IN_CLASSA”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(287) : 参见“IN_CLASSA”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(524) : warning C4005: “IN_CLASSB”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(293) : 参见“IN_CLASSB”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(530) : warning C4005: “IN_CLASSC”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(299) : 参见“IN_CLASSC”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(541) : warning C4005: “INADDR_ANY”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(304) : 参见“INADDR_ANY”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(543) : warning C4005: “INADDR_BROADCAST”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(306) : 参见“INADDR_BROADCAST”的前一个定义
1>c:\program files\microsoft sdks\windows\v6.0a\include\ws2def.h(577) : error C2011: “sockaddr_in”: “struct”类型重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(312) : 参见“sockaddr_in”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(132) : error C2011: “fd_set”: “struct”类型重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(68) : 参见“fd_set”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(167) : warning C4005: “FD_SET”: 宏重定义
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(102) : 参见“FD_SET”的前一个定义
...(太多了 不贴了)
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(874) : 参见“WSASetLastError”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2197) : error C2375: “WSAGetLastError”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(876) : 参见“WSAGetLastError”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2214) : error C2375: “WSAIsBlocking”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(878) : 参见“WSAIsBlocking”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2231) : error C2375: “WSAUnhookBlockingHook”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(880) : 参见“WSAUnhookBlockingHook”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2248) : error C2375: “WSASetBlockingHook”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(882) : 参见“WSASetBlockingHook”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2265) : error C2375: “WSACancelBlockingCall”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(884) : 参见“WSACancelBlockingCall”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2287) : error C2375: “WSAAsyncGetServByName”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(886) : 参见“WSAAsyncGetServByName”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2314) : error C2375: “WSAAsyncGetServByPort”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(894) : 参见“WSAAsyncGetServByPort”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2340) : error C2375: “WSAAsyncGetProtoByName”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(902) : 参见“WSAAsyncGetProtoByName”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2365) : error C2375: “WSAAsyncGetProtoByNumber”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(909) : 参见“WSAAsyncGetProtoByNumber”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2390) : error C2375: “WSAAsyncGetHostByName”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(916) : 参见“WSAAsyncGetHostByName”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2417) : error C2375: “WSAAsyncGetHostByAddr”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(923) : 参见“WSAAsyncGetHostByAddr”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2440) : error C2375: “WSACancelAsyncRequest”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(932) : 参见“WSACancelAsyncRequest”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(2461) : error C2375: “WSAAsyncSelect”: 重定义;不同的链接
1> c:\program files\microsoft sdks\windows\v6.0a\include\winsock.h(934) : 参见“WSAAsyncSelect”的声明
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(3910) : error C2059: 语法错误 : “}”
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(3910) : error C2143: 语法错误 : 缺少“;”(在“}”的前面)
1>c:\program files\microsoft sdks\windows\v6.0a\include\winsock2.h(3910) : error C2059: 语法错误 : “}”
1>e:\zd\work\filebank\sourcecode\svn\tortoisesvn\src\fkserver\srvrecieve.h(24) : error C2079: “SrvRecieve::m_addrlocal”使用未定义的 struct“sockaddr_in”
1>e:\zd\work\filebank\sourcecode\svn\tortoisesvn\src\fkserver\srvrecieve.h(24) : error C2079: “SrvRecieve::m_addrrecv”使用未定义的 struct“sockaddr_in”
1>stdafx.cpp

而且先包包含“stdafx.h"再#include "winsock2.h" 也出错。


stdafx.h是这样写的
// stdafx.h : 标准系统包含文件的包含文件,
// 或是经常使用但不常更改的
// 特定于项目的包含文件
//

#pragma once

#include "targetver.h"

#include <stdio.h>
#include <tchar.h>



// TODO: 在此处引用程序需要的其他头文件
#import "msado15.dll" no_namespace rename("EOF","adoEOF")
//#import "msxml2.dll" //no_namespace

这咋回事?


...全文
4815 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
穿花裤衩的人 2012-02-21
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 sun007700 的回复:]

#program comment(lib,"Ws2.lib")
[/Quote]

这个是错的,应该是:
#pragma comment(lib,"ws2_32.lib")
还有就是上面的错误和这个没有什么关系...
technology_me 2010-10-24
  • 打赏
  • 举报
回复
学习了
长老QY 2009-06-10
  • 打赏
  • 举报
回复
至于stdafx.h#include <stdio.h> 和#include <tchar.h>时包含了windows.h
metaboy 2009-06-10
  • 打赏
  • 举报
回复
学习了!
长老QY 2009-06-10
  • 打赏
  • 举报
回复
winsock2.h的内容,在文件开头有如下宏定义:

#ifndef _WINSOCK2API_
#define _WINSOCK2API_
#define _WINSOCKAPI_
……
_WINSOCK2API_的定义是防止头文件重复包含winsock2.h。_WINSOCKAPI_的定义则是为了防止对winsock.h的包含,即是说,如果用户先包含了winsock2.h就不允许再包含winsock.h了,因为winsock.h的头部同样存在如下的保护措施:

#ifndef _WINSOCKAPI_
#define _WINSOCKAPI_
……
长老QY 2009-06-10
  • 打赏
  • 举报
回复
默认windows.h文件会包含winsock.h,当你包含winsock2.h就会冲突。要解决这个问题,需要首先包含winsock2.h,然后再包括windows.h,要注意包含的顺序。
sun007700 2009-06-10
  • 打赏
  • 举报
回复
#program comment(lib,"Ws2.lib")
tyro668 2009-06-08
  • 打赏
  • 举报
回复 1
学习
ykwfly 2009-06-08
  • 打赏
  • 举报
回复
重定义!!要在头文件中更改包含的头文件
na_he 2009-06-08
  • 打赏
  • 举报
回复
默认编译器会从Windows.h中开始查找,所以一般把特定的头文件写在前面了,比如SDK里面头文件和lib的次序了。
xiao0915 2009-06-08
  • 打赏
  • 举报
回复
按照没冲突的写法写到stdafx.h
两个文件里有相同的 变量或常量
产生的 重定义
oyljerry 2009-06-08
  • 打赏
  • 举报
回复
两个头文件重复包含定义了一些...
调整一下顺序
  • 打赏
  • 举报
回复
这两个文件有冲突。
按照没冲突的写法写到stdafx.h

18,356

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC 网络编程
c++c语言开发语言 技术论坛(原bbs)
社区管理员
  • 网络编程
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧