c – /boost/lockfree/queue.hpp:错误:静态断言失败:(boost :
我试图在此文件
https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp中替换boost :: lockfree :: queue for std :: queue
我添加了#include< boost / lockfree / queue.hpp> ;;更改了第130行,std :: queue< action> m_actions;,来自boost :: lockfree :: queue< action> m_actions ;;删除所有与锁定有关的行;并将第103行,m_actions.pop();更改为m_actions.pop(a);. 在将broadcast_server_lockfree = SConscript(‘#/ broadcast_server_lockfree / SConscript’,variant_dir = builddir’casting_server_lockfree’,duplicate = 0)添加到项目根目录的SConstruct并在broadcast_server_lockfree目录中使用broadcast_server的SConstruct后,我在项目根目录中scons broadcast_server_lockfree时出现这些错误: root@server:~/websocketpp-experimental# scons broadcast_server_lockfree scons: Reading SConscript files ... C++11 build environment partially enabled scons: done reading SConscript files. scons: Building targets ... scons: building associated VariantDir targets: build/release/broadcast_server_lockfree g++ -o build/release/broadcast_server_lockfree/broadcast_server_lockfree.o -c -std=c++0x -Wall -Wcast-align -isystem /root/boost_1_53_0 -DNDEBUG -D_WEBSOCKETPP_CPP11_MEMORY_ -D_WEBSOCKETPP_CPP11_FUNCTIONAL_ -D_WEBSOCKETPP_CPP11_SYSTEM_ERROR_ -D_WEBSOCKETPP_CPP11_RANDOM_DEVICE_ -D_WEBSOCKETPP_NOEXCEPT_ -I. broadcast_server_lockfree/broadcast_server_lockfree.cpp In file included from broadcast_server_lockfree/broadcast_server_lockfree.cpp:10:0: /root/boost_1_53_0/boost/lockfree/queue.hpp: In instantiation of 'class boost::lockfree::queue<action>': broadcast_server_lockfree/broadcast_server_lockfree.cpp:139:36: required from here /root/boost_1_53_0/boost/lockfree/queue.hpp:79:5: error: static assertion failed: (boost::has_trivial_destructor<T>::value) /root/boost_1_53_0/boost/lockfree/queue.hpp:83:5: error: static assertion failed: (boost::has_trivial_assign<T>::value) broadcast_server_lockfree/broadcast_server_lockfree.cpp: In member function 'void broadcast_server::process_messages()': broadcast_server_lockfree/broadcast_server_lockfree.cpp:111:34: error: 'class boost::lockfree::queue<action>' has no member named 'front' broadcast_server_lockfree/broadcast_server_lockfree.cpp:117:55: error: 'm_connection_lock' was not declared in this scope broadcast_server_lockfree/broadcast_server_lockfree.cpp:120:55: error: 'm_connection_lock' was not declared in this scope broadcast_server_lockfree/broadcast_server_lockfree.cpp:123:55: error: 'm_connection_lock' was not declared in this scope In file included from broadcast_server_lockfree/broadcast_server_lockfree.cpp:10:0: /root/boost_1_53_0/boost/lockfree/queue.hpp: In instantiation of 'boost::lockfree::queue<T,A0,A1,A2>::~queue() [with T = action; A0 = boost::parameter::void_; A1 = boost::parameter::void_; A2 = boost::parameter::void_]': broadcast_server_lockfree/broadcast_server_lockfree.cpp:41:24: required from here /root/boost_1_53_0/boost/lockfree/queue.hpp:229:11: error: no matching function for call to 'action::action()' /root/boost_1_53_0/boost/lockfree/queue.hpp:229:11: note: candidates are: broadcast_server_lockfree/broadcast_server_lockfree.cpp:32:5: note: action::action(action_type,websocketpp::endpoint<websocketpp::connection<websocketpp::config::asio>,websocketpp::config::asio>::message_ptr) broadcast_server_lockfree/broadcast_server_lockfree.cpp:32:5: note: candidate expects 2 arguments,0 provided broadcast_server_lockfree/broadcast_server_lockfree.cpp:31:5: note: action::action(action_type,websocketpp::connection_hdl) broadcast_server_lockfree/broadcast_server_lockfree.cpp:31:5: note: candidate expects 2 arguments,0 provided broadcast_server_lockfree/broadcast_server_lockfree.cpp:30:8: note: action::action(const action&) broadcast_server_lockfree/broadcast_server_lockfree.cpp:30:8: note: candidate expects 1 argument,0 provided In file included from broadcast_server_lockfree/broadcast_server_lockfree.cpp:10:0: /root/boost_1_53_0/boost/lockfree/queue.hpp: In instantiation of 'boost::lockfree::queue<T,A2>::node::node(boost::lockfree::queue<T,A2>::node::handle_type) [with T = action; A0 = boost::parameter::void_; A1 = boost::parameter::void_; A2 = boost::parameter::void_; boost::lockfree::queue<T,A2>::node::handle_type = boost::lockfree::queue<action>::node*]': /root/boost_1_53_0/boost/lockfree/detail/freelist.hpp:82:13: required from 'T* boost::lockfree::detail::freelist_stack<T,Alloc>::construct(const ArgumentType&) [with bool ThreadSafe = true; bool Bounded = false; ArgumentType = boost::lockfree::queue<action>::node*; T = boost::lockfree::queue<action>::node; Alloc = std::allocator<boost::lockfree::queue<action>::node>]' /root/boost_1_53_0/boost/lockfree/queue.hpp:126:75: required from 'void boost::lockfree::queue<T,A2>::initialize() [with T = action; A0 = boost::parameter::void_; A1 = boost::parameter::void_; A2 = boost::parameter::void_]' /root/boost_1_53_0/boost/lockfree/queue.hpp:166:9: required from 'boost::lockfree::queue<T,A2>::queue() [with T = action; A0 = boost::parameter::void_; A1 = boost::parameter::void_; A2 = boost::parameter::void_]' broadcast_server_lockfree/broadcast_server_lockfree.cpp:41:24: required from here /root/boost_1_53_0/boost/lockfree/queue.hpp:109:52: error: no matching function for call to 'action::action()' /root/boost_1_53_0/boost/lockfree/queue.hpp:109:52: note: candidates are: broadcast_server_lockfree/broadcast_server_lockfree.cpp:32:5: note: action::action(action_type,0 provided scons: *** [build/release/broadcast_server_lockfree/broadcast_server_lockfree.o] Error 1 scons: building terminated because of errors. 我对c几乎一无所知,对错误的搜索没有产生任何结果(因为我不知道我在读什么). 这是boost :: lockfree :: queue示例,如果有帮助的话. http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html 请告诉我如何纠正这个问题. 行动 struct action { action(action_type t,connection_hdl h) : type(t),hdl(h) {} action(action_type t,server::message_ptr m) : type(t),msg(m) {} action_type type; websocketpp::connection_hdl hdl; server::message_ptr msg; }; 解决方法
从
docs:
T必须有一个复制构造函数,一个普通的赋值运算符和一个简单的析构函数. 因此,您的操作类必须如下所示: class action { public: action(const action& rhs) { ... } //Implicitly defined destructor for itself and all member variables //Implicitly defined operator= for itself and all member variables }; static_asserts抱怨,因为析构函数和operator =不是由编译器隐式定义的(或者至少有一个成员操作变量的情况). 编辑:我已经快速查看了repo – 我似乎无法找到connection_hdl,并且模板中没有message_ptr< typename endpoint>班级服务器.无论哪种方式,websocketpp :: connection_hdl hdl或server :: message_ptr msg之一都不满足上述条件.只是“插入”一个无锁队列而不是使用std :: queue可能是一个非常重要的任务,需要进行一些更改. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |