2010-07-06 22 views
7

Ich mache ein Spiel und ich habe eine Klasse namens Man und eine Klasse namens Block in ihrem Code sie beide brauchen einander, aber sie sind in separaten Dateien. Gibt es eine Möglichkeit, eine Klasse "vorzudefinieren"? Wie das @class-Makro von Objective-C?C++: Zwei Klassen, die einander brauchen

+2

Klingt wie, was Sie wollen, ist eine Vorwärtsdeklaration. – mooware

+0

+1 für BlockDude. –

Antwort

5

Es wird eine zirkuläre Abhängigkeit genannt. In der Klasse Two.h

class One; 

class Two { 
    public: 
    One* oneRef; 
}; 

Und in der Klasse One.h

class Two; 

class One { 
    public: 
    Two* twoRef; 
}; 

Die "Klasse One"; und "Klasse Zwei" Direktiven vergeben jeweils einen Klassennamen "Eins" und "Zwei"; aber sie definieren keine anderen Details über den Namen hinaus. Daher können Sie Zeiger der Klasse erstellen, aber Sie können nicht die ganze Klasse wie so umfassen:

class One; 

class Two : public One { 
}; 

class Three { 
    public: 
    One one; 
}; 

Der Grund die beiden obigen Beispiele nicht kompiliert werden, weil während der Compiler es weiß, ist eine Klasse Eins, es doesn‘ Sie wissen, welche Felder, Methoden oder virtuellen Methoden die Klasse Eins enthalten könnte, weil nur der Name definiert wurde, nicht die eigentliche Klassendefinition.

11

Ja.

class Man; 

Dies wird Man als "unvollständiger Typ" deklarieren. Sie können Zeiger oder Verweise darauf und einige andere Dinge deklarieren, aber Sie können keine Instanz erstellen oder auf Mitglieder davon zugreifen. Dies ist keine vollständige Beschreibung dessen, was Sie mit einem unvollständigen Typ machen können und was nicht, aber es ist die allgemeine Idee.

+1

Wichtig zu beachten, Sie können später weitermachen und den vollständigen Typ einschließen und Zugriff erhalten. Sie könnten unvollständige Typen in der Kopfzeile verwenden und dann die vollständige Kopfdefinition in die cpp aufnehmen, um sie zu verwenden. –

Verwandte Themen