如何初始化非静态 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++ 知识存在严重差距。