Как правильно подключить файлы .hpp?
В файле B.hpp выдает ошибку "Unknown type name 'F'", хотя файл с объявлением F подключен. В чем проблема?
main.cpp
#include <iostream>
#include "Game.hpp"
int main() {
return 0;
}
Game.hpp
#ifndef Game_hpp
#define Game_hpp
#include <stdio.h>
#include "F.hpp"
#include "B.hpp"
class Game {
F * a;
B * b;
};
#endif /* Game_hpp */
IObserver.hpp
#ifndef IObserver_hpp
#define IObserver_hpp
#include <stdio.h>
class IObserver {
};
#endif /* IObserver_hpp */
B.hpp
#ifndef B_hpp
#define B_hpp
#include <stdio.h>
#include "IObserver.hpp"
#include "F.hpp"
class B: public IObserver {
public:
void funB (F * a);
};
#endif /* B_hpp */
Base.cpp
#include "B.hpp"
void B::funB (F * a){}
C.hpp
#ifndef C_hpp
#define C_hpp
#include <stdio.h>
#include "B.hpp"
class C {
B * a;
};
#endif /* C_hpp */
F.hpp
#ifndef F_hpp
#define F_hpp
#include <stdio.h>
#include "C.hpp"
class F {
C * a;
};
#endif /* F_hpp */
Ответы (1 шт):
Ну смотрите сами...
Game.hpp включает F.hpp который включает С.hpp, который...
Словом, если вы просто внесете содержимое каждого hpp-файла вместо строки с #include, то получите вот такое начало:
#include <iostream>
#include <stdio.h>
#include <stdio.h>
class B: public IObserver {
public:
void funB (F * a);
};
class C {
B * a;
};
class F {
C * a;
};
Просто в момент объявления void funB (F * a); компилятор ничего не знает ни о каком F, вот и все.
Таким большим количеством архисложнопереплетенных :) заголовочных файлов вы запутываете сами себя...
Не знаю, что у вас за компилятор, но если посмотреть на результат работы препроцессора (в VC++ - ключ /EP), то увидим следующее:
class IObserver {
};
class B: public IObserver {
public:
void funB (F * a);
};
class C {
B * a;
};
class F {
C * a;
};
class Game {
F * a;
B * b;
};
int main() {
return 0;
}