Zum Inhalt springen
View in the app

A better way to browse. Learn more.

Fachinformatiker.de

A full-screen app on your home screen with push notifications, badges and more.

To install this app on iOS and iPadOS
  1. Tap the Share icon in Safari
  2. Scroll the menu and tap Add to Home Screen.
  3. Tap Add in the top-right corner.
To install this app on Android
  1. Tap the 3-dot menu (⋮) in the top-right corner of the browser.
  2. Tap Add to Home screen or Install app.
  3. Confirm by tapping Install.

Empfohlene Antworten

Veröffentlicht

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

Hallo Klotzkopp,

das habe ich bereits versucht; es führt zu noch mehr Fehlern (u.a., dass auch die Document-Klasse nicht mehr gefunden wird) - kann dir die Fehlermeldungen morgen abend posten (bin an einem anderen Rechner).

Gruß,

Technician

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.

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 ;).

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.

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

Erstelle ein Konto oder melde dich an, um einen Kommentar zu schreiben.

Configure browser push notifications

Chrome (Android)
  1. Tap the lock icon next to the address bar.
  2. Tap Permissions → Notifications.
  3. Adjust your preference.
Chrome (Desktop)
  1. Click the padlock icon in the address bar.
  2. Select Site settings.
  3. Find Notifications and adjust your preference.