当Class实例在Struct中时访问类函数

时间:2011-01-07 11:53:25

标签: c++ class struct

我有一系列结构 -

struct MagicalUnicornBullets {
    PS2Sprite SparklyUnicornBullet();
    bool onscreen; 
};

MagicalUnicornBullets MagicalUnicornBullets[25];

我想循环遍历数组,并初始化结构的内容。

显然,这只是for循环的情况,对于bool来说,它只是onscreen = false;但是我如何初始化SparklyUnicornBullet?

现在我的代码是 -

MagicalUnicornBullets[i].SparklyUnicornBullet.ScaleAbsolute(4,4);

我很清楚这是错误的 - 但是当它们在Struct中时我如何访问类函数?

1 个答案:

答案 0 :(得分:0)

意识到SparklyUnicornBullet实际上是一个返回PS2Sprite对象的成员函数。返回的PS2Sprite具有您要调用的成员函数ScaleAbsolute。所以你上面的代码几乎是正确的。您只是遗漏了()

MagicalUnicornBullets[i].SparklyUnicornBullet().ScaleAbsolute(4,4);

那就是说,你的代码有很多不好的地方。例如,您声明一个与对象同名的数组:

MagicalUnicornBullets MagicalUnicornBullets[25];

我认为这是允许的,但它是如此邪恶和动摇,我甚至不能说为certian,因为我会拒绝任何这样的代码,无论它的动机或合法性。您应该为数组指定一个不同的名称:

MagicalUnicornBullets bullets[25];

接下来,您的初始化循环是不必要的。代码:

MagicalUnicornBullets MagicalUnicornBullets[25];

通过调用每个默认构造函数来创建一个25 MagicalUnicornBullets的C样式数组。因此,最简单的方法是简单地提供一个执行所需操作的默认构造函数:

struct MagicalUnicornBullets {
  MagicalUnicornBullets();
  // ...
};

MagicalUnicornBullets::MagicalUnicornBullets()
:  onscreen(false)
{
  SparklyUnicornBullet().ScaleAbsolute(4,4)
}

现在根本不需要循环。所有25个都将按照你想要的方式构建和初始化。

最后,通常在C ++中,根本不使用C风格的数组,而是使用std::vector等集合类是有利的。