我正在开发一个包含ASIO的项目。我添加了库和头文件,但是当我有一个包含asio.hpp
的文件时,我收到以下错误:
1>c:\users\me\documents\of_v0.9.1_vs_release\addons\ofxasio\libs\asio-1.10.6\include\asio/detail/config.hpp(229): warning C4005: 'ASIO_ERROR_CATEGORY_NOEXCEPT': macro redefinition (compiling source file src\ofApp.cpp)
1> c:\users\me\documents\of_v0.9.1_vs_release\addons\ofxasio\libs\asio-1.10.6\include\asio/detail/config.hpp(215): note: see previous definition of 'ASIO_ERROR_CATEGORY_NOEXCEPT' (compiling source file src\ofApp.cpp)
1>c:\users\me\documents\of_v0.9.1_vs_release\addons\ofxasio\libs\asio-1.10.6\include\asio/detail/impl/win_thread.ipp(59): error C2039: 'CreateEvent': is not a member of '`global namespace'' (compiling source file src\ofApp.cpp)
1>c:\users\me\documents\of_v0.9.1_vs_release\addons\ofxasio\libs\asio-1.10.6\include\asio/detail/impl/win_thread.ipp(59): error C3861: 'CreateEvent': identifier not found (compiling source file src\ofApp.cpp)
1>c:\users\me\documents\of_v0.9.1_vs_release\addons\ofxasio\libs\asio-1.10.6\include\asio/detail/impl/win_thread.ipp(69): error C2039: 'CreateEvent': is not a member of '`global namespace'' (compiling source file src\ofApp.cpp)
1>c:\users\me\documents\of_v0.9.1_vs_release\addons\ofxasio\libs\asio-1.10.6\include\asio/detail/impl/win_thread.ipp(69): error C3861: 'CreateEvent': identifier not found (compiling source file src\ofApp.cpp)
1>c:\users\me\documents\of_v0.9.1_vs_release\addons\ofxasio\libs\asio-1.10.6\include\asio/detail/impl/win_iocp_handle_service.ipp(42): error C2039: 'CreateEvent': is not a member of '`global namespace'' (compiling source file src\ofApp.cpp)
1>c:\users\me\documents\of_v0.9.1_vs_release\addons\ofxasio\libs\asio-1.10.6\include\asio/detail/impl/win_iocp_handle_service.ipp(42): error C3861: 'CreateEvent': identifier not found (compiling source file src\ofApp.cpp)
在线研究表明,这可能是由于我需要将_WIN32_WINNT
重新定义为正确的版本号;但是,我尝试了几个版本的数字,并获得incompatible version of Windows error
或没有解决上述错误。
我还在Windows Dev网站上找到了文档:
https://msdn.microsoft.com/en-us/library/windows/desktop/ms682396%28v=vs.85%29.aspx
我发现对于旧版本的Windows需要WinBase.h
,对于Windows 8需要Synchapi.h
。我正在运行Windows 8.1;但不幸的是,包括这些选项都没有奏效。
是否有人对可能导致此错误的原因提出建议?
项目的整个来源位于:https://github.com/morphogencc/ofxAsio/tree/master/example-udpreceiver
答案 0 :(得分:3)
我在使用boost和Poco的项目上遇到了相同的编译器问题。事实证明,Poco包含一个“UnWindows.h”文件,它取消了许多Windows宏。为了防止Poco取消定义宏,我将POCO_NO_UNWINDOWS添加到我的预处理器定义列表中。这似乎解决了推动问题。
答案 1 :(得分:2)
在编译boost websocket应用程序时,我得到了#34; CreateEvent:不是'全局命名空间'在ASIO"错误。当我编译单个文件时,一切正常,除了主要的应用程序文件,我组合所有标题。我通过在顶部添加boost标题来更改头文件的顺序。它解决了这个问题。希望这有用。