5

誰でも、このエラーの原因を説明できますか?

Error: Invalid base class

2 つのクラスがあり、そのうちの 1 つは second から派生しています。

#if !defined(_CGROUND_H)
#define _CGROUND_H

#include "stdafx.h"
#include "CGameObject.h"


class CGround : public CGameObject // CGameObject is said to be "invalid base class"
{
private:
    bool m_bBlocked;
    bool m_bFluid;
    bool m_bWalkable;

public:
    bool draw();

    CGround();
    CGround(int id, std::string name, std::string description, std::string graphics[], bool bBlocked, bool bFluid, bool bWalkable);
    ~CGround(void);
};

#endif  //_CGROUND_H

CGameObject は次のようになります。

#if !defined(_CGAMEOBJECT_H)
#define _CGAMEOBJECT_H

#include "stdafx.h"

class CGameObject
{
protected:
    int m_id;
    std::string m_name;
    std::string m_description;
    std::string m_graphics[];

public:
    virtual bool draw();

    CGameObject() {}
    CGameObject(int id, std::string name, std::string description, std::string graphics) {}

    virtual ~CGameObject(void);
};

#endif  //_CGAMEOBJECT_H

プロジェクトをクリーンアップしようとしましたが、無駄でした。

4

1 に答える 1

7

std::string m_graphics[]クラスのメンバーとしてサイズを指定せずに配列()を定義することは無効です。C ++は、クラスインスタンスのサイズを事前に知っている必要があります。これが、C ++が実行時に継承するクラスのメンバーがメモリ内のどこで使用できるかを知らないため、クラスインスタンスから継承できない理由です。
クラス定義で配列のサイズを固定するか、ポインターを使用してヒープに割り当てるかvector<string>、配列の代わりに使用することができます。

于 2012-11-09T13:14:59.217 に答える