gpt4 book ai didi

c++ - 出现未定义的类类型错​​误,但我确实创建了类并定义了它

转载 作者:太空宇宙 更新时间:2023-11-03 10:36:36 27 4
gpt4 key购买 nike

我正在为我的一门课做作业。只是我有一个 GumballMachine 类和一堆改变 GumballMachine 状态的状态类。

这是有问题的代码:

class GumballMachine;

class State {
public:
virtual void insertQuarter() const = 0;
virtual void ejectQuarter() const = 0;
virtual void turnCrank() const = 0;
virtual void dispense() const = 0;

protected:
GumballMachine *GBM;
};

class NoQuarterState : public State {
public:
NoQuarterState (GumballMachine *GBM) {
this->GBM = GBM;
}

void insertQuarter() const {
cout << "You inserted a quarter\n";
**this->GBM->QuarterInserted();** // <--- C2027 error on MSDN
}
};

现在我在下面进一步定义了我的 GumballMachine 类:

class GumballMachine {
public:
GumballMachine(int numOfGB) {
this->noQuarterState = new NoQuarterState(this);
this->soldOutState = new SoldOutState(this);
this->hasQuarterState = new HasQuarterState(this);
this->soldState = new SoldState(this);
this->winnerState = new WinnerState(this);
this->count = numOfGB;
if (0 < numOfGB) {
this->state = this->noQuarterState;
}
else {
this->state = this->soldOutState;
}
}

... more code ...

void QuarterInserted() {
this->state = this->hasQuarterState;
}

... more code ...

protected:
int count;
NoQuarterState *noQuarterState;
SoldOutState *soldOutState;
HasQuarterState *hasQuarterState;
SoldState *soldState;
WinnerState *winnerState;
State *state;
};

Visual Studios 抛出 C2259 和 C2027 错误,但在查看 MSDN 后,我觉得我做对了。也许我只是累了,但我似乎找不到错误/看不到我做错了什么。

非常感谢任何帮助。 :D

最佳答案

在定义类之前,您不能访问 GumballMachine 的任何成员,因此您必须将文件分成几个文件,每个文件包含一个类,或者定义您的 NoQuarterState: :insertQuarter 方法在 GumballMachine 类的定义之后:

class NoQuarterState : public State {
public:
NoQuarterState (GumballMachine *GBM) {
this->GBM = GBM;
}

void insertQuarter() const; // Declaration only
};

class GumballMachine {
public:
...
};

void NoQuarterState::insertQuarter() const {
cout << "You inserted a quarter\n";
this->GBM->QuarterInserted(); // Works now bec. comp. has seen the def.
}

关于c++ - 出现未定义的类类型错​​误,但我确实创建了类并定义了它,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2250408/

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