c++ - 使用未定义类型

标签 c++

#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/

相关文章:

c++ - 是否有可能从内部(它们是嵌套的)到达外部 QML Repeater 的索引?

C++ 将指针传递给函数

c++ - 在 Clang 中使用 MSVC 预处理器 'charizing' 运算符

c++ - 为什么要使用 const 成员函数?

c++ - Direct2D如何打开共享纹理

c++ - linux/unix 下是否有相当于 WinAPI 的 MAX_PATH 的?

c++ - 使用 C++ Boost 内存映射文件创建磁盘备份数据结构

c++ - Qt中实现精确定时器

c++ - fstream 指针未指向

c++ - 未声明的标识符?