Это следующая ошибка, которую я получаю
ошибка: предварительное объявление класса «А» |
Я пытаюсь создать прототипы классов и сделать их доступными по всему миру.
Я подумал, что было бы лучше объяснить это с помощью изображения, вот оно:
Упс также забыл упомянуть, что FileA.cpp также #include External.h
Для создания объектов (автоматический или с new
), нужно иметь полное определение видимого типа. class A
тело должно быть видимым для Main.cpp.
Неполные типы, которые только что объявлены, имеют ограниченное использование. Может использоваться как:
например
class A;
class X {
A* p;
A& r;
std::vector<A> v;
};
main пытается построить A, когда ничего не знает о классе, кроме того, что он существует. Вам нужно определение, доступное для Main.cpp, а не скрытое в другом файле cpp.
Вы не можете создать экземпляр объекта (с new
) без полного определения класса.
Либо перенести определение в External.h
или используйте фабричный метод, чтобы вернуть действительный указатель.
Когда вы используете класс A
тебе нужен полный определение этого. Как еще компилятор узнает, какие методы и переменные он имеет? И это включает в себя конструирование экземпляров объекта, даже при создании указателей.
Предварительного объявления класса достаточно, чтобы объявить указатель или ссылку на этот класс, но не более того. Если вы хотите использовать функции класса (включая конструкторы), вам необходимо иметь полное определение, доступное в момент использования.