如何在类中声明静态const结构元素

时间:2017-06-09 15:43:40

标签: c++ struct const

在一个类中,我想声明一个带有一些变量的结构。变量都是常量。

相关代码如下:

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可用。

有什么想法吗?

2 个答案:

答案 0 :(得分:1)

your comment中:

  

不能使用枚举,因为不仅有int数据类型

您正在引用前 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放入头文件中!