Инициализация значений для двухмерных векторов во время объявления - PullRequest
3 голосов
/ 17 февраля 2012

Я объявил свой двумерный массив следующим образом. Но получаю ошибку из-за этого

vector <vector <int> > plain(vector <int>(4,0))  = {{23,43,45,56},
                                                    {67,85,13,59},
                                                    {48,23,9,57},
                                                    {24,52,90,12}};


rijndael.cpp:12:51: error: expected ‘,’ or ‘;’ before ‘=’ token
rijndael.cpp:57:1: error: expected ‘}’ at end of input

Все предыдущие точки с запятой были правильно назначены. Можете ли вы сказать мне, где я иду не так в этой декларации?

Я удалил вызов конструктора, и теперь мое объявление

vector <vector <int> > plain/*(vector <int>(4,0))*/  = {{23,43,45,56},
                                                        {67,85,13,59},
                                                        {48,23,9,57},
                                                        {24,52,90,12}};

Но ошибка сейчас

rijndael.cpp:15:19: error: in C++98 ‘plain’ must be initialized by constructor, not by ‘{...}’
rijndael.cpp:15:19: error: deducing from brace-enclosed initializer list requires #include <initializer_list>
rijndael.cpp:15:19: error: deducing from brace-enclosed initializer list requires #include <initializer_list>
rijndael.cpp:15:19: warning: extended initializer lists only available with -std=c++0x or -std=gnu++0x
rijndael.cpp:15:19: error: could not convert ‘{{23, 43, 45, 56}, {67, 85, 13, 59}, {48, 23, 9, 57}, {24, 52, 90, 12}}’ to ‘std::vector<std::vector<int> >’

Как мне исправить это? Любая помощь очень ценится.

Ответы [ 2 ]

3 голосов
/ 17 февраля 2012

Вы не можете иметь оба вызова конструктора и инициализации списка, придерживайтесь одного, например:

vector<vector<int>> plain{{23,43,45,56},
                             {67,85,13,59},
                             {48,23,9,57},
                             {24,52,90,12}};

(Вы можете опустить = для инициализации списка.)

Относительно вашего редактирования: Ну, ошибка объясняет все это, чтение поможет.Вам нужен режим C ++ 11 для инициализации списка.Если вы этого не хотите, вам придется скопировать ctor, чтобы подготовить 2D-массив, а затем заполнить его после построения.

2 голосов
/ 17 февраля 2012

попробуйте вызвать конструктор явно с аргументами.

...