Я счастливо работал в C ++, пока не наступило время компиляции.
У меня есть несколько классов внутри некоторого пространства имен (назовем это N); два из этих классов соответствуют одному базовому классу, а другие являются его производными. Каждый класс имеет свою собственную пару файлов .hpp и .cpp; Я думаю, что это будет выглядеть так:
namespace N{
class Base{
};
class Derived: public Base{
};
}
Однако g ++ (возможно, компоновщик) постоянно говорит мне:
Derived.hpp:n: error: expected class-name before ‘{’ token
Он не распознает Base как класс, даже если я правильно # включил hpp-файл, соответствующий его определению, в .hpp!
Derived.
«Это что-то с #include», подумал я, поскольку .hpps этих классов #include в других файлах, поэтому я добавил это в объявление Derived в Derived.hpp:
#include "Base.hpp"
namespace N{
class Base;
class Derived: public Base{
};
}
А теперь г ++ жалуется:
Derived.hpp:n: error: invalid use of incomplete type ‘struct N::Base’
Итак, я заблудился здесь. Пожалуйста, помогите мне, я буду высоко ценить это. :)
(Кстати, я довольно опытный в Python, а не в C ++, так что эти вопросы мне действительно странны. Кроме того, я изменил имена классов и прочее:).
Редактировать: Более точное представление моих файлов:
File Pieza.hpp
-----------------------
#include "Celda.hpp"
namespace Reglas
{
class Pieza
{
public:
Pieza() {}
virtual ~Pieza() {}
private:
Celda *c;
};
}
File Jugador.hpp
-----------------------
#include "Jugada.hpp"
#include "Excepciones.hpp"
#include "Pieza.hpp"
namespace Reglas
{
//compiler asked for these :S
class Celda;
class Tablero;
class Jugador : public Pieza
{
public:
Jugador() {}
virtual ~Jugador() {}
};
}