'constexpr' needed for in-class initialization of static data member 'const char...

2025年09月23日 19:47 响应: 3.09秒 状态: success

🚨 错误信息

/data/gerrit/workspace_NuBo_repo/IC_NuBo_Memory/components/nubo_memory/memory-mechanisms/longterm-memory/include/common/Common.hpp:31:24: error: 'constexpr' needed for in-class initialization of static data member 'const char* senseauto::sensememory::longtermmemory::Common::DATA_USER' of non-integral type [-fpermissive] 31 | static const char* DATA_USER = "UserBase"; | ^~~~~~~~~

🤖 AI解决方案

/data/gerrit/workspace_NuBo_repo/IC_NuBo_Memory/components/nubo_memory/memory-mechanisms/longterm-memory/include/common/Common.hpp:31:24: error: 'constexpr' needed for in-class initialization of static data member 'const char* senseauto::sensememory::longtermmemory::Common::DATA_USER' of non-integral type [-fpermissive]
   31 |     static const char* DATA_USER = "UserBase";
      |                        ^~~~~~~~~

原因分析

在C++中,类的静态成员变量(非整型)如果在类定义内部进行初始化,需要加上 constexpr 关键字。

解决方案

static const char* DATA_USER 的声明前添加 constexpr 关键字。

// Common.hpp
// ...
    static constexpr const char* DATA_USER = "UserBase";
// ...

预防措施

  • 对于在类定义内部初始化的 static const 成员(非整型),始终使用 constexpr
  • 遵循 C++ 标准,避免使用 -fpermissive 编译器选项,该选项会放宽对某些 C++ 标准的遵循,可能导致潜在的兼容性问题。