#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++ 语法吗?
编辑:对不起,游戏状态错字,我已将其更改为状态,它仍然会产生错误。
最佳答案
在State::State
中,您在实际定义之前使用Core
。通过将构造函数实现移出类定义,您可以在示例中轻松解决此问题:
class State{
public:
State(Core* core);
};
class Core{
// This stays the same...
};
State::State(Core* core)
{
core->setState();
}
在实践中,将这些函数的实现放在单独的实现 (.cpp
) 文件中更为常见,在这种情况下,前向声明将按您的预期工作。
在这种情况下:
// State.h
class Core;
class State{
public:
State(Core* core);
};
和
// Core.h
#include "State.h"
#include <iostream> //This is probably a good reason to further separate
//Core.h into Core.h and Core.cpp
class Core{
public:
Core(){
State state(this);
}
void setState(){
std::cout << "setting state" << std::endl;
}
};
以及实现文件:
// State.cpp
#include "State.h"
#include "Core.h"
State::State(Core* core)
{
core->setState();
}
关于c++ - 使用未定义类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18284678/