gpt4 book ai didi

c++ - 在 for 循环中打印时,C++ 卡片 vector 中的某些信息未打印出来?

转载 作者:行者123 更新时间:2023-11-30 04:11:09 25 4
gpt4 key购买 nike

我正在为 C++ 类开发 Black Jack 模拟器。这些是我正在使用 C++11 进行编译的相关类/结构:

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

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

输出:

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 ... 10 表示 Jacks、Queens、Kings 和 11 表示 acecards。如果需要更多信息,请询问。感谢您的帮助!!!!

cards tostring suites tostring facecards tostring acecards tostring

Card、Suite、FaceCard、AceCard 的构造函数: card constructor suite ctor facecard ctor acecard ctor

最佳答案

问题是 Card_suite 数据成员是 const Suite &。如果你将类型更改为 const Suite,我想您会得到想要的行为。

当你像这样构造一个新的Card时,

deck.push_back(new Casino::Card(2, Casino::Card::Suite::CLUBS);

请注意,将根据您的枚举值 CLUBS 构造一个临时的 Suite 对象。该临时对象的生命周期仅在您的构造函数内,因此您必须将其复制或移动到您的 Card 对象中。否则,_suite 仅引用可以被其他内容覆盖的内存位置。

关于c++ - 在 for 循环中打印时,C++ 卡片 vector 中的某些信息未打印出来?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20305975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com