nan*_*nan 1 c++ zeromq akka-zeromq
我正在使用Mac,我使用自制软件来安装zeromq.我想在我的应用程序中使用zeromq.我试图编译zmq.hpp https://github.com/zeromq/cppzmq/blob/master/zmq.hpp 与
int main () {
// Prepare our context and socket
zmq::context_t context (1);
zmq::socket_t socket (context, ZMQ_REP);
socket.bind ("tcp://*:5555");
while (true) {
zmq::message_t request;
// Wait for next request from client
socket.recv (&request);
std::cout << "Received Hello" << std::endl;
// Do some 'work'
sleep (1);
// Send reply back to client
zmq::message_t reply (5);
memcpy ((void *) reply.data (), "World", 5);
socket.send (reply);
}
return 0;
}
Run Code Online (Sandbox Code Playgroud)
但它失败了.错误显示
"frameworks/zmq/zmq.hpp:377:35:错误:预期';' 在声明列表末尾socket_t(const socket_t&)ZMQ_DELETED_FUNCTION; ^; frameworks/zmq/zmq.hpp:379:42:error:expected';' 在声明列表末尾void operator =(const socket_t&)ZMQ_DELETED_FUNCTION;"
为什么会这样?zmq.hpp代码不包含任何错误.请帮忙.
最后,我这样做,它的工作.
#if __has_feature(cxx_deleted_functions)
#define ZMQ_DELETED_FUNCTION = delete
#else
#define ZMQ_DELETED_FUNCTION
#endif
Run Code Online (Sandbox Code Playgroud)
非常感谢.奥黛丽.
宏ZMQ_DELETED_FUNCTION显然是为了为C++ 11功能提供条件支持"删除函数"(= delete).您的编译器似乎不支持该C++ 11功能.因此错误.
通过设计,zmq.hpp尝试通过分析编译器版本并相应地定义宏来自动设置此宏.这种自动检测可能过于乐观.但是,您的编译器也可能实际支持该功能,您只是忘了在编译器设置中打开它.
顺便说一下,我正在查看定义宏的代码的Clang部分
#elif defined(__clang__)
#if __has_feature(cxx_rvalue_references)
#define ZMQ_HAS_RVALUE_REFS
#endif
#if __has_feature(cxx_deleted_functions)
#define ZMQ_DELETED_FUNCTION = delete
#endif
Run Code Online (Sandbox Code Playgroud)
它看起来很糟糕.如果编译器不支持cxx_deleted_functions功能,则宏ZMQ_DELETED_FUNCTION保持未定义(而不是被定义为空).这是错的.
你在用Clang吗?如果是这样,这实际上可能是您错误的原因.在这种情况下,可以通过预先定义ZMQ_DELETED_FUNCTION为空宏来修复错误,可以是全局宏定义,也可以是包含之前的源代码zmq.hpp.