2017-09-15 99 views
0

所以我試圖打印一個簡單的矢量的內容,但我得到一個奇怪的錯誤。這裏是代碼:矢量內容將不會打印

srand(time(NULL)); 

for (int i = 0; i < 7; i++){ 
    AIhand[i] = deck[rand() % deck.size()]; 
    cout << AIhand[i] << endl; 
} 

'甲板'是一個卡類(這是一個紙牌遊戲)的載體。 錯誤來自cout行中的第一個'< <'。 Visual Studio說「沒有操作符」< <「匹配這些操作數 - 操作數類型是:std :: ostream < < Card」。我將這個帖子作爲一個新問題發佈,因爲我已經包含了<string>,<iostream>using namespace std;,這些是人們無法打印矢量的常見問題。

據我可以告訴我的語法是正確的,但我相對較新的C++,所以它可能只是用戶錯誤。

在此先感謝!

編輯:這裏的卡類的頭文件:

#ifndef CARD_H_ 
#define CARD_H_ 

#include <string> 
#include <iostream> 
#include <ostream> 
#include <vector> 
using namespace std; 

class Card { 
public: 
    Card(string newSuit, int newValue); 
    string showCard(); 

private: 
    int cardValue; 
    string cardSuit; 
}; 


#endif CARD_H_ 

這裏的卡.cpp文件:

#include "Card.h" 
#include <sstream> 
#include <iostream> 
#include <ostream> 

Card::Card(string newSuit, int newValue) { 

    cardValue = newValue; 

    cardSuit = newSuit; 

} 

string Card::showCard(){ 

    stringstream card; 

    card << cardValue << " of " << cardSuit << endl; 

    return card.str(); 
} 

這是甲板

vector<Card> deck; 

    for (int i = 0; i < 56; i++){ 
     for (int j = 0; j < 14; j++) { 
      Card cuccos("Cuccos", j); 
      deck.push_back(cuccos); 
     } 
     for (int j = 0; j < 14; j++){ 
      Card loftwings("Loftwings", j); 
      deck.push_back(loftwings); 
     } 
     for (int j = 0; j < 14; j++){ 
      Card bullbos("Bullbos", j); 
      deck.push_back(bullbos); 
     } 
     for (int j = 0; j < 14; j++){ 
      Card skulltulas("Skulltulas", j); 
      deck.push_back(skulltulas); 
     } 

    } 
+1

[C類++打印功能(可能的重複https://stackoverflow.com/questions/23239646/print- function-for-class-c) –

+1

是否爲類** AIhand **定義了** <<操作符**? –

+0

@ΦXocę웃Пepeúpaツ我已經在卡類中定義了ostream和iostream,AIhand矢量使用 – marina

回答

1

既然你是比較新的C++,我覺得在commen中有一個誤區TS

我的ostream和iostream的在卡類定義的AIhand矢量使用 [...],但它似乎並沒有作出了區別

別人問的是,無論您是否爲Card類定義了自定義ostream operator <<。你的回答是,你已經包含了ostreamiostream標題。

簡單的解決方案:嘗試打印文本,而不是你的Card類:

cout << AIhand[i].showCard() << endl; 

更復雜的解決方案:告知自己如何重載operator <<您的卡類。

看到那些相關的問題的詳細資料:

Print function for class c++

How to properly overload the << operator for an ostream?