我在这个头文件中遇到一个编译器错误:
#ifndef GAME1_H
#define GAME1_H
#include "GLGraphics.h"
#include "DrawBatch.h"
class GameComponent;
class Game1 {
private:
GLGraphics graphics;
GameComponent components;
void updateDelegates();
void Run();
};
class GameComponent {
private:
static int index;
protected:
Game1 game;
public:
GameComponent();
GameComponent(Game1 game);
void Update(int);
void Dispose();
};
class DrawableGameComponent: public GameComponent
{
private:
GLGraphics graphics;
DrawBatch drawBatch;
public:
DrawableGameComponent();
DrawableGameComponent(Game1);
void Draw();
};
#endif
我看到的问题是Game1需要GameComponent的完整定义,而GameComponent需要Game1的完整定义。我很难将它们放在单独的标题中,这就是为什么它们放在一起的原因。有没有什么方法可以在不完全改变其中一个类的实现的情况下做到这一点?
谢谢!
发布于 2010-09-26 12:12:13
要做你正在尝试的事情,你需要有一个指向你的类的指针,而不是让它成为一个成员。
例如:
class A;
class B;
class A {
B b;
};
class B {
A a;
};
这是不可行的。它造成了一个环形结构。A的构造函数将调用B的构造函数,B的构造函数将无限调用A的构造函数,依此类推。
相反,请尝试:
class A;
class B;
class A {
B *b;
};
class B {
A *a;
};
不过,我还是要提个醒。如果你是这样设置的,那么你的设计很有可能是有缺陷的。你应该重新考虑如何解决你的问题。
https://stackoverflow.com/questions/3796555
复制相似问题