首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >错误C2079,定义类的顺序

错误C2079,定义类的顺序
EN

Stack Overflow用户
提问于 2010-09-26 12:06:36
回答 3查看 6.1K关注 0票数 3

我在这个头文件中遇到一个编译器错误:

代码语言:javascript
运行
复制
#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的完整定义。我很难将它们放在单独的标题中,这就是为什么它们放在一起的原因。有没有什么方法可以在不完全改变其中一个类的实现的情况下做到这一点?

谢谢!

EN

Stack Overflow用户

发布于 2010-09-26 12:12:13

要做你正在尝试的事情,你需要有一个指向你的类的指针,而不是让它成为一个成员。

例如:

代码语言:javascript
运行
复制
class A;
class B;
class A {
   B b;
};

class B {
   A a;
};

这是不可行的。它造成了一个环形结构。A的构造函数将调用B的构造函数,B的构造函数将无限调用A的构造函数,依此类推。

相反,请尝试:

代码语言:javascript
运行
复制
class A;
class B;
class A {
   B *b;
};

class B {
   A *a;
};

不过,我还是要提个醒。如果你是这样设置的,那么你的设计很有可能是有缺陷的。你应该重新考虑如何解决你的问题。

票数 4
EN
查看全部 3 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3796555

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档