Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 未定义类型的使用 #包括 班级核心; 阶级国家; int main(){ std::cin.get(); 返回0; } 阶级国家{ 公众: 国家(核心*核心){ 核心->设置状态(); } }; 类核心{ 公众: 核心(){ 国家(本); } void setState(){ std::cout_C++ - Fatal编程技术网

C++ 未定义类型的使用 #包括 班级核心; 阶级国家; int main(){ std::cin.get(); 返回0; } 阶级国家{ 公众: 国家(核心*核心){ 核心->设置状态(); } }; 类核心{ 公众: 核心(){ 国家(本); } void setState(){ std::cout

C++ 未定义类型的使用 #包括 班级核心; 阶级国家; int main(){ std::cin.get(); 返回0; } 阶级国家{ 公众: 国家(核心*核心){ 核心->设置状态(); } }; 类核心{ 公众: 核心(){ 国家(本); } void setState(){ std::cout,c++,C++,在State::State中,在实际定义之前,您正在使用核心。在示例中,您可以通过将构造函数实现移出类定义来轻松解决此问题: #include <iostream> class Core; class State; int main (){ std::cin.get(); return 0; } class State{ public: State(Core* core){ core->setState();

State::State
中,在实际定义之前,您正在使用
核心
。在示例中,您可以通过将构造函数实现移出类定义来轻松解决此问题:

#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;
    }
};
在实践中,将这些函数的实现放在单独的实现(
.cpp
)文件中更为常见,在这种情况下,转发声明将按照您的预期工作

在这种情况下:

class State{
public:
    State(Core* core);
};

class Core{
   // This stays the same...
};

State::State(Core* core)
{
   core->setState();
}


当您只需要命名(例如,形成指针、引用、函数值参数或返回类型)时,可以向前声明类型。如果您实际使用它(例如,在函数定义中或通过取消引用指针),则需要定义。解决此问题的方法是声明成员函数,而不是定义在
State
的类定义中,您可以在看到
核心的定义后定义它:

// State.cpp
#include "State.h"
#include "Core.h"

State::State(Core* core)
{
   core->setState();
}

你有
类GameState;
但是这个类实际上是在哪里定义的?不,它声明了类型,它没有定义它。非常感谢你,我自己永远不会得到它。
// 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();
}
State::State(Core* core){
    core->setState();
}