C++ boost::asio::截止时间“计时器原因”;函数调用不能出现在常量表达式中;错误

C++ boost::asio::截止时间“计时器原因”;函数调用不能出现在常量表达式中;错误,c++,boost,boost-asio,C++,Boost,Boost Asio,我试图在Windows上使用boost 1.54.0,但在asio::deadline\u计时器方面遇到了一些问题 以下是我的(相当简单)代码: #包括 使用boost::asio::deadline\u定时器; int main(){ 截止时间\定时器超时; } 当我尝试使用GCC4.7(cygwin)编译此代码段时,会出现以下错误: g++ -D__USE_W32_SOCKETS -D_WIN32_WINNT "-IC:\\dev\\lib\\boost_1_54_0" "-IC:\\de

我试图在Windows上使用boost 1.54.0,但在asio::deadline\u计时器方面遇到了一些问题

以下是我的(相当简单)代码:

#包括
使用boost::asio::deadline\u定时器;
int main(){
截止时间\定时器超时;
}
当我尝试使用GCC4.7(cygwin)编译此代码段时,会出现以下错误:

g++ -D__USE_W32_SOCKETS -D_WIN32_WINNT "-IC:\\dev\\lib\\boost_1_54_0" "-IC:\\dev\\workspace-cpp\\ts_core\\src" -O0 -g3 -Wall -c -fmessage-length=0 -o "src\\main.o" "..\\src\\main.cpp" 
In file included from C:\dev\lib\boost_1_54_0/boost/asio/detail/impl/posix_tss_ptr.ipp:24:0,
                 from C:\dev\lib\boost_1_54_0/boost/asio/detail/posix_tss_ptr.hpp:77,
                 from C:\dev\lib\boost_1_54_0/boost/asio/detail/tss_ptr.hpp:27,
                 from C:\dev\lib\boost_1_54_0/boost/asio/detail/call_stack.hpp:20,
                 from C:\dev\lib\boost_1_54_0/boost/asio/impl/handler_alloc_hook.ipp:19,
                 from C:\dev\lib\boost_1_54_0/boost/asio/handler_alloc_hook.hpp:80,
                 from C:\dev\lib\boost_1_54_0/boost/asio/detail/handler_alloc_helpers.hpp:21,
                 from C:\dev\lib\boost_1_54_0/boost/asio/detail/bind_handler.hpp:19,
                 from C:\dev\lib\boost_1_54_0/boost/asio/detail/wrapped_handler.hpp:18,
                 from C:\dev\lib\boost_1_54_0/boost/asio/io_service.hpp:25,
                 from C:\dev\lib\boost_1_54_0/boost/asio/basic_io_object.hpp:19,
                 from C:\dev\lib\boost_1_54_0/boost/asio/basic_socket.hpp:20,
                 from C:\dev\lib\boost_1_54_0/boost/asio/basic_datagram_socket.hpp:20,
                 from C:\dev\lib\boost_1_54_0/boost/asio.hpp:21,
                 from ..\src\main.cpp:8:
C:\dev\lib\boost_1_54_0/boost/asio/error.hpp:77:17: error: a function call cannot appear in a constant-expression
C:\dev\lib\boost_1_54_0/boost/asio/error.hpp:130:15: error: a function call cannot appear in a constant-expression
C:\dev\lib\boost_1_54_0/boost/asio/error.hpp:135:19: error: a function call cannot appear in a constant-expression
C:\dev\lib\boost_1_54_0/boost/asio/error.hpp:149:23: error: a function call cannot appear in a constant-expression
C:\dev\lib\boost_1_54_0/boost/asio/error.hpp:163:15: error: a function call cannot appear in a constant-expression
..\src\main.cpp: In function 'int main()':
..\src\main.cpp:24:17: error: no matching function for call to 'boost::asio::basic_deadline_timer<boost::posix_time::ptime>::basic_deadline_timer()'
g++-D_uu使用W32_SOCKETS-D_WIN32_WINNT“-IC:\\dev\\lib\\boost\u 1\u 54_0”“-IC:\\dev\\workspace cpp\\ts\u core\\src“-O0-g3-Wall-c-fmessage length=0-o“src\\main.o”“..\\src\\main.cpp”
在C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/detail/impl/posix\u tss\u ptr.ipp:24:0中包含的文件中,
来自C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/detail/posix\u tss\u ptr.hpp:77,
来自C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/detail/tss\u ptr.hpp:27,
从C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/detail/call\u stack.hpp:20,
来自C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/impl/handler\u alloc\u hook.ipp:19,
从C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/handler\u alloc\u hook.hpp:80,
来自C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/detail/handler\u alloc\u helpers.hpp:21,
从C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/detail/bind\u handler.hpp:19,
从C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/detail/wrapped\u handler.hpp:18,
从C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/io\u service.hpp:25,
从C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/basic\u io\u object.hpp:19,
从C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/basic\u socket.hpp:20,
从C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/basic\u datagram\u socket.hpp:20,
从C:\dev\lib\boost\u 1\u 54\u 0/boost/asio.hpp:21,
from..\src\main.cpp:8:
C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/error.hpp:77:17:错误:函数调用不能出现在常量表达式中
C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/error.hpp:130:15:错误:函数调用不能出现在常量表达式中
C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/error.hpp:135:19:错误:函数调用不能出现在常量表达式中
C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/error.hpp:149:23:错误:函数调用不能出现在常量表达式中
C:\dev\lib\boost\u 1\u 54\u 0/boost/asio/error.hpp:163:15:错误:函数调用不能出现在常量表达式中
..\src\main.cpp:在函数“int main()”中:
..\src\main.cpp:24:17:错误:调用“boost::asio::basic\u deadline\u timer::basic\u deadline\u timer()”时没有匹配的函数
我花了一些时间进行研究,并添加了“-D_USE_W32_SOCKETS-D_WIN32_WINNT”,但没有成功。
问题似乎在于行“#include”,这是main中的第8行。cpp

