& quot; ожидаемый ‘;’ в конце списка объявлений & quot; ошибка для zeromq

Я использую 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

Большое спасибо. Одри.

1

Решение

Макрос 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,

6

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]