Vorab-Deklaration will nicht

Hallo Leute

Hier meine Kurzfassung:

// error: Siehe Deklaration von 'WinApp'
class WinApp;
class Page
{
 Page (WinApp \*parent)
 {
// error C2027: Verwendung des undefinierten Typs "WinApp"
// error C2227: Der linke Teil von '-\>wantTimer' muss auf Klasse/Struktur/Union zeigen
 parent-\>wantTimer(1000 / 32);
 }
};

class WinApp
{ 
 int wantTimer(int milliSec);
};

Klar kriege ich in „Page“ von VC6 immer noch den Fehler „nicht deklariert“ für den WinApp-Zeiger, dank der kuriosen Regel von C++ „muss weiter oben deklariert sein“, die ja technisch nicht zu begründen ist (siehe Java).
Die Vorab-Deklaration erlaubt natürlich nur Zeiger, keine Werte, aber das habe ich ja.

Auch wenn ich void-Zeiger statt WinApp versuche, bleibt mir immer noch der dritte Fehler. Dabei habe die „dirty tricks“ sonst das Gute, dass die funktionieren.
Was kann ich da noch machen (Page muss oberhalb von WinApp sein)?

lG
Martin B

Hi,

probier mal die Deklaration von der Definition der Page-Klasse zu trennen und in eine Headerdatei zu schreiben.
Das hat bei mir schon geholfen.

Gruß Yelmalio

[Bei dieser Antwort wurde das Vollzitat nachträglich automatisiert entfernt]

Hallo Yelmalio,

probier mal die Deklaration von der Definition der Page-Klasse
zu trennen und in eine Headerdatei zu schreiben.
Das hat bei mir schon geholfen.

Habe ich jetzt, aber hilft bei mir leider nicht, :frowning:
Ich muss da wohl irgendwas kompliziertes ersinnen.

Vielen Dank für den Tipp!
Martin B

Hallo,

trenne am besten Definition und Deklaration:

WinApp.h

class WinApp
{
int wantTimer(int milliSec);
};

Page.h

class WinApp;
class Page
{
Page (WinApp *parent);
};

Page.cpp

#include „Page.h“
#include „WinApp.h“
Page::stuck_out_tongue:age (WinApp *parent)
{
Klasse/Struktur/Union zeigen
parent->wantTimer(1000 / 32);
}

Die Vorab-Deklaration erlaubt natürlich nur Zeiger, keine
Werte, aber das habe ich ja.

Nur verwendest Du den Zeiger in der Definition. Dann muss bekannt sein, wie das Objekt aussieht. Ich verstehe das so, dass der C+±Compiler stumpf von oben nach unten liest und nur das kennt, was vorher da war. Er erkennt also ‚dies ist eine Klasse‘ und ‚dies ist ein Zeiger auf ein Objekt einer Klasse‘, kann das Objekt aber nicht verwenden, solange er nicht die Deklaration kennt.

Viele Grüße
Diether

Hallo Diether,

trenne am besten Definition und Deklaration:

Wenn WinApp weiter oben ist brauche ich wohl auch keine Vorab-Deklaration mehr dafür. Ich habe Page weiter oben, weil die in WinApp ständig vorkommt.
Aber es stimmt, dass ich bisher immer Definition und Deklaration zusammen geschmissen habe, alles in eine *.h, zwecks der einfacheren Handhabung (Backups, schicken/kriegen).

Die Vorab-Deklaration erlaubt natürlich nur Zeiger, keine
Werte, aber das habe ich ja.

Nur verwendest Du den Zeiger in der Definition. Dann muss
bekannt sein, wie das Objekt aussieht. Ich verstehe das so,
dass der C+±Compiler stumpf von oben nach unten liest und nur
das kennt, was vorher da war. Er erkennt also ‚dies ist eine
Klasse‘ und ‚dies ist ein Zeiger auf ein Objekt einer Klasse‘,
kann das Objekt aber nicht verwenden, solange er nicht die
Deklaration kennt.

Aha, das ist feinsinnig unterschieden. Ich versuche das mal mit extra cpp’s.
Vielen Dank für den Tipp.

freundliche Gruesse
Martin B