Ich habe einen Fehler in einer C++-Forward-Deklaration einer Klasse gefunden, die fälschlicherweise als deklariert wurde struct Book
anstatt class Book
. Ich denke, Book war früher eine Struktur, wurde in eine Klasse geändert, aber die Forward-Deklarationen blieben.
Buch.h:
class Book {
...
};
Bibliothek.h:
struct Book;
class Library {
std::vector<Book*> books;
};
Es gab keine Compiler-Warnungen und das resultierende Programm schien gut zu funktionieren. Es hat mich neugierig gemacht: Kann das theoretisch jemals zu Problemen führen? Es ist nur ein Zeiger, ja, aber wenn die Klasse zum Beispiel virtuelle Methoden und Mehrfachvererbung hätte, könnten die Zeiger anders sein?
Ich kenne die Unterschiede zwischen Klasse/Struktur in Bezug auf die Standardeinstellung öffentlich/privat, aber ich frage speziell nach den Vorwärtsdeklarationen und möglichen Konsequenzen ihres Austauschs.
AKTUALISIEREN Neuere Versionen von Xcode geben jetzt diese Warnung aus, wenn es eine Diskrepanz gibt:
Struct 'Book' was previously declared as a class; this is valid, but may result in linker errors under the Microsoft C++ ABI
Es ist kein Fehler in C++, aber VS könnte Ihnen etwas Kummer bereiten.
– Juanchopanza
22. November 2016 um 9:43 Uhr
@Danh bearbeitete Frage, um den Unterschied zu erklären.
– Tomas Andrle
22. November 2016 um 10:42 Uhr
Ähnliche Frage: stackoverflow.com/questions/4866425/mixing-class-and-struct
– Tomas Andrle
22. November 2016 um 18:02 Uhr