繁体   English   中英

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

[英]Function pointer, was not declared in this scope

我用函数指针

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”

为什么会发生? 如何解决? 谢谢。

已编辑

正如Adrian Ratnapala所写,我在windows.h之前包括winsock2.h。 现在我还有其他错误:

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'

该错误消息非常明显。 在使用WSARecv时尚不了解。 可以在第一次使用功能定义之前移动它,或者在第一次使用功能之前添加一个声明。

如果您似乎认为该函数在范围内,请尝试将其像全局函数一样移动,然后看看会发生什么。(不要将其留在此处,只需查看问题是否确实是因为它不在范围内)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM