尝试使用以下错误访问类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";
}
答案 0 :(得分:2)
Hand::street1.colorBet="Red";
&amp;其他人都是非法的,因为Hand::street1
不是static
类成员(我不是说它应该,static
成员应该是一个逻辑决定,而不是你做的事情代码编译)。
您尝试修改哪个Hand
对象,例如street1BetRedClicked
?你有任何 Hand
个对象吗?您需要任何Hand
个对象吗?你用那种方法创造它们吗?外?
我指出了错误,但在我看来,这里的重要问题不是代码不能编译的事实,而是:
你似乎对C ++没有把握,也许你应该从简单的事情开始。
您没有明确的逻辑设置。
答案 1 :(得分:1)
当你像这样访问street1
时,street1
应该是Hand
的静态字段。
如果每个Hand
都有自己的street1
对象,则应该访问对象的street1
字段而不是静态字段。
如果您希望Hand
的所有实例共享相同的street1
,则应将street1
设为静态。
你不理解这些概念,并且从阅读你的其他问题(example),我可以说你不完全了解C ++来编写这个程序。在你开始自己的项目之前,我建议你先阅读一本关于C ++的书或以其他方式学习C ++。
示例:
Hand hand1 = getRandomHand();
Hand hand2 = getRandomHand();
hand1.street1.colorBet="Red";
hand2.street1.colorBet="Black";
答案 2 :(得分:0)
您必须声明Hand类型的对象:
Hand hand;
hand.street1;
...
您也可以将街道字段声明为静态。