我想要一个类的私有静态常量(在本例中是一个形状工厂)。
我想要那种东西。
class A { private: static const string RECTANGLE = "rectangle"; }
不幸的是,我从 C (g) 编译器中得到了各种错误,例如:
ISO C++ 禁止初始化成员“ECTANGLE” 非整数类型“荣td::string”的静态数据成员的类内初始化无效 错误:使“楻ECTANGLE”静态
ISO C++ 禁止初始化成员“ECTANGLE”
非整数类型“荣td::string”的静态数据成员的类内初始化无效
错误:使“楻ECTANGLE”静态
这告诉我这种成员设计不符合标准。如何在不必使用#define 指令的情况下拥有私有文字常量(或者可能是公共的)(我想避免数据全局性的丑陋!)
任何帮助表示赞赏。
您必须在类定义之外定义静态成员并在那里提供初始化程序。
第一的
// 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。
const
constexpr
inline