Я нашел ошибку в объявлении класса C++, которое было ошибочно объявлено как struct Book
вместо class Book
. Я думаю, что книга раньше была структурой, была изменена на класс, но декларации вперед остались.Форвардное объявление как struct vs class
Book.h:
class Book {
...
};
Library.h:
struct Book;
class Library {
std::vector<Book*> books;
};
Там не было никаких предупреждений компилятора и результирующая программа вроде нормально работает. Мне было любопытно: в теории, может ли это когда-нибудь вызвать проблему? Это всего лишь указатель, да, но, например, если у класса были виртуальные методы, множественное наследование, могли ли указатели отличаться?
Я знаю различия между классом/структурой в отношении публичных/частных по умолчанию, но я спрашиваю конкретно о форвардных декларациях и возможных последствиях их замены.
Это не ошибка в C++, но VS может дать вам некоторые горе. – juanchopanza
@Danh отредактировал вопрос, чтобы объяснить разницу. –
Аналогичный вопрос: http://stackoverflow.com/questions/4866425/mixing-class-and-struct –