【问题标题】:const array class member initialization [duplicate]const数组类成员初始化[重复]
【发布时间】:2012-11-30 12:43:43
【问题描述】:

如何初始化常量整数数组类成员?我认为在同样的情况下,经典数组不是最佳选择,我应该使用什么来代替它?

class GameInstance{
    enum Signs{
        NUM_SIGNS = 3;
    };
    const int gameRulesTable[NUM_SIGNS][NUM_SIGNS]; //  how to init it?
public:
    explicit GameInstance():gameRulesTable(){};
};

【问题讨论】:

  • 感谢您的评论,我查看了这个问题,但这些问题在 2008 年得到了回答,并且有一些关于可能的新标准功能的讨论,在 2011 年晚些时候被接受。
  • 该问题中有 C++11 的答案。
  • @vard 这是 Flexo 的答案。

标签: c++ arrays initialization


【解决方案1】:

在 C++11 中,您可以在初始化列表中初始化 const 数组成员

class Widget {
public:
  Widget(): data {1, 2, 3, 4, 5} {}
private:
  const int data[5];
};

class Widget {
    public:
      Widget(): data ({1, 2, 3, 4, 5}) {}
    private:
      const int data[5];
    };

有用的链接:http://www.informit.com/articles/article.aspx?p=1852519

http://allanmcrae.com/2012/06/c11-part-5-initialization/

【讨论】:

    【解决方案2】:

    让它成为静态的?

    class GameInstance{
        enum Signs{
            NUM_SIGNS = 3};
        static const int gameRulesTable[2][2];
    public:
        explicit GameInstance(){};
    };
    
    ...in your cpp file you would add:
    const int GameInstance::gameRulesTable[2][2] = {{1,2},{3,4}};
    

    【讨论】:

    • 不幸的是我的编译器不允许这样做。他说有多个数组声明。
    • @vard 'const int GameInstance::gameRulesTable[2][2] = {{1,2},{3,4}};' - 这应该在一个 .cpp 文件中。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2013-07-12
    • 1970-01-01
    • 2015-10-09
    相关资源
    最近更新 更多