【问题标题】:Accessing a Class Function when the Class instance is within a Struct当 Class 实例位于 Struct 中时访问 Class Function
【发布时间】:2011-01-07 11:53:24
【问题描述】:

我有一个结构数组 -

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

MagicalUnicornBullets MagicalUnicornBullets[25];

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

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

现在我的代码是 -

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

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

【问题讨论】:

  • SparklyUnicornBullet 不是一个对象,它是一个返回 PS2Sprite 的函数原型。这是你要问的吗?你需要做PS2Sprite SparklyUnicornBullet;(没有())来创建一个对象。然后就可以使用ScaleAbsolute 方法了。
  • 好的...在这种情况下如何初始化它?困惑!
  • SparklyUnicornBullet 不是 PS2Sprite 实例的名称,只是正常构建自己吗?
  • 谢谢!! :) 编译正确! :D

标签: c++ class struct


【解决方案1】:

意识到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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-24
    • 1970-01-01
    • 2012-01-20
    • 1970-01-01
    • 1970-01-01
    • 2018-02-19
    相关资源
    最近更新 更多