Может ли кто-нибудь, пожалуйста, объяснить, что может вызвать эту ошибку?
Error: Invalid base class
У меня есть два класса, где один из них является производным от второго:
#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
Я попытался очистить свой проект, но тщетно.
Недопустимо определять массив (std::string m_graphics[]
) без указания его размера в качестве члена класса. C ++ должен знать размер экземпляра класса заранее, и именно поэтому вы не можете наследовать его, поскольку C ++ не будет знать во время выполнения, где в памяти будут доступны члены наследующего класса.
Вы можете либо зафиксировать размер массива в определении класса, либо использовать указатель и выделить его в куче, либо использовать vector<string>
вместо массива.
Других решений пока нет …