В общем, столкнулся с весьма странной проблемой. Есть у меня несколько классов, хочется чтоб в каждом классе были ссылки на объекты других и кроме того каждый класс жил в отдельной паре .h-.cpp файлов. Естественно, в заголовочных файлах прописываются #ifndef'ы, с этим всё путём. Но трабл в том, что несмотря на то, что все необходимые файлы вовсюда включены в некоторых местах компилятор не видит объявлений классов, в компиляторах майкрософта ЕМНИП это побароволось добавлением
extern class ClassName
Однако g++ такого не понимает и выдаёт ошибку, мол класс не может быть extern. Для примера:
//Class1.h
#ifndef CLASS1_H_
#define CLASS1_H_
#include "Class2.h"
class Class1 {
Class2* cl; //тут всё хорошо - никаких ошибок нет
}
#endif
//Class2.h
#ifndef CLASS2_H_
#define CLASS2_H_
#include "Class1.h"
class Class2 {
Class1* cl; //а вот тут ошибка - говорит что не знает что такое Class1
}
#endif
Вопрос: как такое побороть по науке? Сразу скажу - свалить все объявления в один .h файл не вариант, потому что в реальном проекте несколько огромных классов, нужно именно понять как ткнуть компилятор в факт того, что класс на самом деле объявлен.