0

尝试访问 Hand 类中的结构成员,但出现以下错误:错误:C2228:'.colorBet' 左侧必须有类/结构/联合

手.h

    #ifndef HAND_H
#define HAND_H

#include"deck.h"
#include <QVector>
#include <QString>

struct street
{
    QString colorBet;
    int colorBetSize;
    int payout;
};

class Hand
{
    QVector<card> cardVector;

public:

    Hand(QVector<card> vCards);

    bool isFlush();
    bool isAllRed();
    bool isAllBlack();

    street street1;
    street street2;
    street street3;

};

#endif // HAND_H

mainwindow.cpp(底部附近的错误)

#include "mainwindow.h"
#include "ui_mainwindow.h"
#include "hand.h"

MainWindow::MainWindow(QWidget *parent) :
    QMainWindow(parent),
    ui(new Ui::MainWindow)
{
    ui->setupUi(this);
}

MainWindow::~MainWindow()
{
    delete ui;
}

void MainWindow::build_radios(){
    street1BetBlack = new QRadioButton("Black");
    connect(street1BetBlack, SIGNAL(clicked()),
              this, SLOT(street1BetBlackClicked()));
    street2BetBlack = new QRadioButton("Black");
    connect(street2BetBlack, SIGNAL(clicked()),
              this, SLOT(street2BetBlackClicked()));
    street3BetBlack = new QRadioButton("Black");
    connect(street3BetBlack, SIGNAL(clicked()),
              this, SLOT(street3BetBlackClicked()));


    street1BetRed = new QRadioButton("Red");
    connect(street1BetRed, SIGNAL(clicked()),
              this, SLOT(street1BetRedClicked()));
    street2BetRed = new QRadioButton("Red");
    connect(street2BetRed, SIGNAL(clicked()),
              this, SLOT(street2BetRedClicked()));
    street3BetRed = new QRadioButton("Red");
    connect(street3BetRed, SIGNAL(clicked()),
              this, SLOT(street3BetRedClicked()));

    st1bg = new QButtonGroup;
    st2bg = new QButtonGroup;
    st3bg = new QButtonGroup;


    // button groups
    st1bg->addButton(street1BetBlack);
    st1bg->addButton(street1BetRed);
    st1bg->setExclusive(true);

    st2bg->addButton(street2BetBlack);
    st2bg->addButton(street2BetRed);
    st2bg->setExclusive(true);

    st3bg->addButton(street3BetBlack);
    st3bg->addButton(street3BetRed);
    st3bg->setExclusive(true);


}
void MainWindow::street1BetRedClicked()
{
    Hand::street1.colorBet="Red";        //error on every line similar to this
}
void MainWindow::street2BetRedClicked()
{
    Hand::street2.colorBet="Red";
}
void MainWindow::street3BetRedClicked()
{
    Hand::street3.colorBet="Red";
}
void MainWindow::street1BetBlackClicked()
{
    Hand::street1.colorBet="Black";
}
void MainWindow::street2BetBlackClicked()
{
    Hand::street2.colorBet="Black";
}
void MainWindow::street3BetBlackClicked()
{
    Hand::street3.colorBet="Black";
}
4

3 回答 3

2

Hand::street1.colorBet="Red";&其他人是非法的,因为Hand::street1它不是static类成员(我不是说它应该,拥有static成员应该是一个逻辑决定,而不是你为了使代码编译而做的事情)。

Hand例如,您试图修改什么对象street1BetRedClicked?你有对象 Hand吗?你需要什么Hand物品吗?你用那种方法创建它们吗?外部?

我指出了错误,但在我看来,这里的重要问题不是代码无法编译,而是:

  1. 您似乎对 C++ 没有牢牢掌握,也许您应该从更简单的东西开始。

  2. 您没有明确的逻辑设置。

于 2013-01-01T20:43:00.010 回答
1

当你street1这样访问时,street1应该是Hand.

如果每个都Hand可以有自己的street1对象,您应该访问对象的street1字段而不是静态字段。如果您希望 的所有实例Hand共享相同的street1,则应设为street1静态。

您不了解这些概念并且通过阅读您的其他问题(示例),我可以看出您对 C++ 的了解不足以编写这个程序。我建议你在开始自己的项目之前先阅读一本关于 C++ 的书或以其他方式学习 C++。

例子:

Hand hand1 = getRandomHand();
Hand hand2 = getRandomHand();

hand1.street1.colorBet="Red";
hand2.street1.colorBet="Black";
于 2013-01-01T21:07:39.033 回答
0

你必须声明一个 Hand 类型的对象:

Hand hand;
hand.street1;
...

您还可以将街道字段声明为静态。

于 2013-01-01T20:38:26.637 回答