Я обнаружил ошибку в объявлении класса С++, которое было неправильно объявлено как struct Book
вместо class Book
. Я думаю, что книга раньше была структурой, была изменена на класс, но декларации вперед остались.
Book.h:
class Book {
...
};
Library.h:
struct Book;
class Library {
std::vector<Book*> books;
};
Не было никаких предупреждений компилятора, и в результате программа, похоже, работала нормально. Мне было любопытно: в теории, может ли это когда-либо вызвать проблему? Это просто указатель, да, но, например, если у класса были виртуальные методы, множественное наследование, могут ли указатели отличаться?
Я знаю различия между классом/структурой в отношении public/private по умолчанию, но я спрашиваю конкретно о передовых декларациях и возможных последствиях их замены.