Preprocessor
-
Hallo,
ich habe zwei Files :
#ifndef _FILE1_H #define _FILE1_H #include <iostream> #include "file2.h" class file1 { public : file1(); ~file1(); void func1(file2*); } #endifund
#ifndef _FILE2_H #define _FILE2_H #include <iostream> #include "file1.h" class file2 { public : file2(); ~file2(); void func2(file1*); } #endifwenn ich dass compilieren möchte, kommt
die Fehlermeldung:In file included from file1.h:5,
from file1.cc:1:
file2.h:12: error: `file1' has not been declared
Error 1
g++ version 3.4.6 20060404 (Red Hat 3.4.6-10)
Die Klassen benötigen sich gegenseitig. Das
lässt aber der Preprocessor nicht zu? Oder
was ist da los?
-
include raus und ueber forward-declaration
class file2; class file1 { ... };
-
Danke
-
NoPanic2007 schrieb:
In getrennten Files ist das nicht möglich?
Eine forward-declaration ist nicht eine vollständige Deklaration. Und das der Compiler meckert ist irgendwie klar. Ein include kopiert den Text der Datei an die Stelle, in deinen Fall führt dies zum Klassischen: "Was kommt zuerst, das Huhn oder das Ei" - Problem.
-
Jetzt kommt :
error: invalid use of undefined type
struct file1' error: forward declaration ofstruct file1'Ich benutze in der Funktion func2(file1*) die Objekt
aus "class file1".Gibt es einen anderen Weg?
-
Hast du die jeweiligen includes in den cpps drin?
-
-
Du mußt schon das includieren, was du auch brauchst. Wenn eine Funktion in File1.cc Zugriff auf Typen benötigt, die in File2.h deklariert sind, dann mußt du File2.h dort auch deklarieren. In den cpps führt das auch zu keinen Problemen.
-
Jetzt funktioniertz! Danke.