我正在研究为某些套接字编程编写的某人的其他代码。该项目有以下两个文件。
SOCKUTIL.H
#if !defined(SOCKUTIL_H)
#define SOCKUTIL_H
unsigned long inet_addr(const char *sIp);
unsigned short htons(unsigned short port);
#endif
的 sockUtil.cpp
#include "stdafx.h"
#include "sockutil.h"
#include <stdlib.h>
#include <string.h>
unsigned long inet_addr(const char *sIp)
{
int octets[4];
int i;
const char *auxCad = sIp;
unsigned long lIp = 0;
//we extract each octet of the ip address
//atoi will get characters until it found a non numeric character(in our case '.')
for(i = 0; i < 4; i++)
{
octets[i] = atoi(auxCad);
if(octets[i] < 0 || octets[i] > 255)
{
return(0);
}
lIp |= (octets[i] << (i * 8));
//update auxCad to point to the next octet
auxCad = strchr(auxCad, '.');
if(auxCad == NULL && i != 3)
{
return(0);
}
auxCad++;
}
return(lIp);
}
unsigned short htons(unsigned short port)
{
unsigned short portRet;
portRet = ((port << 8) | (port >> 8));
return(portRet);
}
这个项目最初是在VC6中开发的,当我在VS2013中打开它时,Visual Studio对它进行了转换。但是当我构建它时,它会给出以下错误。
错误C2373:&#39; inet_addr&#39; :重新定义;不同类型的修饰符
错误C2373:&#39; htons&#39; :重新定义;不同类型的修饰符
我试图找到解决方案,但没有做什么。我对此并不了解。
编辑:此代码不使用 #include Winsock2.h 。我检查了几个可用的在线解决方案,声称这个库是重新定义的原因,但在这种情况下不是这样。
答案 0 :(得分:2)
这些函数已在更新版本的Visual Studio中为您定义(请参阅:MSDN) - 您只需从项目中删除这些文件并删除所有出现的文件:
#include "sockutil.h"