'constexpr' needed for in-class initialization of static data member 'const char...
🚨 错误信息
/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++ 标准的遵循,可能导致潜在的兼容性问题。