2012-03-24 13 views
0

Ich verwendete Forward-Deklaration und enthält in einem kleinen Projekt.Forward-Deklaration und enthalten

Aber manchmal, wenn ich eine Datei erstellt habe.

A, die C und D.

Und dann sind in B die A, C, D umfasst ich einige Probleme hatte, fügte ich die Vorwärts-Erklärung zu.

Ich bemerkte, dass ich manchmal nur die Vorwärts-Deklaration brauche, passiert es, weil, wenn ich es zuvor zu einer Datei hinzugefügt habe, die ich in der Datei enthält, wo die Forward-Deklaration ist? Wie wenn ich nur das A in B einschließe, also auch C und D? Ich habe eine Klasse, wo ich nur die Forward-Deklaration hinzufügen musste. Like:

Class a; 
Class b; 
Class R{ 
} 

dann die Datei eine umfasste die R, so dass ich nicht das ein in R enthalten müssen, wenn ich es täte, dass der Code nicht kompilieren. Es sagt etwas wie eine Klasse vor der {zu deklarieren.

Andere Fall ist:

A vorwärts declare B, aber derzeit sind B und B A enthalten .. es funktioniert, ich kann mir vorstellen, dass sein, weil die Zeit der Compiler "Paste" der A-Code in B, der nach vorn Die Deklaration teilt dem Compiler mit, dass die Klasse im Code enthalten ist. Wenn ich ifdef/ifndef benutze und Code b in einen einbeziehe, stürzt es ab, wenn ich das Include entferne, funktioniert es als Charm ^^

Danke.

+3

Was ist Ihre Frage? In der Regel gibt es Situationen, in denen eine Voranmeldung ausreichend ist. Aber ich kann nicht sehen, was deine Frage ist. –

+0

Nein, es ist nur ein Beispiel – Lefsler

+0

stackoverflow ist eine Q & A-Site. Werfen Sie einen Blick auf eine FAQ, die eine gute Frage ist und wie man sie stellt. Die Probleme, die Sie sehen (ohne Header-Wächter, Hinzufügen von ihnen führt zu Abstürzen) würde auf ein größeres Problem mit Ihrem Code hinweisen. – pmr

Antwort

-1

Ich bin zu müde, um über alle Abhängigkeiten nachzudenken, die Sie dort haben, aber denken Sie daran, dass #include nichts anderes ist als das Einfügen der enthaltenen Datei genau an die Stelle von #include. Dies wird rekursiv durchgeführt, bis alle # include-Direktiven erweitert sind.

Es ist auch gut gegen mehrere Einfügungen der gleichen Datei zu schützen, indem typische

#ifndef FILE_H 
#define FILE_H 
... 
#endif 
+1

Vielleicht sollten Sie nicht antworten, wenn Sie zu müde sind, um über die Frage nachzudenken, oder wenn die Frage nicht beantwortet werden soll? – pmr

1

Wenn Sie zirkuläre Abhängigkeiten einführen, die mit Vorwärtsdeklarationen gebrochen werden können, nur verwenden, um ein #ifndef/#endif Paar:

#ifndef _FILE_H_ 
#define _FILE_H_ 

/* ... header file specifications ... */ 

#endif /* _FILE_H_ */ 
+0

Seine etwas wie A forward deklarieren B, aber nicht B und B gehören A .. es funktioniert, ich stelle mir vor, dass es, weil die Zeit der Compiler den A-Code in B "einfügen" sagt der Compiler, dass die Klasse ist da unten im Code. Wenn ich ifdef/ifndef benutze und Code b in a einbete, stürzt es ab, wenn ich das include entferne, funktioniert es als charm ^^. – Lefsler

+0

Ich verstehe. Das hat Klarheit in das Thema gebracht. –

+0

Also, was passiert? XD, nur um zu bestätigen – Lefsler