如何初始化私有多维数组

时间:2011-04-03 22:09:38

标签: c++ class multidimensional-array initialization private

我如何初始化一个私有数组,其中每一百个项目都等于一个两项目数组,例如{-1, 0}。我的代码显然不起作用,因为我问你们所有人。

example.h文件:

#ifndef EXAMPLE
#define EXAMPLE

class Example {
private:
    char grid[10][10];
public:
    Example();
};

#endif

example.cpp:

#include "example.h"
#include <iostream>

Example::Example() : grid({-1, 0}) {}

2 个答案:

答案 0 :(得分:5)

C ++目前无法实现这一目标。在C ++ 0x中,可以使用大括号,例如

Example::Example() : grid{{-1, 0}} {}

目前,您可以将该数组包装在一个类中,而不会造成任何性能损失(该数组仍将是一个普通的原生多维数组)

class Example {
private:
    struct data {
      char grid[10][10];
      static data newData() {
        data d = {{
          { -1, 0 }, { -2, 1 } /* ... */
        }};
        return d;
      }
    } d;

public:
    Example() : d(data::newData()) { }
};

答案 1 :(得分:2)

很遗憾,您无法初始化此类成员。您必须使用std::fill(或旧的=和循环)手动分配构造函数体中的每个值。

但是,这将在C ++ 0x中发生变化,您可以在其中编写代码,就像您发布的代码一样。

(另外,你的问题不匹配。你声明了一个由10个数组组成的数组,每个数组包含10个字符,但是你的初始化尝试与那个用例没有任何相似之处。它真的不清楚你到底是什么重新尝试,但由于你不得不使用不同的方法,我认为这对于这个答案并不重要。)