在Winsock.h中获取未声明的标识符错误

时间:2013-06-19 06:45:30

标签: c++ visual-studio-2008 networking winsock winsock2

我正在尝试编译代码

#include <Header1.h>
#include "Header2..h" 
#include <ctype.h>  

Header1.h包括winsock.h _

和Header2.h包含windows.h

我使用winsock.h而不是winsock2.h,因为winsock2.h显示重定义错误,这是一个标准错误,但我无法使用提供给他们的解决方案来解决这个问题。

我也试过包含ws2tcpip.h,但它在winsock.h中给出了大量的重定义错误

我在这个模块中遇到了12个错误

error C3861: 'close': identifier not found       
 error C2664: 'setsockopt' : cannot convert parameter 4 from 'timeval *' to 'const char *'    
 error C2065: 'socklen_t' : undeclared identifier        
 error C2146: syntax error : missing ';' before identifier 'optionLength'        
 error C2065: 'optionLength' : undeclared identifier         
 error C2065: 'optionLength' : undeclared identifier      
 error C2664: 'setsockopt' : cannot convert parameter 4 from 'int32 *' to 'const char *'      
 error C2065: 'MSG_WAITALL' : undeclared identifier      
 error C2664: 'recvfrom' : cannot convert parameter 2 from 'uint8 *' to 'char *'     
 error C2065: 'ERROR_END_OF_STREAM' : undeclared identifier 
 error C3861: 'close': identifier not found   
 error C3861: 'close': identifier not found   

3 个答案:

答案 0 :(得分:3)

在包含的顶部添加#include <winsock2.h>#include <ws2tcpip.h>

#include <winsock2.h> 
#include <Header1.h>
#include "Header2.h"
#include <ctype.h>  

应首先包含winsock.h。我注意到你的代码似乎是unixish代码。在Windows上,closesocket用于关闭套接字。

答案 1 :(得分:1)

此外,#define Win32_LEAN_AND_MEAN先于其他任何内容。这通常会有所帮助。

答案 2 :(得分:0)

此外,在某些情况下也有帮助(带有ws2tcpip标识符错误的问题):

#pragma once

#define _WIN32_WINNT 0x500

#include <winsock2.h>
#include <WS2tcpip.h>
#pragma comment(lib, "WS2_32.Lib")