2011-01-07 58 views
0

內我有結構的數組 -訪問一類函數,當Class實例是一個結構

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

MagicalUnicornBullets MagicalUnicornBullets[25]; 

欲通過陣列循環,並且初始化該結構的內容。

顯然,這只是for循環的情況,對於bool而言,它只是onscreen = false;但我將如何初始化SparklyUnicornBullet?

現在我的代碼 -

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

我很清楚,這是錯誤的 - 但我如何訪問類的功能時,他們的結構內?

+2

`SparklyUnicornBullet`不是一個對象,它是返回`PS2Sprite`的函數原型。這是你問的嗎?您需要執行`PS2Sprite SparklyUnicornBullet;`(無`()`)來創建一個對象。然後你可以使用`ScaleAbsolute`方法。 – Naveen 2011-01-07 11:58:07

回答

0

認識到SparklyUnicornBullet實際上是一個成員函數,它返回一個PS2Sprite對象。這返回PS2Sprite有一個成員函數ScaleAbsolute你想調用。所以你上面的代碼幾乎是正確的。你只是缺少()的:

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

這就是說,有一些東西是壞你的代碼。首先,你的聲明具有相同的名稱作爲對象的數組:

MagicalUnicornBullets MagicalUnicornBullets[25]; 

我覺得這是允許的,但它是如此邪惡和malmotivated,我甚至不能說,對於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

相關問題