无法访问属性c ++

时间:2013-03-29 14:28:25

标签: c++ ios pointers cocos2d-x

这应该是特定于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);

}

2 个答案:

答案 0 :(得分:3)

您无法像这样初始化变量:

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

只有static const int可以在类声明中初始化。

将此初始化移动到你的ctor:

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

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

答案 1 :(得分:0)

有时会损坏,因此您无法分辨错误的来源。我建议在每个方法的入口点放置一个断点,并逐行执行代码以确保它在reloadM9方法中触发。检查m9ReloadAnim是否为NULL或是否指向初始化时创建的对象。此外,您需要检查您是否正确使用该库。