2014-10-09 60 views
-2

我有3个类。 DrawGameComp'和'GameComp',其中'GameComp'是'DrawGameComp'的基类。我在控制类的Game类中有一个指针数组。 ' GameComp *组件[];从主中我必须创建一个动态的Game实例,并将GameComp和DrawGameComp的新对象添加到GameComp类型的指针数组中。如何在指针数组中存储不同类的对象

Game Game1(2);     
Game1.Add(new GameComponent); 
Game1.Add(new DrawableGameComponent); 

我已经完成了这部分的主要部分。因为从主要我必须调用添加传递对象作为参数。当我存储这些对象时,我也希望为第一个对象分配一个id,向第二个对象分配一个id为2的id。我怎么能包括这一点。 我的游戏类的Add()函数如下:

void Game::Add(GameComponent*) 
{ 
components[0]=GameComp; 
componentCount++; 
} 

,但它给我的错误。我非常努力地尝试。但我不能。另外我该如何调用Array中的这些对象的Display()成员函数?这是这样吗? components [0] - > Display();

+0

什么是错误消息? – 2014-10-09 13:12:10

+0

不要忘记,因为您正在使用基类指针,您需要确保基类方法是虚拟的,如果您希望它调用派生类方法。 – Discordanian 2014-10-09 13:12:31

+1

如何使用'std :: vector'而不是数组?这样你就不需要'componentCount',并且可以轻松地遍历这些项目。 – crashmstr 2014-10-09 13:13:06

回答

0

1)你可能意味着写:

void Game::Add(GameComponent* comp) 
{ 
    components[componentCount++] = comp; 
} 

2)成分[0] - >显示()将工作,如果显示器是GameComponent类的成员函数。

+0

谢谢先生:-) – nor 2014-10-09 14:57:10

1

Add方法应该是这样的:

void Game::Add(GameComponent* comp) 
{ 
    components[componentCount++] = comp; 
} 

确保您在构造归零componentCount

使用数组:

components[i]->DoSomething(); 
+0

'comp'只是我为功能参数拾取的名称。这意味着该功能无法识别。确保声明具有相同的签名。 – egur 2014-10-09 14:39:21

+0

谢谢先生:-) – nor 2014-10-09 14:56:23

相关问题