Zum Inhalt springen

Problem mit Vorwärtsdeklaration


Empfohlene Beiträge

Hallo,

diese Angelegenheit treibt mich zur schieren Verzweiflung...

Klasse SampleClass enthält Zeiger auf Klasse MyViewClass

und umgekehrt

(MyViewClass ist von CFormView abgeleitet, falls das wichtig sein sollte).

Problem wurde mit Vorwärtsdeklaration gelöst:

in MyViewClass.h steht #include "SampleClass.h"

in SampleClass.h steht class MyViewClass;

SampleClass bekommt im Konstruktor einen Pointer auf ein Class1-Objekt mitgegeben:

SampleClass::SampleClass(MyViewClass* pVC)

{

myViewPointer=pVC;

}

Das funktioniert noch einwandfrei.

Nun möchte ich in SampleClass eine Methode der anderen Klasse aufrufen:

myViewPointer->Method();

und erhalte die Fehlermeldung(en):

F:\_dev\_vcpp\my_projects\Try\SampleClass.cpp(214) : error C2027: Verwendung des undefinierten Typs "MyViewClass"

F:\_dev\_vcpp\my_projects\Try\SampleClass.h(9) : Siehe Deklaration von 'MyViewClass'

F:\_dev\_vcpp\my_projects\Try\SampleClass.cpp(214) : error C2227: Der linke Teil von '->Method' muss auf Klasse/Struktur/Union zeigen

Wer kann mir weiterhelfen?

Irgendwie muss das doch funktionieren :(

Gruß,

Technician

Link zu diesem Kommentar
Auf anderen Seiten teilen

Es wäre aber auch möglich, daß die Deklratation von MyViewClass nicht einwandfrei ist - das hätte die gleichen Fehlermeldungen zur Folge.

Was meinst du damit?

Ich selbst habe an MyViewClass noch nichts geändert außer dem Hinzufügen der einen Methode die aufgerufen werden soll. Ansonsten wurde die Klasse automatisch erzeugt.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wie wäre es mit einem

#include "MyViewClass.h"

in SampleClass.cpp?

Ich habe jetzt noch einmal

#include "MyViewClass.h"

in SampleClass.cpp hinzugefügt.

Der Effekt des ganzen ist, dass nun diverse Dinge in "MyViewClass.h" nicht mehr erkannt werden. Konkret erhalte ich nun folgende Fehlermeldungen:

MyViewClass.h(27): error C2065: 'IDD_MATICA_FORM' : nichtdeklarierter Bezeichner

MyViewClass.h(27) : error C2057: Konstanter Ausdruck erwartet

MyViewClass.h(34) : error C2143: Syntaxfehler : Fehlendes ';' vor '*'

MyViewClass.h(34) : error C2501: 'MyViewClass': Fehlende Speicherklasse oder Typbezeichner

MyViewClass.h(34) : error C2501: 'GetDocument' : Fehlende Speicherklasse oder Typbezeichner

das ganze bezieht sich im Quellcode auf die fett gedruckten Zeilen - die oberen zwei Fehlermeldungen auf die erste, die letzten drei auf die andere:

public:

//{{AFX_DATA(MyViewClass)

enum { IDD = IDD_MATICA_FORM };

CString m_Console;

CString m_List;

//}}AFX_DATA

public:

CMaticaDoc* GetDocument();

Die vorherigen Fehler tauchen übrigens nicht mehr auf - was mich angesichts der neuen Fehler auch nicht wirklich glücklich macht ;).

Link zu diesem Kommentar
Auf anderen Seiten teilen

MyViewClass.h(27): error C2065: 'IDD_MATICA_FORM' : nichtdeklarierter Bezeichner
Das sollte mit einem #include "resource.h" zu beheben sein, vor dem anderen #include.

MyViewClass.h(34) : error C2501: 'MyViewClass': Fehlende Speicherklasse oder Typbezeichner

MyViewClass.h(34) : error C2501: 'GetDocument' : Fehlende Speicherklasse oder Typbezeichner

Im Code steht CMaticaDoc, nicht MyViewClass :confused:

Jedenfalls könntest du zwischen die beiden #includes noch eines für die Headerdatei einfügen, in der diese Klasse deklariert wird.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Im Code steht CMaticaDoc, nicht MyViewClass :confused:

sorry, ist "MyDocClass".

(habe die Klassen hier fürs Forum umbenannt, damit übersichtlicher - und das dabei übersehen...)

... Jedenfalls, jetzt funktioniert alles :)

Mich irritierte es sehr, dass ich diese Includes, die du mir jetzt hilfreicherweise empfohlen hast, zuvor (bevor ich die Vorwärtsdeklaration eingebaut hatte) nicht benötigte.

Vielen Dank!

Technician

Link zu diesem Kommentar
Auf anderen Seiten teilen

Dein Kommentar

Du kannst jetzt schreiben und Dich später registrieren. Wenn Du ein Konto hast, melde Dich jetzt an, um unter Deinem Benutzernamen zu schreiben.

Gast
Auf dieses Thema antworten...

×   Du hast formatierten Text eingefügt.   Formatierung wiederherstellen

  Nur 75 Emojis sind erlaubt.

×   Dein Link wurde automatisch eingebettet.   Einbetten rückgängig machen und als Link darstellen

×   Dein vorheriger Inhalt wurde wiederhergestellt.   Editor leeren

×   Du kannst Bilder nicht direkt einfügen. Lade Bilder hoch oder lade sie von einer URL.

Fachinformatiker.de, 2024 by SE Internet Services

fidelogo_small.png

Schicke uns eine Nachricht!

Fachinformatiker.de ist die größte IT-Community
rund um Ausbildung, Job, Weiterbildung für IT-Fachkräfte.

Fachinformatiker.de App

Download on the App Store
Get it on Google Play

Kontakt

Hier werben?
Oder sende eine E-Mail an

Social media u. feeds

Jobboard für Fachinformatiker und IT-Fachkräfte

×
×
  • Neu erstellen...