在一个类中,我想声明一个带有一些变量的结构。变量都是常量。
相关代码如下:
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可用。
有什么想法吗?
答案 0 :(得分:1)
在your comment中:
不能使用枚举,因为不仅有int数据类型
您正在引用前c++11 static const
初始化只能发生的事实:
使用整数或枚举类型,并且初始化表达式必须是可以在编译时计算的表达式 [1]
现在,因此GLOBALS
成员在实现文件之前无法初始化。因此,使用GLOBALS
就好像它被初始化一样不起作用。相反,您可以在没有初始化对象的情况下引用static const
类型的globals
成员。所以你应该成为:
std::string s[globals::MAX_MOTORS];
答案 1 :(得分:0)
您的代码绝对可以使用! 我正在使用GCC 4.9.2并尝试过它。
但正如Jonathan Mee在评论中指出的那样: 如果您使用的是C ++ 11以下的任何版本,则只会内联初始化静态const整数。由于全局变量是一个结构,这是一个问题。我建议您将代码更改为以下内容:
class DataStructure
{
private:
static const int MAX_MOTORS = 8;
public:
std::string s[MAX_MOTORS];
}
您也可以将MAX_MOTORS放入头文件中!