In C müssen wir ein Strukturpräfix verwenden, wann immer wir eine Struktur deklarieren oder definieren wollen. Die Dinge wurden jedoch geändert, sobald die Struktur zu einer Art Klasse in C++ wurde. Wir müssen kein struct
Präfix mehr verwenden, wenn wir eine Struktur deklarieren. In diesem Sinne, ich denke, das Struktur-Tag in C
wurde ein Name eines Typs in C++
.Ich kann die Strukturdeklaration in C++ nicht verstehen
Es bedeutet jedoch nicht, dass wir kein struct
Präfix verwenden können. Wir können immer noch ein struct
Präfix verwenden. Zum Beispiel führt Bjarne Stroustrup, der Ersteller von C++, ein Beispiel für die Deklaration einer Struktur mit und ohne Präfix struct
ein, was mich verwirrt.
Unten sind Strukturdefinitionen, die versuchen, eine Struktur mit Template-Argument T zu erstellen. Diese kompilieren in Ordnung, ohne Fehler.
template<class T> struct linked_list {
T element;
linked_list<T> *next;
};
template<class T> struct linked_list {
T element;
struct linked_list<T> *next;
};
Nun sind unten Funktionsdeklarationen, deren Rückgabetyp und Argumenttyp Strukturen sind. Auch wenn diese von oben nicht anders sind, der erste von unten zwei Funktionsdeklarationen, die mit einer Struktur Präfix, ist mir einen Fehler mit Visual Studio C++ 2012
template<class T> struct linked_list<T> *add_list(T element, struct linked_list<T> *tail);
template<class T> linked_list<T> *add_list(T element, linked_list<T> *tail);
ich wirklich nicht verstehen, wie Dinge funktionieren. Ich verstehe die Unterschiede zwischen diesen Erklärungen nicht. Kann mir jemand eine detaillierte Erklärung geben?
Fragen Sie, warum Sie das Schlüsselwort 'struct' in C++ weglassen können? [Warum braucht C das Schlüsselwort struct und nicht C++?] (Http://stackoverflow.com/questions/8422775/why-does-c-need-struct-keyword-and-not-c) – Blastfurnace
Welcher Compiler bist du? benutzen? Nicht alle C++ entsprechen den Standards. – Anycorn
@Blastfurnace Danke. Ich habe jedoch noch eine Frage. Der Link, den Sie mir gegeben haben, sagte, wenn es keine Zweideutigkeit gibt, "erlaubt" C++ das Weglassen des Schlüsselworts struct. Das bedeutet, dass wir das Schlüsselwort struct weiterhin verwenden können. Daraus folgt, dass meine zweiten Codes mehrdeutig sind, weil sie mir einen Fehler geben. Ich sehe jedoch keine Zweideutigkeit. Was ist los mit dir? – isbae93