oop — ошибка: недопустимое переполнение стека базового класса

Может ли кто-нибудь, пожалуйста, объяснить, что может вызвать эту ошибку?

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

Я попытался очистить свой проект, но тщетно.

5

Решение

Недопустимо определять массив (std::string m_graphics[]) без указания его размера в качестве члена класса. C ++ должен знать размер экземпляра класса заранее, и именно поэтому вы не можете наследовать его, поскольку C ++ не будет знать во время выполнения, где в памяти будут доступны члены наследующего класса.

Вы можете либо зафиксировать размер массива в определении класса, либо использовать указатель и выделить его в куче, либо использовать vector<string> вместо массива.

5

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]