Как инициализировать частный многомерный массив - PullRequest
3 голосов
/ 04 апреля 2011

Как бы я инициализировал приватный массив, где каждая сотня элементов равняется массиву из двух элементов, например {-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 ]

5 голосов
/ 04 апреля 2011

В настоящее время это невозможно с 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()) { }
};
2 голосов
/ 04 апреля 2011

К сожалению, вы не можете инициализировать таких участников. Вы должны вручную назначить каждое значение в теле конструктора, используя std::fill (или старый добрый = и цикл).

Это изменится в C ++ 0x, однако вы сможете писать код, подобный тому, который вы опубликовали.

(Кроме того, у вас есть несоответствие в вашем вопросе. Вы объявляете массив из 10 массивов по 10 символов в каждом, но ваша попытка инициализации не имеет никакого сходства с этим вариантом использования. Не совсем понятно, что именно вы ' Я пытаюсь это сделать, но так как вам все равно придется использовать другой подход, я полагаю, что для этого ответа это не имеет значения.)

...