синтаксическая ошибка с вектором векторов - PullRequest
0 голосов
/ 13 ноября 2018

Я прочитал статью Инициализация вектора векторов, имеющих фиксированный размер, с назначением форсирования , который должен точно соответствовать моим требованиям: инициализация матричного вектора, который можно произвольно расширить в обоих направлениях (Я хочу использовать его для извлечения и группировки выбора значений из большего списка).

Однако решение, данное в первых 2 ответах

    vector<vector<int>> v(10, vector<int>(10,1));        

, вызывает синтаксическую ошибку вмой CDT_eclipse и следующая ошибка от моего компилятора:

     error: expected identifier before numeric constant
     vector <vector <int> > v(10, vector <int>(10,1));

-

Версия, найденная в векторно-специфическом синтаксисе , работает для моего затмения:

     vector<vector<int>> v = vector<vector<int>>(n, vector<int>(n, 0));        

Однако, мой компилятор выдает предупреждение:

    vector warning: non-static data member initializers only available with -std=c++11 or -std=gnu++11  [...]

Изменение версии компилятора (gcc 5.4.0 20160609 для Ubuntu 5.4.0-6ubuntu1 ~ 16.04.10) невозможнов большой схеме, где мой код должен использоваться.Поэтому мне нужна совместимая формулировка упомянутой выше команды.Большое спасибо!

РЕДАКТИРОВАТЬ: две мои основные попытки выглядели так:

    vector <vector <int> > v(10, vector <int>(10,1));   --> syntax error
    vector <vector<int> > v = vector <vector<int> >(1, vector<int>(1, 0));   --> compiler error

1 Ответ

0 голосов
/ 13 ноября 2018

Я предполагаю, что вы забыли сообщить нам, что пытаетесь объявить элемент данных для класса. Итак, вы действительно пытаетесь скомпилировать что-то вроде:

struct A {
    vector <vector <int> > v(10, vector <int>(10,1));       
};

и

struct A {
    vector <vector<int> > v = vector <vector<int> >(1, vector<int>(1, 0));
};

Член данных может быть инициализирован только в определении класса знаком равенства или фигурными скобками. Инициализация с круглыми скобками не допускается.

Попробуйте:

struct A {
    vector<vector<int>> v{10, vector<int>(10,1)};        
};

В любом случае вам нужен по крайней мере C ++ 11 для инициализации фигурной скобки, а также инициализации нестатического члена в объявлении (ваша вторая ошибка, где вы используете равенства вместо скобок, но со старым стандартом C ++).

...