Странная ошибка прототипирования: Cpp’s и Headers

Это следующая ошибка, которую я получаю

ошибка: предварительное объявление класса «А» |

Я пытаюсь создать прототипы классов и сделать их доступными по всему миру.
Я подумал, что было бы лучше объяснить это с помощью изображения, вот оно:

Упс также забыл упомянуть, что FileA.cpp также #include External.h

введите описание изображения здесь

-1

Решение

Для создания объектов (автоматический или с new), нужно иметь полное определение видимого типа. class A тело должно быть видимым для Main.cpp.

Неполные типы, которые только что объявлены, имеют ограниченное использование. Может использоваться как:

  1. указатель
  2. ссылка
  3. параметр шаблона

например

class A;
class X {
A* p;
A& r;
std::vector<A> v;
};
2

Другие решения

main пытается построить A, когда ничего не знает о классе, кроме того, что он существует. Вам нужно определение, доступное для Main.cpp, а не скрытое в другом файле cpp.

1

Вы не можете создать экземпляр объекта (с new) без полного определения класса.

Либо перенести определение в External.h или используйте фабричный метод, чтобы вернуть действительный указатель.

0

Когда вы используете класс A тебе нужен полный определение этого. Как еще компилятор узнает, какие методы и переменные он имеет? И это включает в себя конструирование экземпляров объекта, даже при создании указателей.

0

Предварительного объявления класса достаточно, чтобы объявить указатель или ссылку на этот класс, но не более того. Если вы хотите использовать функции класса (включая конструкторы), вам необходимо иметь полное определение, доступное в момент использования.

0
По вопросам рекламы [email protected]