Выходной многомерный вектор объектов

Итак, я пытаюсь просто распечатать содержимое вектора, который я создаю. По сути, я пытаюсь вывести игрока, который будет int (т.е. 1-4), и руку игрока, состоящую из объектов Card. Так, например, я пытаюсь сделать так, чтобы newPlayerHand[1][1] выдавал мне «Пиковый туз», а newPlayerHand[1][2] выдавал «Валет треф».

void Blackjack::deal()
{
// create a new hand
vector < vector < Card >> newPlayerHand;

for (int i = 0; i < numPlayers; i++) 
{
    vector < Card > player; // Create an empty row
        for (int j = 0; j < 2; j++) {
            player.push_back(dealCard()); // Add an element(column) 
                                          // to the row
           newPlayerHand.push_back(player); // Add the row to the main vector'
           cout << newPlayerHand[i][j];
        }

}
}

Вышеприведенный код выглядит и звучит логически правильно для меня, но он дает мне ошибку «Нет такого оператора ‹‹», когда я пытаюсь

cout << newPlayerHand[i];

Буду очень признателен за любые советы или подсказки о том, где я ошибаюсь.

Итак, я отредактировал его, чтобы учесть оператор ostream, но, похоже, я все еще получаю сообщение об ошибке для неразрешенного внешнего. (basic_ostream)

template<typename T>
ostream& operator<<(ostream& os, const vector<T>& v)
{
    copy(v.begin(), v.end(), std::ostream_iterator<T>(std::cout, " ")); 
 return os;
}

person Barry Tormey    schedule 29.04.2013    source источник


Ответы (1)


Ваша проблема не с Векторами. Это с этой строкой кода.

cout << newPlayerHand[i][j];

Когда вы выполняете вышеуказанный шаг, объект для вывода имеет тип карты данных. Оператор ostream "‹‹" умеет отображать базовые типы данных, а не типы данных, созданные нами. Поэтому предоставьте ему надлежащие структуры для вывода значения типа данных карты, и вы можете продолжить.

person csurfer    schedule 29.04.2013