小编典典

静态常量字符串(类成员)

all

我想要一个类的私有静态常量(在本例中是一个形状工厂)。

我想要那种东西。

class A {
   private:
      static const string RECTANGLE = "rectangle";
}

不幸的是,我从 C (g) 编译器中得到了各种错误,例如:

ISO C++ 禁止初始化成员“ECTANGLE”

非整数类型“荣td::string”的静态数据成员的类内初始化无效

错误:使“楻ECTANGLE”静态

这告诉我这种成员设计不符合标准。如何在不必使用#define 指令的情况下拥有私有文字常量(或者可能是公共的)(我想避免数据全局性的丑陋!)

任何帮助表示赞赏。


阅读 163

收藏
2022-03-13

共1个答案

小编典典

您必须在类定义之外定义静态成员并在那里提供初始化程序。

第一的

// In a header file (if it is in a header file in your case)
class A {   
private:      
  static const string RECTANGLE;
};

然后

// In one of the implementation files
const string A::RECTANGLE = "rectangle";

您最初尝试使用的语法(类定义中的初始化程序)仅允许用于整数和枚举类型。


从 C++17 开始,您有另一个选项,它与您的原始声明非常相似:内联变量

// In a header file (if it is in a header file in your case)
class A {   
private:      
  inline static const string RECTANGLE = "rectangle";
};

不需要额外的定义。

从 C++20
开始,您可以在此变体const中声明它。constexprExplicitinline将不再是必要的,因为constexpr这意味着inline

2022-03-13