- 此问题在此处已有答案**:
(13个答案)
9年前关闭。
#include <iostream>
class Core;
class State;
int main() {
std::cin.get();
return 0;
}
class State {
public:
State(Core* core) {
core->setState();
}
};
class Core {
public:
Core() {
State state(this);
}
void setState() {
std::cout << "setting state" << std::endl;
}
};
我一直收到"使用未定义类型"的错误。我想如果我向前声明这两个类,它会解决这个问题,但我不能弄清楚。这只是愚蠢的c++语法,我错过了吗?
2条答案
按热度按时间vbopmzt11#
在
State::State
中,你在使用Core
之前,它实际上是被定义的。你可以在你的例子中通过将构造函数的实现移出类定义来很容易地解决这个问题:在实践中,将这些函数的实现放在一个单独的实现(
.cpp
)文件中更为常见,在这种情况下,前向声明将按预期工作。在这种情况下:
还有
和实现文件:
1cosmwyk2#
当你只需要命名时,你可以正向声明一个类型,例如,形成指针,引用,函数值参数,或者返回类型。如果你实际上使用它,例如,在函数定义中或者通过解引用指针,你需要定义。处理这个问题的方法是声明成员函数,而不是在
State
的类定义中定义它。相反,一旦看到Core
的定义,你就可以定义它