Können wir Struktur nach dem Hauptprogramm in C++ definieren? Wenn wir Funktionen definieren, können wir die Funktion vor dem Hauptprogramm deklarieren und dann die Funktionsdefinition nach der Hauptfunktion schreiben. Ich wollte wissen, ob wir bei der Definition von Strukturen etwas Ähnliches tun können. Vielen Dank.Können wir Strukturen nach der Hauptfunktion in C++ definieren?
Antwort
Können wir Struktur nach dem Hauptprogramm in C++ definieren?
Ich nehme an, dass Sie die main
Funktion meinen. Ja, wir können Klassen (einschließlich Strukturen) nach main
Funktion definieren. Eine Demo:
int main(){}
struct S{};
Wenn wir Funktionen definieren, können wir die Funktion vor dem Hauptprogramm deklariert und dann die Funktionsdefinition nach dem Hauptprogramm schreiben. Ich wollte wissen, ob wir bei der Definition von Strukturen etwas Ähnliches tun können.
Gleiches gilt für Klassen, die Sie vor einer Funktion (forward) deklarieren und danach definieren können. Die Verwendung von unvollständigen (deklarierten, aber nicht definierten) Klassen ist jedoch sehr begrenzt. Sie können Zeiger und Verweise auf sie definieren, aber Sie können sie nicht erstellen oder keine Mitgliedsfunktionen aufrufen. Eine Demo:
struct S; // (forward) declaration of a class
S* factory(); // (forward) declaration of a function
int main(){
S* s = factory(); // OK, no definition required
// s->foo(); // not OK, S is incomplete
// S s2; // not OK
}
struct S{ // definition of a class
void foo(); // declaration of a member function
};
S* factory() {
static S s; // OK, S is complete
s.foo(); // OK, note how the member function can be called
// before it is defined, just like free functions
return &s;
}
void S::foo() {} // definition of a member function
Bearbeiten: Wie @ user2079303 in den Kommentaren erwähnt, habe ich den Begriff "Forward-Deklaration" falsch verwendet. Ich habe meine Antwort entsprechend aktualisiert.
Sie können Strukturen weiterleiten, wenn Sie nur einen Zeiger auf diese Struktur speichern möchten. Sie können Methoden für diesen Zeiger jedoch nur aufrufen, nachdem die Struktur definiert wurde.
Sie können auch Methoden von Strukturen in der Strukturdefinition weiterleiten, während Sie diese Methoden später definieren.
#include <iostream>
// incomplete definition of struct S
// methods of the struct are only declared here
struct S
{
S();
void foo();
int bar;
};
int main()
{
S s;
s.foo();
}
// definition of the struct's methods
S::S() : bar(42) {}
void S::foo() { std::cout << "bar is " << bar << "\n"; }
Diese Definition mit zukunfts deklarierten Methoden ist die hauptsächliche Verwendung von Header (.h
-Dateien). Sie können Ihre Struktur in der Kopfzeile definieren und die Kopfzeile in die Dateien einfügen, in denen die Struktur verwendet wird. Die Definition Ihrer Methoden geht in die Quelldatei(). Angewandt auf den Code oben bedeutet das:
Datei S.h
struct S
{
S();
void foo();
int bar;
};
Datei S.cpp
#include "S.h"
#include <iostream>
S::S() : bar(42) {}
void S::foo() { std::cout << "bar is " << bar << "\n"; }
Datei main.cpp
#include "S.h"
int main()
{
S s;
s.foo();
}
Wenn Sie kompilieren S.cpp
und main.cpp
und dann li Wenn Sie die resultierenden Objektdateien bearbeiten, erhalten Sie das gleiche Verhalten wie am Anfang des Codes.
@ user2079303 ist richtig, Vorwärtsdeklaration kann verwendet werden, um Zeiger zu definieren. –
Ein anderes Beispiel mit einem vorverlegten 'struct': http://coliru.stacked-crooked.com/a/8789088991c57916 –
' void main() 'ist nicht korrekt, es sollte' int main() 'sein. – mch
- 1. Hauptfunktion Konzept in C
- 2. Können wir konstante Array in Codeigniter definieren?
- 3. Können wir statische Funktionen in tcOO definieren?
- 4. Können wir Autoinkrementattribute in Kerndaten definieren?
- 5. Wie können wir Ausgabeparametergröße in der gespeicherten Prozedur definieren?
- 6. Strukturen initialisieren, ohne Elemente der Struktur zu definieren - C
- 7. Können wir Enum innerhalb einer Funktion definieren?
- 8. C++: Implementieren benutzerdefinierter Hauptfunktion
- 9. Können wir globale Variablen machen, indem wir eine Klassenvariable außerhalb der Klasse mit dem "Punkt" Operator definieren?
- 10. Können wir eine Monad-Instanz für WrappedArrow definieren?
- 11. Wie Hauptfunktion Anruf in C++
- 12. Können wir den MACRO-Namen als spezifische Zeichenfolge definieren?
- 13. Rangierung C++ Strukturen in C#
- 14. Können wir eine Funktion ohne einen Namen in C haben?
- 15. Suche nach der Adresse einer Hauptfunktion lokale Variable
- 16. Können wir iPhone Programm in C schreiben?
- 17. können wir das in C++ schreiben?
- 18. Können wir PHP-Sitzungsvariablen an einem Ort definieren?
- 19. Strukturen in C
- 20. Warum können wir Methoden- oder Klassennamen nicht als String definieren?
- 21. cut: Können wir mehrere Leerzeichen als Trennzeichen definieren?
- 22. Warum können wir eine Variable im Switch nicht zweimal definieren?
- 23. können wir nur Konstruktor in der Elternklasse deklarieren und in einer anderen Klasse in Java definieren?
- 24. Strukturen Array in C
- 25. C Bitfelder Größe der Strukturen
- 26. Strukturen in C++ *
- 27. INotifyPropertyChanged in C# Strukturen
- 28. Wie können wir Webjobs nach der Bereitstellung neu starten?
- 29. Understaning der statischen Objekte in der Hauptfunktion
- 30. Nach der Überprüfung können wir TestFlight arbeiten lassen
Warum versuchst du es nicht? – Netwave
Ja, das kannst du tun. Lookup _forward declaration_. –
http: //en.cppreference.com/w/cpp/Sprache/Klasse # Forward_declaration –