零MQ的"expected ';' at the end of declaration list"错误
"expected ';' at the end of declaration list" error for 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;
}
但它失败了。错误显示
"frameworks/zmq/zmq.hpp:377:35:错误:预期末尾的';" 声明列表 socket_t (常量 socket_t&) ZMQ_DELETED_FUNCTION; ^ ;frameworks/zmq/zmq.hpp:379:42:错误:声明列表末尾的预期";" void 运算符 = (常量 socket_t&) ZMQ_DELETED_FUNCTION;"
为什么会这样?zmq.hpp 代码不包含任何错误。请帮忙。
最后我这样做了,它奏效了。
#if __has_feature(cxx_deleted_functions)
#define ZMQ_DELETED_FUNCTION = delete
#else
#define ZMQ_DELETED_FUNCTION
#endif
多谢。奥德丽。
引入宏ZMQ_DELETED_FUNCTION
显然是为了提供对"已删除函数"(= delete
)等C++11功能的条件支持。您的编译器似乎不支持该 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
对我来说,它看起来很破碎。如果编译器不支持cxx_deleted_functions
功能,则宏ZMQ_DELETED_FUNCTION
将保持未定义状态(而不是定义为空)。这是错误的。
你在用叮当吗?如果是这样,这实际上可能是您错误的原因。在这种情况下,可以通过将ZMQ_DELETED_FUNCTION
预定义为空宏来修复错误,无论是作为全局宏定义还是在包含zmq.hpp
之前的源代码中。
- Usages of std::move
- 使用 [] 运算符时"binding reference of type discards qualifiers"
- 如何处理 c++ 中类实现中的"invalid use of non-static data member"?
- 在C++中使用 Catch 测试框架编译错误"error: expected ';' at end of declaration list"
- Declaration of IntRect SFML
- 根据标准,究竟什么是"declaration of an object"
- 为什么海湾合作委员会抱怨"declaration of 'foo' shadows a previous call [-Werror=shadow]"
- MinGW64和"conflicting declaration of C function int select(...)"
- 解决方法:"out of line definition of 'graph' does not match any declaration in 'graph'"
- 获取错误:"error: conflicting types for ‘call_celsius’ "和"note: previous implicit declaration of ‘call_ce
- Clang VS VC++: "error: declaration of 'T' shadows template parameter"
- "ISO C++ forbids declaration of 'list' with no type"错误
- "Declaration of xxx outside of class is not definition"错误
- 不断收到" see declaration of 'class "错误
- 对依赖基类成员的不限定访问会导致"A declaration of [x] must be available"
- 检索 libevent 连接信息时'Forward Declaration of Struct'
- G++ "declaration of "运算符<< " as non-function"
- 零MQ的"expected ';' at the end of declaration list"错误
- C++结构和"error: ISO C++ forbids declaration of '...' with no type"
- 使用 MingW64 C++ "declaration of '__RPC__range' with no type"编译 IMAPI2.h 应用程序时出现错误