我有一系列结构 -
struct MagicalUnicornBullets {
PS2Sprite SparklyUnicornBullet();
bool onscreen;
};
MagicalUnicornBullets MagicalUnicornBullets[25];
我想循环遍历数组,并初始化结构的内容。
显然,这只是for循环的情况,对于bool来说,它只是onscreen = false;但是我如何初始化SparklyUnicornBullet?
现在我的代码是 -
MagicalUnicornBullets[i].SparklyUnicornBullet.ScaleAbsolute(4,4);
我很清楚这是错误的 - 但是当它们在Struct中时我如何访问类函数?
答案 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
等集合类是有利的。