在for循环中打印出来时,C ++ Vector of Cards中的一些信息不打印出来?

时间:2013-11-30 21:40:46

标签: c++ stdvector

我正在为一个C ++类的Black Jack模拟器工作。这些是我在c ++ 11中编译的相关类/结构:

类DeckFactory :使用名为GetDeck()的静态方法返回一个包含52张卡片的向量。
类卡:在名称空间Casino中定义的类,表示卡,而Ptr是卡的公共成员,是typedef卡*。
类struct Suite :在Card中定义的类,也用于声明Card的成员,如下所示Suite const& _suite。
枚举SuiteType :在类struct Suite中定义的枚举。它有四个成员CLUBS,DIAMONDS,HEARTS,SPADES class FaceCard :一个Card的子类,其FaceRank成员声明如下:FaceRank const _rank。
枚举类FaceRank :拥有以下成员JACK,QUEEN,KING 类AceCard :卡的子类。

问题:当我创建一个套牌并在DeckFactory类的GetDeck()方法中填充52张牌时,一切正常并返回。然而,当我打印出矢量中每个对象的信息时,它不打印出每个对象的完整信息,实际上它看起来好像有些卡被添加了两次,这很奇怪,因为每张卡必须是唯一的,我手动添加了唯一的卡片给方法GetDeck()中的套牌。这是输出,下面是向量组打印中涉及的每个类的相关代码。

输出

code output

主要方法

main() code

DeckFactory GetDeck()方法1 part of GetDeck()

2nd part of GetDeck()

分别为Card,Suite,FaceCard和AceCard的 ToString方法: 变量_suite是Card和Suite类型的成员。 Rank()是一种方法,它只检索卡片2,3,4 ...的等级,用于插孔,皇后,国王和11用于acecards。 如果需要更多信息,请询问。谢谢你的帮助!!!!

cards tostring suites tostring facecards tostring acecards tostring

Card,Suite,FaceCard,AceCard的构造商card constructor suite ctor facecard ctor acecard ctor

1 个答案:

答案 0 :(得分:2)

问题是_suite的{​​{1}}数据成员是Card。如果你 将类型更改为const Suite &,我怀疑你会得到你想要的行为。

当你像这样构建一个新的const Suite时,

Card

请注意,将根据您的枚举值deck.push_back(new Casino::Card(2, Casino::Card::Suite::CLUBS);构建一个临时Suite对象。临时对象的生命周期仅在您的构造函数中,因此您必须将其复制或移动到CLUBS对象中。否则,Card仅指代可以用其他内容覆盖的内存位置。