2013-03-29 61 views
0

這應該是C++特有的。無法訪問屬性C++

我有一個屬性m9ReloadAnim在頭文件,我可以從構造函數訪問它,但是當我嘗試從其他函數訪問它,我得到這樣一個錯誤:EXC_BAD_ACCESS或喜歡的事:「上的地址並不包含對象「。

我有一個頭類是這樣的:

#ifndef __SWAT__Weapon__ 


#define __SWAT__Weapon__ 

#include "cocos2d.h" 

class Weapon : public cocos2d::CCSprite 
{ 
private: 
    cocos2d::CCAnimation *m9ReloadAnim = cocos2d::CCAnimation::create(); 
public: 
    Weapon(); 
    ~Weapon(); 
    void reloadM9(); 
}; 

#endif 

而且一段cpp的文件是這樣的:

enter code here 
#include "Weapon.h" 
#include "cocos2d.h" 


Weapon::Weapon(){ 
m9ReloadAnim->setDelayPerUnit(1.1f); 
} 

Weapon::~Weapon(){ 
} 

void Weapon::reloadM9(){ 
    m9ReloadAnim->setDelayPerUnit(1.1f); 

} 
+0

這可能不是問題,但包含兩個連續下劃線('__SWAT__Weapon__')的名稱和以下劃線開頭的名稱後跟一個大寫字母保留給實現。不要使用它們。 –

+0

嗯,它是由IDE(Xcode)生成的,所以我就這樣離開它,這就是爲什麼他們在那裏 –

+1

Yuk。編寫IDE的人經常不會對編寫圖書館和編譯器的人進行足夠的討論。 –

回答

3

你不能初始化變量是這樣的:

cocos2d::CCAnimation *m9ReloadAnim = cocos2d::CCAnimation::create(); 

只有static const int可以在類聲明中初始化。

移動這個初始化到您的構造函數:

Weapon::Weapon() 
    : m9ReloadAnim(cocos2d::CCAnimation::create()) 
{ 
    m9ReloadAnim->setDelayPerUnit(1.1f); 
} 

Weapon::Weapon() 
{ 
    m9ReloadAnim = cocos2d::CCAnimation::create(); 
    m9ReloadAnim->setDelayPerUnit(1.1f); 
} 
+0

我不認爲這應該是一個大問題,反正我已經嘗試過了,仍然沒有運氣 –

+0

@FerencDajka錯誤信息指向哪裏? cpp或頭文件?可能這篇文章的一些幫助:http://stackoverflow.com/questions/327082/exc-bad-access-signal-received – gongzhitaao

+0

完全到我嘗試訪問該屬性的行,所以在cpp –

0

有時被損壞,所以你不能告訴哪裏出錯起源。我建議在每個方法的入口點放置一個斷點,然後逐行執行代碼以確保它在reloadM9方法中觸發。檢查m9ReloadAnim是否爲NULL,或者是否指向初始化時創建的對象。此外,您需要檢查是否正確使用庫。