/boost/lockfree/queue.hpp:错误:静态断言失败:(的boost :: has_trivial_destructor&LT; T&GT; ::值) [英] /boost/lockfree/queue.hpp: error: static assertion failed: (boost::has_trivial_destructor<T>::value)
问题描述
我想在这个文件替换的boost :: lockfree ::队列
为的std ::队列
<一href=\"https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp\" rel=\"nofollow\">https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp
我已经添加了的#include&LT;升压/ lockfree / queue.hpp&GT;
;更改后的行 130
,的std ::队列&LT;作用&gt; m_actions;
,到的boost :: lockfree ::队列&LT;作用&gt; m_actions;
;除去具有锁定做的所有行;并且更改后的行 103
, m_actions.pop();
,到 m_actions.pop(一);
我得到这些错误,当我 scons的broadcast_server_lockfree
在项目的根后添加 broadcast_server_lockfree = SConscript('#/ broadcast_server_lockfree / SConscript',variant_dir = builddir +'broadcast_server_lockfree',重复= 0)
来项目的根的 SConstruct
,并使用 broadcast_server
的 SConstruct
在 broadcast_server_lockfree
目录:
根@服务器:〜/ websocketpp-实验#scons的broadcast_server_lockfree
scons的:读SConscript文件...
C ++ 11的构建环境部分启用
scons的:读完SConscript文件。
scons的:建筑的目标...
scons的:建筑相关VariantDir目标:构建/发布/ broadcast_server_lockfree
G ++ -o建立/释放/ broadcast_server_lockfree / broadcast_server_lockfree.o -c -std =的C ++ 0x -Wall -Wcast对齐-isystem /根/ 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
10:0文件从broadcast_server_lockfree / broadcast_server_lockfree.cpp包括:
/root/boost_1_53_0/boost/lockfree/queue.hpp:在实例类boost :: lockfree ::队列&lt;作用&GT;':
broadcast_server_lockfree / broadcast_server_lockfree.cpp:139:36:从这里需要
/root/boost_1_53_0/boost/lockfree/queue.hpp:79:5:错误:静态断言失败:(的boost :: has_trivial_destructor&LT; T&GT; ::值)
/root/boost_1_53_0/boost/lockfree/queue.hpp:83:5:错误:静态断言失败:(的boost :: has_trivial_assign&LT; T&GT; ::值)
broadcast_server_lockfree / broadcast_server_lockfree.cpp:在成员函数'无效broadcast_server :: process_messages():
broadcast_server_lockfree / broadcast_server_lockfree.cpp:111:34:错误:'类boost :: lockfree ::队列&lt;作用&GT;'没有成员名为'前'
broadcast_server_lockfree / broadcast_server_lockfree.cpp:117:55:错误:'m_connection_lock在此范围未声明
broadcast_server_lockfree / broadcast_server_lockfree.cpp:120:55:错误:'m_connection_lock在此范围未声明
broadcast_server_lockfree / broadcast_server_lockfree.cpp:123:55:错误:'m_connection_lock在此范围未声明
10:0文件从broadcast_server_lockfree / broadcast_server_lockfree.cpp包括:
/root/boost_1_53_0/boost/lockfree/queue.hpp:在提振:: lockfree ::队列&LT的实例; T,A0,A1,A2&GT; ::〜队列()与T =动作; A0 =的boost ::参数:: void_; A1 =的boost ::参数:: void_; A2 =的boost ::参数:: void_]:
broadcast_server_lockfree / broadcast_server_lockfree.cpp:41:24:从这里需要
/root/boost_1_53_0/boost/lockfree/queue.hpp:229:11:错误:调用没有匹配的函数行动::行动()
/root/boost_1_53_0/boost/lockfree/queue.hpp:229:11:注意:考生:
broadcast_server_lockfree / broadcast_server_lockfree.cpp:32:5:注意:动作::动作(ACTION_TYPE,websocketpp ::端点&LT; websocketpp ::连接&LT; websocketpp ::配置:: ASIO&gt;中websocketpp ::配置:: ASIO&GT; :: message_ptr)
broadcast_server_lockfree / broadcast_server_lockfree.cpp:32:5:注意:考生预计2个参数,提供0
broadcast_server_lockfree / broadcast_server_lockfree.cpp:31:5:注意:动作::动作(ACTION_TYPE,websocketpp :: connection_hdl)
broadcast_server_lockfree / broadcast_server_lockfree.cpp:31:5:注意:考生预计2个参数,提供0
broadcast_server_lockfree / broadcast_server_lockfree.cpp:30:8:注意:动作::动作(const的行动和放大器;)
broadcast_server_lockfree / broadcast_server_lockfree.cpp:30:8:注意:考生预计1参数,提供0
10:0文件从broadcast_server_lockfree / broadcast_server_lockfree.cpp包括:
/root/boost_1_53_0/boost/lockfree/queue.hpp:在实例化的boost :: lockfree ::队列&LT; T,A0,A1,A2&GT; ::节点::节点(升压:: lockfree ::队列&LT; T, A0,A1,A2&GT; ::节点:: handle_type)与T =动作; A0 =的boost ::参数:: void_; A1 =的boost ::参数:: void_; A2 =的boost ::参数:: void_;提高:: lockfree ::队列&LT; T,A0,A1,A2&GT; ::节点:: handle_type =提振:: lockfree ::队列&LT;作用&gt; ::节点*]:
/root/boost_1_53_0/boost/lockfree/detail/freelist.hpp:82:13:从'要求T *的boost :: lockfree ::详细:: freelist_stack LT&; T,和的Alloc GT; ::结构(常量ArgumentType&安培;)与布尔ThreadSafe的= TRUE;布尔界= FALSE; ArgumentType =提振:: lockfree ::队列&LT;作用&gt; ::节点。*; T =的boost :: lockfree ::队列&LT;作用&gt; ::节点; ALLOC =的std ::分配器&LT;提高:: lockfree ::队列&LT;作用&gt; ::节点&GT;]
/root/boost_1_53_0/boost/lockfree/queue.hpp:126:75:从'无效升压所需:: lockfree ::队列&LT; T,A0,A1,A2&GT; ::初始化()与T =动作; A0 =的boost ::参数:: void_; A1 =的boost ::参数:: void_; A2 =的boost ::参数:: void_]'
/root/boost_1_53_0/boost/lockfree/queue.hpp:166:9:从'升压所需:: lockfree ::队列&LT; T,A0,A1,A2&GT; ::队列()与T =动作; A0 =的boost ::参数:: void_; A1 =的boost ::参数:: void_; A2 =的boost ::参数:: void_]'
broadcast_server_lockfree / broadcast_server_lockfree.cpp:41:24:从这里需要
/root/boost_1_53_0/boost/lockfree/queue.hpp:109:52:错误:调用没有匹配的函数行动::行动()
/root/boost_1_53_0/boost/lockfree/queue.hpp:109:52:注意:考生:
broadcast_server_lockfree / broadcast_server_lockfree.cpp:32:5:注意:动作::动作(ACTION_TYPE,websocketpp ::端点&LT; websocketpp ::连接&LT; websocketpp ::配置:: ASIO&gt;中websocketpp ::配置:: ASIO&GT; :: message_ptr)
broadcast_server_lockfree / broadcast_server_lockfree.cpp:32:5:注意:考生预计2个参数,提供0
broadcast_server_lockfree / broadcast_server_lockfree.cpp:31:5:注意:动作::动作(ACTION_TYPE,websocketpp :: connection_hdl)
broadcast_server_lockfree / broadcast_server_lockfree.cpp:31:5:注意:考生预计2个参数,提供0
broadcast_server_lockfree / broadcast_server_lockfree.cpp:30:8:注意:动作::动作(const的行动和放大器;)
broadcast_server_lockfree / broadcast_server_lockfree.cpp:30:8:注意:考生预计1参数,提供0
scons的:*** [建立/释放/ broadcast_server_lockfree / broadcast_server_lockfree.o]错误1
scons的:建筑终止,因为错误的。
我知道旁边没有关于C ++和对错误的搜索已经产生了什么(因为我不知道我在读什么)。
这里的的boost :: lockfree ::队列
例如,如果它帮助。 http://boost-sandbox.sourceforge.net/doc/html/lockfree /examples.html
请告诉我如何纠正这一点。
动作
结构动作{
行动(ACTION_TYPE T,connection_hdl H):类型(T),高密度脂蛋白(H){}
行动(ACTION_TYPE T,服务器:: message_ptr M):类型(T),味精(M){} ACTION_TYPE类型;
websocketpp :: connection_hdl HDL;
服务器:: message_ptr味精;
};
从文档:
的 T必须有一个拷贝构造函数,一个微不足道的赋值运算符和析构函数琐碎的
因此,你的动作
类必须如下所示:
集体诉讼
{
上市:
行动(const的行动和放大器; RHS){...}
//隐式定义的析构函数自身和所有成员变量
//隐式定义的操作符=自身和所有成员变量};
的 static_assert
s的抱怨,因为你的析构函数和运算符=
都不会隐编译器定义(或本是的行动至少有一个成员变量的情况下
)。
编辑:我有一个快速浏览一下回购 - 我似乎无法找到 connection_hdl
,并没有 message_ptr
在模板&LT; typename的终点&GT;级服务器
。无论哪种方式, websocketpp之一:: connection_hdl HDL
或服务器:: message_ptr味精
不满足上述条件。只是掉入一lockfree队列,而不是使用的std ::队列
可能是一个不平凡的任务,这将需要一些改动。
I'm trying to substitute boost::lockfree::queue
for std::queue
in this file https://github.com/zaphoyd/websocketpp/blob/experimental/examples/broadcast_server/broadcast_server.cpp
I've added #include <boost/lockfree/queue.hpp>
; changed line 130
, std::queue<action> m_actions;
, to boost::lockfree::queue<action> m_actions;
; removed all lines having to do with locking; and changed line 103
, m_actions.pop();
, to m_actions.pop(a);
.
I get these errors when I scons broadcast_server_lockfree
in the project root after adding broadcast_server_lockfree = SConscript('#/broadcast_server_lockfree/SConscript',variant_dir = builddir + 'broadcast_server_lockfree',duplicate = 0)
to the project root's SConstruct
and using broadcast_server
's SConstruct
in the broadcast_server_lockfree
directory:
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, A0, A1, A2>::node::node(boost::lockfree::queue<T, A0, A1, A2>::node::handle_type) [with T = action; A0 = boost::parameter::void_; A1 = boost::parameter::void_; A2 = boost::parameter::void_; boost::lockfree::queue<T, A0, A1, 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, A0, A1, 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, 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: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, 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
scons: *** [build/release/broadcast_server_lockfree/broadcast_server_lockfree.o] Error 1
scons: building terminated because of errors.
I know next to nothing about c++, and searches on the error have yielded nothing (since I have no idea what I'm reading).
Here's the boost::lockfree::queue
example if it helps. http://boost-sandbox.sourceforge.net/doc/html/lockfree/examples.html
Please show me how to correct this.
action
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;
};
From the docs:
T must have a copy constructor, a trivial assignment operator, and a trivial destructor.
Thus your action
class must look like the following:
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
};
The static_assert
s are complaining because your destructor and operator=
are not implicitly defined by the compiler (or this is the case for at least one member variable of action
).
Edit: I've had a quick look at the repo - I can't seem to find connection_hdl
, and there is no message_ptr
in template <typename endpoint> class server
. Either way, one of websocketpp::connection_hdl hdl
or server::message_ptr msg
does not satisfy the above conditions. Just "dropping in" a lockfree queue instead of using a std::queue
is likely a non-trivial task which will require a number of changes.
这篇关于/boost/lockfree/queue.hpp:错误:静态断言失败:(的boost :: has_trivial_destructor&LT; T&GT; ::值)的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!