I found a mistake in a C++ forward declaration of a class, which was wrongly declared as struct Book
instead of class Book
. I think Book used to be a struct, got changed to a class but the forward declarations remained.
Book.h:
class Book {
...
};
Library.h:
struct Book;
class Library {
std::vector<Book*> books;
};
There were no compiler warnings and the resulting program seemed to work fine. It made me curious: in theory, can this ever cause a problem? It's just a pointer, yes, but for example, if the class had virtual methods, multiple inheritance, could the pointers be different?
I know the differences between class/struct regarding default public/private but I'm asking specifically about the forward declarations and possible consequences of swapping them.
UPDATE newer versions of Xcode now give this warning when there's a mismatch:
Struct 'Book' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI
See Question&Answers more detail:os