向量的内容不会打印

c++ vector

68 观看

1回复

3 作者的声誉

所以我试图只打印一个简单矢量的内容,但是却出现了一个奇怪的错误。这是代码:

srand(time(NULL));

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

'deck'是Card类的矢量(用于纸牌游戏)。错误来自cout行中的第一个“ <<”。Visual Studio说“没有运算符“ <<”匹配这些操作数-操作数类型为:std :: ostream <<string>,<iostream>using namespace std;,这些是人们无法打印矢量的常见解决方案。

据我所知,我的语法是正确的,但是我对C ++还是比较陌生,因此可能只是用户错误。

提前致谢!

编辑:这是Card类头文件:

#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_

这是Card .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);
        }

    }
作者: marina 的来源 发布者: 2017 年 9 月 15 日

回应 1


1

10743 作者的声誉

决定

由于您是C ++的新手,所以我认为注释中存在误解

我在Card类中定义了ostream和iostream,AIhand向量使用了[...],但似乎没有什么不同

其他人问的是,是否operator <<Card该类定义了自定义的ostream 。您的回答是,您已包含ostreamiostream标头。

简单的解决方案:尝试打印文本而不是您的Card课:

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

更复杂的解决方案:告知自己如何operator <<为您的卡类重载。

有关更多信息,请参见那些相关问题:

C ++类的打印功能

如何正确重载<<运算符以进行ostream?

作者: grek40 发布者: 2017 年 9 月 15 日
32x32