boost::asio::daildate\u计时器没有默认的空构造函数。 你应使用:

boost::asio::io_service _iosvc;
boost::asio::deadline_timer timer(_iosvc);

boost::asio::deadline\u计时器没有默认的空构造函数。 你应使用:

boost::asio::io_service _iosvc;
boost::asio::deadline_timer timer(_iosvc);

生成配置似乎有问题。您提到的所有行都是对
BOOST\u ASIO\u WIN\u或\u POSIX
宏的调用,该宏是对POSIX和本机WIN实现细节的调用之间的切换。您的配置似乎在某种程度上弄乱了这一点,包括错误的标题和/或错误地扩展宏。宏定义基本上如下所示:

#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_win
#else
# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_posix
#endif

因此,第一个问题是:在构建过程中是否定义了
\uuuu CYGWIN\uuuu

构建配置似乎有问题。您提到的所有行都是对
BOOST\u ASIO\u WIN\u或\u POSIX
宏的调用,该宏是对POSIX和本机WIN实现细节的调用之间的切换。您的配置似乎在某种程度上弄乱了这一点,包括错误的标题和/或错误地扩展宏。宏定义基本上如下所示:

#if defined(BOOST_ASIO_WINDOWS) || defined(__CYGWIN__)
# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_win
#else
# define BOOST_ASIO_WIN_OR_POSIX(e_win, e_posix) e_posix
#endif

因此,第一个问题是:在您的构建过程中是否定义了
\uuuu CYGWIN\uuu

最后,这似乎是CYGWIN gcc和构建dll的问题


在我使用boost、cygwin/gcc和eclipse(例如,动态指针转换没有终止,导致无休止的循环)遇到一些非常奇怪的错误后,我切换到VisualStudio'12,一切都很顺利……

最后,似乎是cygwin gcc和构建DLL的问题


在我使用boost、cygwin/gcc和eclipse(例如,动态指针投射没有终止,导致无休止的循环)遇到一些非常奇怪的错误后,我切换到VisualStudio'12,一切都很顺利……

这给我敲响了警钟;我想我曾经不得不解决同样的问题。我相信ASIO使用的一些错误代码在某些版本的Windows中没有指定。尝试使用以下方法:

-D_WIN32_WINNT=0x0501

这将目标定位于最低限度的Windows XP(我相信)。

这给我敲响了警钟;我想我曾经不得不解决同样的问题。我相信ASIO使用的一些错误代码在某些版本的Windows中没有指定。尝试使用以下方法:

-D_WIN32_WINNT=0x0501

这将构建目标设置为最低限度的Windows XP(我相信)。

问题似乎在于include-itselt-我尝试了你的代码,但它仍然显示了第8行(即“#include”)中出现的错误。嗯,问题似乎在于include-itselt-我尝试了你的代码,但它仍然显示了第8行中出现的错误(哪一行是“#include”)我在我的g++调用中添加了-D#uu CYGWIN_uuuuuuuu。仍然是同一个问题…有什么建议吗?我要做的第一件事就是将有问题的头包含到一个新的空main.cpp中并编译它(希望错误仍然出现)。缩小错误范围。也许eben会查看预处理器输出。复制有问题的boost头文件,去掉任何不需要的东西。深入挖掘;-)我在g++调用中添加了-D_ucygwin_u。还是一样的问题。。。有什么建议吗?我要做的第一件事就是将有问题的标题包含到一个新的空main.cpp中并编译它(希望错误仍然出现)。缩小误差。也许是eb