Shape.h
#include"Circle.h"
#include"Square.h"
class Shape {
public:
virtual void Draw() = 0;
static Shape* Create(std::string type);
};
Shape.cpp
#include "Shape.h"
Shape* Shape::Create(string type) {
if ( type == "circle" ) return new Circle();
if ( type == "square" ) return new Square();
return NULL;
}
Circle.cpp
#include "Circle.h"
void Circle::Draw() {
cout << "I am circle" << endl;
}
Circle.h
#include"Shape.h"
class Circle:public Shape {
public:
void Draw();
friend class Shape;
};
Square.cpp
#include "Square.h"
void Square::Draw() {
cout << "I am Square" << endl;
}
Square.h
#include"Shape.h"
class Square:public Shape {
public:
void Draw();
friend class Shape;
};
Выдает эту ошибку: Ошибка Square.h: ожидаемое имя класса перед {token [для наследования, которое не идентифицируетсяShape]
Но тот же код работает, если он находится в монолитном файле (без .cpp и .h) в одном файле main.cpp. Чего мне не хватает, включая заголовочные файлы?
Заранее спасибо.