如何初始化非静态 class 成员而不出现 C2864 错误?
How do I initialize non-static class members and not get the C2864 error?
我正在搞事情,今天我遇到了 C2864 错误。我是 C++ 的新手,所以我真的有点迷路了。
#ifndef MONSTER_ZOMBIE_H
#define MONSTER_ZOMBIE_H
// class definition
class CZombie : public CBaseMonster {
public:
virtual void Spawn(void);
virtual void Precache(void);
virtual void HandleAnimEvent(MonsterEvent_t *pEvent);
virtual void PainSound(void);
virtual void DeathSound(void);
virtual void AlertSound(void);
virtual void IdleSound(void);
virtual void AttackSound(void);
virtual void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
virtual bool CheckRangeAttack1(float flDot, float flDist) { return false; }
virtual bool CheckRangeAttack2(float flDot, float flDist) { return false; }
virtual int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType);
virtual int IgnoreConditions(void);
virtual int Classify(void);
virtual int Save(CSave &save);
virtual int Restore(CRestore &restore);
static TYPEDESCRIPTION m_SaveData[];
static const char *pAttackSounds[];
static const char *pIdleSounds[];
static const char *pAlertSounds[];
static const char *pPainSounds[];
static const char *pDeathSounds[];
static const char *pAttackHitSounds[];
static const char *pAttackMissSounds[];
protected:
BOOL m_flDebug = false;
float m_flBulletDR = 0.0;
float m_flNextFlinch;
float m_flHitgroupHead;
float m_flHitgroupChest;
float m_flHitgroupStomach;
float m_flHitgroupArm;
float m_flHitgroupLeg;
float m_flDmgOneSlash;
float m_flDmgBothSlash;
};
#endif // MONSTER_ZOMBIE_H
Visual Studio 表示它是 BOOL m_flDebug = false;和浮动 m_flBulletDR = 0.0;是错误的原因,但我真的不知道如何解决这个问题。
我所尝试的只是将这两行移出“protected:”,然后代码实际上编译了,但是说僵尸变得刀枪不入!
我在这里查看了类似的问题,但并没有真正从那里的解释中学到任何东西
您尝试的代码只有在 C++11 下才合法。因此,将您的编译器选项更改为至少 C++11(不确定 Visual Studio 2010 是否可行,您真的也应该升级您的编译器)。
或者使用构造函数以老式方式做事。
class CZombie : public CBaseMonster {
public:
CZombie() : m_flDebug(false), m_flBulletDR(0.0) {}
...
};
如果您真的不了解构造函数,那么您的 C++ 知识存在严重差距。
我正在搞事情,今天我遇到了 C2864 错误。我是 C++ 的新手,所以我真的有点迷路了。
#ifndef MONSTER_ZOMBIE_H
#define MONSTER_ZOMBIE_H
// class definition
class CZombie : public CBaseMonster {
public:
virtual void Spawn(void);
virtual void Precache(void);
virtual void HandleAnimEvent(MonsterEvent_t *pEvent);
virtual void PainSound(void);
virtual void DeathSound(void);
virtual void AlertSound(void);
virtual void IdleSound(void);
virtual void AttackSound(void);
virtual void TraceAttack(entvars_t *pevAttacker, float flDamage, Vector vecDir, TraceResult *ptr, int bitsDamageType);
virtual bool CheckRangeAttack1(float flDot, float flDist) { return false; }
virtual bool CheckRangeAttack2(float flDot, float flDist) { return false; }
virtual int TakeDamage(entvars_t *pevInflictor, entvars_t *pevAttacker, float flDamage, int bitsDamageType);
virtual int IgnoreConditions(void);
virtual int Classify(void);
virtual int Save(CSave &save);
virtual int Restore(CRestore &restore);
static TYPEDESCRIPTION m_SaveData[];
static const char *pAttackSounds[];
static const char *pIdleSounds[];
static const char *pAlertSounds[];
static const char *pPainSounds[];
static const char *pDeathSounds[];
static const char *pAttackHitSounds[];
static const char *pAttackMissSounds[];
protected:
BOOL m_flDebug = false;
float m_flBulletDR = 0.0;
float m_flNextFlinch;
float m_flHitgroupHead;
float m_flHitgroupChest;
float m_flHitgroupStomach;
float m_flHitgroupArm;
float m_flHitgroupLeg;
float m_flDmgOneSlash;
float m_flDmgBothSlash;
};
#endif // MONSTER_ZOMBIE_H
Visual Studio 表示它是 BOOL m_flDebug = false;和浮动 m_flBulletDR = 0.0;是错误的原因,但我真的不知道如何解决这个问题。 我所尝试的只是将这两行移出“protected:”,然后代码实际上编译了,但是说僵尸变得刀枪不入! 我在这里查看了类似的问题,但并没有真正从那里的解释中学到任何东西
您尝试的代码只有在 C++11 下才合法。因此,将您的编译器选项更改为至少 C++11(不确定 Visual Studio 2010 是否可行,您真的也应该升级您的编译器)。
或者使用构造函数以老式方式做事。
class CZombie : public CBaseMonster {
public:
CZombie() : m_flDebug(false), m_flBulletDR(0.0) {}
...
};
如果您真的不了解构造函数,那么您的 C++ 知识存在严重差距。