错误C2373:' inet_addr' :重新定义;不同类型的修饰符

时间:2015-08-14 10:11:09

标签: c++ sockets visual-c++ visual-studio-2013

我正在研究为某些套接字编程编写的某人的其他代码。该项目有以下两个文件。

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 。我检查了几个可用的在线解决方案,声称这个库是重新定义的原因,但在这种情况下不是这样。

1 个答案:

答案 0 :(得分:2)

这些函数已在更新版本的Visual Studio中为您定义(请参阅:MSDN) - 您只需从项目中删除这些文件并删除所有出现的文件:

#include "sockutil.h"