前进声明方法

时间:2013-04-19 10:01:42

标签: c++ forward-declaration

我对前方声明有一点问题。我在一个文件中有以下类

Robot.h

class Robot
{
public:
   void moveForward()
private:
}

在Robot.cpp文件中实现

我有一个UserReceiver.h类,它定义了用户与机器人等交互的界面......这个类用鼠标管理摄像头,我加载一个Robot类的实例,以便可以与它进行交互

UserReceiver.h

class Robot;
class UserReceiver
{
public:
     void LoadRobot(Robot* _robot) { robot = _robot; }

     bool onEvent()
     {
         etc...
         // Calling robot->moveForward() when clicking something
     }
 private:
 Robot* robot;
}

如果需要,我可以提供完整的代码(我使用的3D引擎是Irrlicht)。我的问题是如何转发声明与Robot类相关的方法?围绕这个问题有一个好的设计模式吗?

我得到的错误是(在程序调用机器人的行 - > moveForward()):

error C2227: left of '->moveForward' must point to class/struct/union/generic type

非常感谢你的帮助

祝你好运

2 个答案:

答案 0 :(得分:3)

您在没有完整声明的情况下使用Robot。将onEvent实施移至cpp文件并在其中包含robot.h标头,或#include中仅robot.h userreceiver.h

我推荐前者。

答案 1 :(得分:2)

有时,这种相互引用的类需要前向声明。但是,有时需要完整的定义,例如,访问类成员,或者您想知道类的大小。但在其他时候,前瞻声明就足够了。

对于Foo类,以下可以是前向声明。

  • 定义或声明Foo*Foo&,包括函数参数,返回类型,局部变量,类成员变量等。

  • 使用Foo作为参数或返回类型声明一个函数。例如,Foo bar()void bar(Foo f)。但是要调用该函数,需要定义。因为编译器需要使用函数的复制构造函数和析构函数。

相关问题