如何在类中声明静态 const 结构元素
How to declare static const struct elements inside a class
在一个类中,我想声明一个带有一些变量的结构。变量都是常量。
相关代码如下:
class DataStructure
{
struct globals
{
//some other data types
static const int MAX_MOTORS = 8;
}static const GLOBALS;
public:
std::string s[GLOBALS.MAX_MOTORS];
}
该结构的作用是保持一些类变量井井有条,并使它们在类中可用。
但是我仍然没有得到一个常量值,因为我面临以下错误:
error: array bound is not an integer constant before ']' token std::string s[GLOBALS.MAX_MOTORS];
目前没有可用的 C++11。
有什么想法吗?
在您的评论中:
不能使用枚举,因为不仅有 int 数据类型
您引用的是 c++11 之前的static const
初始化只能发生的事实:
使用整型或枚举类型,并且初始值设定项表达式必须是可以在编译时计算的表达式 [1]
现在,因此,在实现文件之前无法初始化GLOBALS
成员。因此,使用GLOBALS
就像初始化一样是行不通的。相反,您可以引用 globals
类型的static const
成员,而无需初始化的对象。所以你的行应该变成:
std::string s[globals::MAX_MOTORS];
你的代码绝对应该有效!我正在使用GCC 4.9.2并尝试过。
但正如乔纳森·我在评论中已经指出的那样:如果您使用的是低于 C++11 的任何版本,则只有静态 const 整数将被内联初始化。由于全局变量是一个结构体,这是一个问题。我建议将代码更改为以下内容:
class DataStructure
{
private:
static const int MAX_MOTORS = 8;
public:
std::string s[MAX_MOTORS];
}
您也可以将MAX_MOTORS放入头文件中!
相关文章:
- 初始化类中的静态 const 数组 - C++
- c++ 是否保证标头初始化的静态 const 成员跨编译单元和库共享单个实例?
- 匿名命名空间中的const与静态const
- 内联初始化的静态 const 类成员的初始化顺序保证
- 是否可以按模板类型更改静态 const 类成员的值
- 如何在类中声明静态 const 结构元素
- 与其他静态const成员初始化静态常量成员
- 如何在预处理器 (#if) 中强制转换静态 const 以避免溢出
- 使用模板参数初始化静态 const 成员
- 为什么将FMTFLAG指定两次 - 作为枚举的一部分,而另一个实例为静态const变量
- 将整数值分配为variadic模板列表到静态const std ::数组成员
- 静态const数据成员在另一个文件中定义
- 初始化在 C++ 中自定义类的构造函数中没有参数的静态 const 类成员
- 将静态 const 成员重新声明为 constexpr 是否会自动使其符合内联条件
- constexpr vs.静态const:哪个更喜欢
- 静态const颜色无法与Allegro5完全合作
- 模板类中的不可复制静态 const 成员类
- 编组静态const char*从C 到C#
- 枚举和静态const成员变量在模板特征类中的用法
- 在性能和内存使用方面,“静态const”,“ #define”和“枚举”之间的差异