如何在类中声明静态 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。

有什么想法吗?

在您的评论中:

不能使用枚举,因为不仅有 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放入头文件中!

最新更新