C ++ "ошибка: тип с именем 'type' отсутствует в" классе std :: result_of <...> " - PullRequest
0 голосов
/ 04 октября 2018

Я пытаюсь скомпилировать сервер gRPC, но получаю сообщение об ошибке:

In file included from /usr/include/c++/4.8.2/mutex:42:0,
                 from /usr/include/c++/4.8.2/condition_variable:39,
                 from /home/msl/maum/include/grpc++/server.h:22,
                 from wavenet_server.cc:2:
/usr/include/c++/4.8.2/functional: In instantiation of ‘struct std::_Bind_simple<std::_Mem_fn<void* (WavenetServiceImpl::*)(void*)>(void**)>’:
/usr/include/c++/4.8.2/thread:137:47:   required from ‘std::thread::thread(_Callable&&, _Args&& ...) [with _Callable = void* (WavenetServiceImpl::*)(void*); _Args = {void* (&)[2]}]’
wavenet_server.cc:317:73:   required from here
/usr/include/c++/4.8.2/functional:1697:61: error: no type named ‘type’ in ‘class std::result_of<std::_Mem_fn<void* (WavenetServiceImpl::*)(void*)>(void**)>’
       typedef typename result_of<_Callable(_Args...)>::type result_type;
                                                             ^
/usr/include/c++/4.8.2/functional:1727:9: error: no type named ‘type’ in ‘class std::result_of<std::_Mem_fn<void* (WavenetServiceImpl::*)(void*)>(void**)>’
         _M_invoke(_Index_tuple<_Indices...>)

Мне кажется, эта строка в wavenet_server.cc:

std::thread t(&WavenetServiceImpl::threadWavenetInfer, thread_args);

вводит неоднозначность (возможно, компилятор не знает, является ли это декорацией функции или выражением?)

Поэтому я попытался заменить строку на:

std::thread t{&WavenetServiceImpl::threadWavenetInfer, thread_args};

но это тоже не сработало

Это правильный источник проблемы?и как я могу это исправить?Если эта строка не является проблемой, то, пожалуйста, дайте мне знать (исходный код слишком длинный для вставки, и я не могу сказать, какая строка является проблемой, потому что я не могу понять сообщение об ошибке, но я буду стараться изо всех сил).

1 Ответ

0 голосов
/ 04 октября 2018

Вам нужна более новая версия GCC, если вы хотите использовать функции C ++ 11, такие как std::result_of.GCC 4.8 имеет только очень экспериментальную поддержку C ++ 11.Обычно рекомендуется использовать его только в режиме C ++ 98.

Если вы хотите использовать C ++ 11 в Red Hat Enterprise Linux 7, вы должны получить последнюю версию Red Hat Developer Toolset:

Для CentOS DTS доступен на сайте Коллекции программного обеспечения .

Пожалуйста, имейте в виду, что из-за того, как работает DTS, вам необходимо скомпилировать весь код C ++ 11 с DTS, чтобы вы не могли использовать предварительно скомпилированную библиотеку gRPC.

...