Почему я не могу инициализировать элемент вектора в структуре при объявлении его? - PullRequest
3 голосов
/ 08 января 2012
struct comp {
    long a;
    vector<int> b(9);
    bool c;
};

Ошибка:

code.cpp:67:19: error: expected identifier before numeric constant
code.cpp:67:19: error: expected ‘,’ or ‘...’ before numeric constant

Что с этим не так? Почему g ++ не принимает, если я говорю, что b будет иметь 9 элементов?

Ответы [ 2 ]

10 голосов
/ 08 января 2012

Поскольку C ++ не работает так.

Инициализаторы идут в списке инициализатора конструктора, например,

struct comp {
    long a;
    vector<int> b;
    bool c;

    comp() : b(9) { }
};

(Обратите внимание, что класс таким образомопределено, больше не является агрегатом.)

Примечание : C ++ 11 добавляет инициализаторы членов, но только с использованием синтаксиса инициализации копирования:

struct Foo {
    int a = 5;
    vector<char> b = vector<char>(8);
};

Поддержка компилятора дляэто все еще не полностью.

0 голосов
/ 08 января 2012

vector<int> b(9); - это конкретная структура данных. Он ищет тип и метку, а не фактическую структуру данных. vector<int> b; должно быть все, что вам нужно.

...