Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/133.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++ C++;前向声明(指针)-访问成员_C++_Class_Pointers_Member_Forward Declaration - Fatal编程技术网

C++ C++;前向声明(指针)-访问成员

C++ C++;前向声明(指针)-访问成员,c++,class,pointers,member,forward-declaration,C++,Class,Pointers,Member,Forward Declaration,我正在使用OpenGL和DirectX,我已经开始开发面向对象游戏类的基础知识。当前类别的结构如下所示: 对象 ---|---演员 ---------|---典当 ---------|---控制器 所以我有Pawn和Controller类,它们继承Actor,后者继承对象 问题是我需要在pawn类中有一个Controller的引用,在Controller类中有一个pawn的实例。 因此,我在Actor.h中向前声明了Pawn和Controller: // Actor.h // (...) Ac

我正在使用OpenGL和DirectX,我已经开始开发面向对象游戏类的基础知识。当前类别的结构如下所示:

对象
---|---演员
---------|---典当
---------|---控制器

所以我有
Pawn
Controller
类,它们继承
Actor
,后者继承
对象

问题是我需要在pawn类中有一个
Controller
的引用,在Controller类中有一个
pawn
的实例。
因此,我在
Actor.h
中向前声明了
Pawn
Controller

// Actor.h

// (...) Actor Declaration (...)

class Pawn;
class Controller;
// Pawn.h

class Pawn : public Actor
{
private:
    Controller* controller;
public:
    void DoSomethingWithController(void);
}
然后在
典当.h
中:

// Actor.h

// (...) Actor Declaration (...)

class Pawn;
class Controller;
// Pawn.h

class Pawn : public Actor
{
private:
    Controller* controller;
public:
    void DoSomethingWithController(void);
}
这一切都很好,没有错误。问题是当我想访问该类中的成员时:

void Pawn::DoSomethingWithController(void)
{
    // this->controller-> can't access members like this (members not found)
}
那么,我应该怎么做才能使控制器的指针位于Pawn中,控制器的指针位于Pawn中,并将它们保存在不同的文件(.h和.cpp)中,同时能够访问其成员

谢谢你抽出时间D


[如果需要更多信息,我会提供它]

转发声明对编译器说,将进一步提供给定类型。编译器对该类型的字段或成员一无所知。因此,您需要在.cpp文件(您访问“控制器”类成员的位置)中包含相应的.h文件。

转发声明对编译器说,将进一步提供给定类型。编译器对该类型的字段或成员一无所知。因此,您需要在.cpp文件(您访问“controller”类成员的位置)中包含相应的.h文件。

只需
#在Pawn.cpp中包含“controller.h”
。这不是问题。Pawn.cpp不包括在Pawn.h中。希望如此。我明白你的意思,我怎么不记得我可以在.cpp extreme face palmJust
中包含.h文件?在Pawn.cpp中包含“Controler.h”
。这不是问题。Pawn.cpp不包括在Pawn.h中。我希望。我明白你的意思,我怎么不记得我可以在.cpp extreme face palm中包含.h文件