C语言报类型冲重定义的错是怎么回事?

代码如下#include<stdio.h>#include<string.h>#include<stdlib.h>#include<stdint.h>#include<W... 代码如下
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <stdint.h>
#include <Windows.h>
#include <errno.h>
#include <WS2tcpip.h>
#include <WinSock2.h>
#include "Practical.h"

#pragma comment(lib,"ws2_32.lib")

SOCKET SetTcpClientSocket(const char *host,const char *service)
{
SOCKET sock=-1;
struct addrinfo addrCriteria;
struct addrinfo *serAddr,*addr;
int rtnVal;
memset(&addrCriteria,0,sizeof(addrCriteria));
addrCriteria.ai_family=AF_UNSPEC;
addrCriteria.ai_socktype=SOCK_STREAM;
addrCriteria.ai_protocol=IPPROTO_TCP;

rtnVal=getaddrinfo(host,service,&addrCriteria,&serAddr);
if (rtnVal!=0)
{
DieWithUserMessage("getaddrinfo() failed",(char *)gai_strerror(rtnVal));

}

for (addr=serAddr;addr!=NULL;addr=addr->ai_next)
{
sock=socket(addr->ai_family,addr->ai_socktype,addr->ai_protocol);
if (sock=INVALID_SOCKET)
{
continue;
}
if (connect(sock,addr->ai_addr,addr->ai_addrlen)==0);
{
break;
}
closesocket(sock);
sock=-1;
}
freeaddrinfo(serAddr);
return sock;
}
展开
 我来答
濮震轩U7
2014-07-16 · 超过21用户采纳过TA的回答
知道答主
回答量:56
采纳率:0%
帮助的人:41万
展开全部
头文件中已经包含了某个文件造成重定义,但是系统头文件不会出现问题,它本身就有防止重定义的机制,就是楼上说的#ifndef ,检查一下是不是自己定义的头文件重复包含了吧
更多追问追答
追问
没有啊,头文件里就这么点代码
#include
#include

void DieWithUserMessage(const char *msg,const char *detail)
{
fputs(msg,stderr);
fputs(": ",stderr);
fputs(detail,stderr);
fputc('\n',stderr);
exit(1);
}
追答
"Practical.h" 文件中包含什么?
这个文件是你自己定义的吗

是不是其中有什么变量定义了,在这个程序段中你又定义了一遍?
百度网友7bbac528f8
2014-07-16 · TA获得超过598个赞
知道小有建树答主
回答量:1706
采纳率:50%
帮助的人:952万
展开全部
头文件中出现了重复,看下吧,一般都用#ifndef
追问
1>d:\program files\microsoft sdks\windows\v7.0a\include\ws2def.h(212): error C2011: “sockaddr”:“struct”类型重定义

这是其中报错的一部分,是winsock.h冲突吗?我没引用它啊
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 1条折叠回答
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式