在一个类中,我想声明一个带有一些变量的结构。变量都是常量。
相关代码如下:
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放入头文件中!