【问题标题】:CLion C++17 boost: No member named xxx in namespaceCLion C++17 boost:命名空间中没有名为 xxx 的成员
【发布时间】:2021-05-28 23:17:54
【问题描述】:

我正在 Clion 2018.3 中设置一个 C++17 + boost 1.76.0 项目,使用以下最少的代码:

#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 行显示以下错误:

命名空间“boost::asio::ip”中没有名为“make_address”的成员

CTRL-hover 方法名正确显示文档,CTRL-click 正确打开头文件。

我们是否应该做其他事情来告诉 Clion 我们正在使用哪个 C++ 版本?

【问题讨论】:

    标签: c++ boost clion


    【解决方案1】:

    似乎 IDE 和编译器在 boost 版本中不一致。这些函数不是特定于语言版本的,但我认为是在相对较新的 Boostt 版本中引入的

    【讨论】:

      【解决方案2】:

      原来我在系统上安装了 2 个 Boost 版本,一个带有 ROS(我不知道)和 v1.76.0,我编译它以获得 boost::asio。看起来 Clion 使用的是旧版本的 ROS。

      在系统范围内卸载 v1.76.0 并将其作为头库添加回项目中修复了这些错误错误,尽管 Clion 现在需要永远分析代码(尽管我排除了 libs 文件夹)。仅使用 ROS 附带的版本对于不需要最新 Boost 的人来说是最好的解决方案(但我确实需要)。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2017-02-13
        • 2012-06-12
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2022-01-12
        相关资源
        最近更新 更多