Я использую Mac, и я использую homebrew для установки 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 (const socket_t&) ZMQ_DELETED_FUNCTION;
^
; frameworks / zmq / zmq.hpp: 379: 42: ошибка: ожидается ‘;’ в конце списка объявлений
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
Большое спасибо. Одри.
Макрос 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
и это выглядит сломанным для меня. Если компилятор не поддерживает cxx_deleted_functions
функция, затем макрос ZMQ_DELETED_FUNCTION
остается неопределенным (вместо того, чтобы быть определенным как пустой). Это не верно.
Вы используете Clang? Если это так, это может быть причиной вашей ошибки. В этом случае ошибку можно исправить, предварительно определив ZMQ_DELETED_FUNCTION
как пустой макрос, либо как глобальное определение макроса, либо в исходном коде перед включением zmq.hpp
,
Других решений пока нет …