เอาท์พุตเวกเตอร์หลายมิติของวัตถุ

ดังนั้นฉันจึงพยายามพิมพ์เนื้อหาของเวกเตอร์ที่ฉันกำลังสร้าง โดยพื้นฐานแล้วฉันกำลังพยายามส่งออกผู้เล่นซึ่งจะเป็น int (เช่น 1-4) และมือของผู้เล่นซึ่งประกอบด้วยวัตถุไพ่ ตัวอย่างเช่น ฉันกำลังพยายามทำให้ถึงจุดที่ newPlayerHand[1][1] จะให้ "Ace of Spades" แก่ฉัน และ newPlayerHand[1][2] จะส่งออก "Jack of Clubs"

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