Повышение CLion C 17: в пространстве имен нет члена с именем xxx

#c #boost #clion

Вопрос:

Я настраиваю проект C 17 boost 1.76.0 в Clion 2018.3 с этим минимальным кодом:

 #include <boost/asio/ip/tcp.hpp>

int main(int argc, char **argv)
{
  auto const address = boost::asio::ip::make_address(argv[1]);
  return 0;
}
 

В моем CMakeLists.txt Я правильно настроил версию C :

 add_definitions(-std=c  17)
set(CMAKE_CXX_STANDARD 17)
set(CMAKE_CXX_FLAGS "${CMAKE_CXX_FLAGS} -std=c  17")
 

И проект компилируется и работает нормально. Но Clion показывает следующую ошибку в строке make_address:

Нет члена с именем «make_address» в пространстве имен «boost::asio::ip»

CTRL-при наведении курсора мыши на имя метода правильно отображается документ, а CTRL-щелчок правильно открывает файл заголовка.

Мы должны сделать что-то еще, чтобы сообщить Клиону, какую версию C мы используем?

Ответ №1:

Похоже, что IDE и компилятор не согласны в версии boost. Эти функции не являются специфичными для языковой версии, но я думаю, что они были представлены в относительно недавнем выпуске Boostt

Ответ №2:

Оказалось, что в системе было установлено 2 версии Boost, одна из которых поставляется с ROS (я этого не знал) и версия v1.76.0, которую я скомпилировал, чтобы получить boost::asio. Похоже, Клион использовал тот, что был старше РОС.

Удаление версии v1.76.0 в масштабах всей системы и добавление ее обратно в качестве библиотеки заголовков в проекте исправили эти ложные ошибки, хотя теперь для анализа кода Clion требуется вечность (несмотря на то, что я исключил папку libs). Использование только версии, поставляемой с ROS, было бы лучшим решением для тех, кому не нужны последние дополнения Boost (но я это делаю).