Ошибки вложенных векторов <> в векторах <> - PullRequest
4 голосов
/ 14 мая 2011

У меня проблема с вложением векторов в векторы, эквивалент двухмерного массива в C. Я пробовал код, демонстрирующий это, размещенный на многочисленных сайтах, но безрезультатно.

class Board
{
    public:
        vector< vector<Cell> > boardVect; //Decalre the parent vector as a memebr of the Board class    

        Board()
        {
            boardVect(3, vector<Cell>(3)); //Populate the vector with 3 sets of cell vectors, which contain 3 cells each, effectivly creating a 3x3 grid. 

        }
};

Когда я пытаюсь скомпилировать, я получаю эту ошибку:

F: \ main.cpp | 52 | error: нет совпадения для вызова '(std :: vector>)(int, std :: vector) '

Строка 52: boardVect(3, vector<Cell>(3));

Ошибка при получении родительского вектора с тремя классами векторов?

1 Ответ

12 голосов
/ 14 мая 2011

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

Board()
    :boardVect(3, vector<Cell>(3))
{}

Как только вы ввели тело конструктора, уже слишком поздно, все члены уже созданы, и вы можете вызывать только функции-члены, не являющиеся конструкторами. Конечно, вы можете сделать это:

Board()
{
    boardVect = vector<vector<Cell> >(3, vector<Cell>(3));
}

Но список инициализации предпочтителен.

...