函数指针未在此范围内声明

时间:2014-03-30 16:46:50

标签: c++

我使用函数指针

MyWSARecvProc OriginalWSARecvProc = (MyWSARecvProc) WSARecv;

函数WSARecv在winsock2.h中声明:

WINSOCK_API_LINKAGE int WINAPI WSARecv(SOCKET,
    LPWSABUF, DWORD, LPDWORD, LPDWORD, LPWSAOVERLAPPED,
    LPWSAOVERLAPPED_COMPLETION_ROUTINE);

我在我的文件中包含winsock2.h,但是有错误:

  

错误:' WSARecv'未在此范围内声明

为什么会这样?怎么解决? 感谢。

编辑

我在windows.h之前包含winsock2.h,因为Adrian Ratnapala写道。现在我还有其他错误:

src\netredirect.o:netredirect.cpp:(.data+0x18): undefined reference to `WSARecv@28'
src\netredirect.o:netredirect.cpp:(.data+0x1c): undefined reference to `WSARecvFrom@36'
src\netredirect.o:netredirect.cpp:(.data+0x20): undefined reference to `WSASend@28'
src\netredirect.o:netredirect.cpp:(.data+0x24): undefined reference to `WSASendTo@36'
c:/mingw/bin/../lib/gcc/mingw32/4.8.1/../../../../mingw32/lib/libmingw32.a(main.o): In function `main':
e:\p\giaw\src\pkg\mingwrt-4.0.3-1-mingw32-src\bld/../mingwrt-4.0.3-1-mingw32-src/src/libcrt/crt/main.c:91: undefined reference to `WinMain@16'

2 个答案:

答案 0 :(得分:1)

错误消息非常明确。 WSARecv在您使用它时并不为人所知。在第一次使用之前移动函数定义,或在第一次使用之前添加声明。

答案 1 :(得分:0)

如果您觉得该函数在范围内,只需尝试将其移动到全局函数中,看看会发生什么。(不要将其留在那里,只是看问题是否真的是因为它超出了范围)