Struct Prototyp vor der main () -
Dass ein struct
-
typedef struct Point{
....
}
Ich schreiben will seine prototype
vor der main()
, so etwas wie -
typedef struct Point ;
int main() {
Point p1 ,p2 ;
...
}
typedef struct Point {
int x;
int y;
} Point;
Den oben genannten gibt mir Fehler - unknown type name 'Point'
.
Wie könnte ich erreichen, richtig ?
Edit:
Ich weiß, es würde funktionieren, wenn ich definieren zu struct
vor der main()
. Ich möchte nur wissen, ob es irgendwelche prototye
ähnlich wie function prototye
.
- Ihre Verwendung des Wortes " Prototyp ist falsch. Prototypen nur um die Funktionen.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Diese Erklärung:
ist nicht gültig im C.
Kann man nicht erreichen das gleiche mit
struct Point
Erklärung nachmain
denn die Umsetzung hat, um zu wissen, die Speicherung vonPoint
Objektep1
undp2
wenn Sie erklären, Sie inmain
.struct
bis es vollständig definiert ?Point
immain
aber das ist nicht Ihr Fall.Können Sie nicht tun, weil die C-Sprache ist organisiert, um einen pass Zusammenstellung. An der Stelle, wo ein Typ-name ist verwendet, um zu deklarieren oder definieren etwas, dass Art wurden zuvor erklärt.
Gibt es eine Lockerung dieser Regel, nämlich: können Sie definieren unvollständigen Typen in C. Aber unvollständig-Typen können nicht verwendet werden, um Objekte zu definieren: zumindest nicht bestimmte Arten von Objekten. Das ist also ungültig:
Den letzten Erklärung oben, rundet der Typ
struct foo
ermöglicht diestruct foo x;
definition gültig sein. So gibt es einige "lexikalisch rückwirkend" - Aktion in der C-Typ-system; es ist nur nicht allgemein.Situationen gekennzeichnet als "nicht in Ordnung" erfordern die struct-Typ werden an dieser Stelle vollständig in den Quellcode.
Wenn Sie wollen, definieren von lokalen Variablen der Typ
Point
in Ihremmain
Funktion, die diesen Typ müssen deklariert werden und vollständig, bevor Sie diese Funktion aus. Wenn dieser Typ nicht abgeschlossen ist, können Sie noch definieren von Variablen vom TypPoint *
: Zeiger aufPoint
. Aber diese Zeiger können nicht dereferenziert.Werden Sie nicht in der Lage, das zu tun, denn würde der compiler wissen muss, wie viel Speicherplatz zum reservieren für Punkt, wenn Sie es zuweisen. Prototyping wäre nicht geben Ihnen diese Informationen.
Könnten Sie dies tun, wie die Größe des Mauszeigers wird bekannt:
Ich weiß nicht, ob das Ihren Bedürfnissen gerecht wird, obwohl
Das problem ist, dass Sie die Erklärung Ihrer Struktur nach
main
.sogar besser ist diese:
Legen Sie die Erklärung in einem anderen Datei (z.B.
Point.h
), dass wird am oberen Rand Ihrermain()
- Datei, und legen Sie die definition in einem separat kompiliert Umsetzung-Datei (z.B.Point.cpp
).