0

次のエラーでクラスHandの構造体メンバーにアクセスしようとしています:エラー:C2228:'.colorBet'の左側にはclass/ struct/unionが必要です

hand.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ではないため違法です(メンバーを持つことは論理的な決定であるべきであり、コードをコンパイルするために行うことではありません)。staticstatic

たとえば、どの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 に答える