如何在头文件中声明静态 const char\*?

新手上路,请多包涵

我想在我的头文件中定义一个常量 char* 供我的 .cpp 文件使用。所以我试过这个:

 private:
    static const char *SOMETHING = "sommething";

这给我带来了以下编译器错误:

错误 C2864:“SomeClass::SOMETHING”:只能在类中初始化静态 const 整数数据成员

我是 C++ 新手。这里发生了什么?为什么这是非法的?你怎么能这样做呢?

原文由 Mark 发布,翻译遵循 CC BY-SA 4.0 许可协议

阅读 1k
2 个回答

注意:自 C++11 以来这已经发生了变化,请阅读其他答案

您需要在翻译单元中定义静态变量,除非它们是整数类型。

在您的标题中:

 private:
    static const char *SOMETHING;
    static const int MyInt = 8; // would be ok

在 .cpp 文件中:

 const char *YourClass::SOMETHING = "something";

C++ 标准,9.4.2/4:

如果静态数据成员是 const 整型或 const 枚举类型,它在类定义中的声明可以指定一个常量初始化器,它应该是一个整型常量表达式。在这种情况下,成员可以出现在其范围内的整数常量表达式中。如果在程序中使用该成员,则该成员仍应在名称空间范围内定义,并且名称空间范围定义不应包含初始值设定项。

原文由 KeatsPeeks 发布,翻译遵循 CC BY-SA 4.0 许可协议

使用 C++11,您可以使用 constexpr 关键字并在标题中写入:

 private:
    static constexpr const char* SOMETHING = "something";

笔记:

  • constexpr 使 SOMETHING 一个常量指针,所以你不能写
  SOMETHING = "something different";

稍后的。

  • 根据您的编译器,您可能还需要在 .cpp 文件中编写显式定义:
   constexpr const char* MyClass::SOMETHING;

原文由 Ignitor 发布,翻译遵循 CC BY-SA 3.0 许可协议

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题