2016-05-23 11 views
0

Ist es möglich, eine Klasse zu deklarieren und dann ihre Member-Funktionen zu verwenden? Ich versuche, dies zu tun:Wie kann ich eine Klasse deklarieren und ihre Member-Funktionen später in C++ verwenden?

class Second; 

class First{ 
private: 
    int x=0; 
public: 
    void move(Second* s,int i){ 
    s->setLine(i); 
    s->called(true); 
    } 
    int getX(){return x;} 
} 

class Second{ 
private: 
int line=2; 
bool cal=false; 
public: 
void setLine(int l){line = l;} 
void called(bool b){cal=b} 
bool interact(First* f){ 
    if ((f->getX())>3) 
    return true; 
    else 
    return false; 
} 
} 

Mein eigentliches Problem ein wenig komplexer ist und die funcions mehr Dinge zu tun, aber was ich versuche, diese beiden Klassen sich die funcions verwenden zu tun ist, und habe sie dieses in Wechselwirkung treten Weg. Weiß jemand, ob es einen Weg gibt, dies zu tun?

+7

trennen sie in Header und Implementierungsdateien – ArchbishopOfBanterbury

+0

Ich habe versucht, dass aber der Compiler gab mir eine Fehlermeldung „forward-Deklaration der Klasse Zweite“ i vielleicht so gedacht, wenn sie zusammen – helpme

+0

ein Problem sein würde es waren http @helpme Check: //stackoverflow.com/questions/625799/resolve-header-include-circular-dependencies-in-c- –

Antwort

1

Sie können die Definition von First::move außerhalb der Klasse nach der Definition von Second setzen. Nur die Deklaration muss innerhalb der Definition von First erscheinen.

Sie könnten tatsächlich die Definition First::move in eine CPP-Datei und nicht in eine Kopfzeile setzen.

+0

Ich habe das gerade mit Header-Dateien gemacht, die dort die Funktionen deklarieren, aber dann, wenn ich die cpp-Dateien mache und sie definiere, bekomme ich immer noch ein Fehler vom Compiler. Liegt es daran, dass beide Klassen Funktionen voneinander benutzen? – helpme

+0

Wahrscheinlich nicht; eher fehlen. Aber ohne deinen Code zu sehen, kann ich es nicht sagen. –

+0

Ja, ich habe eine Include-Entschuldigung vermisst. Danke für deine Hilfe, es funktioniert jetzt! – helpme

3

Ist es möglich, eine Klasse zu deklarieren und dann ihre Elementfunktionen zu verwenden?

Nein, ist es nicht. Sie können auf kein Mitglied einer forward deklarierten Klasse, Variablen, Funktionen, Enums, verschachtelten Typen usw. zugreifen, bis die Klasse definiert ist.

Sie müssen die Implementierung der Funktion verschieben, die die Memberfunktion der forward deklarierten Klasse aufruft, nachdem die forward deklarierte Klasse definiert wurde.

+0

ja danke ich habe alles in Header und CPP-Dateien getrennt, so dass ich zuerst die Funktionen deklarieren und dann definieren und es funktioniert jetzt. Danke für die Hilfe! – helpme

1

Das Folgende wird den Trick für Sie tun, aber es ist besser, Deklaration und Implementierung zu trennen.

class Second; 

class First{ 
private: 
    int x=0; 
public: 
    void move(Second* s,int i); //<- move implementation after Second's declaration 
    int getX(){return x;} 
} 

class Second{ 
private: 
int line=2; 
bool cal=false; 
public: 
void setLine(int l){line = l;} 
void called(bool b){cal=b} 
bool interact(First* f){ 
    if ((f->getX())>3) 
    return true; 
    else 
    return false; 
} 
}; 

void First::move(Second* s,int i){ 
s->setLine(i); 
s->called(true); 
} 
+0

danke für die Hilfe Ich habe die Deklaration und Implementierung wie vorgeschlagen getrennt und es funktioniert jetzt! – helpme