Hallo alle zusammen, ich hänge seit heute morgen an eine dumme Fehler. Es wird mir eine Fehlermeldung, die besagt, dass die Klasse nicht definiert ist obwohl es schon includet ist. hat jemenden ein Idee vielleicht was ist die Ursache??? Danke
Sourcecode zeigen, Fehlermeldung zeigen, ansonsten sinnlos. Copy & paste ist sooooo schwer! ;-)
Vielleicht ; am Ende der Klassendeklaration vergessen ? Habe auch schon Compiler erlebt, die da unbedingt noch ein CR wollen ...
Hallo und sorry für die unvollstndige Beschreibung des Problems: anbei einen Abschnitt der Quellencode: -->KlasseA #include "KlasseB.h" class KlasseA { .... //Implementiereung der Schnitte Stelle void KlasseB::getmProvider() { //Hier kommen verschiedene Pobleme: KlasseA* obj = new obj(); KlasseC* m_pro = obj->getProv(); } } -->KlasseB class KlasseB { public:.... KlasseC* getProv(){ return m_pro;// und genau an diesen Instanz zugreifen möchte } Meldungsfehler: error C2065: 'KlasseA': nichtdeklarierter Bezeichner error C2065:'obj': nichtdeklarierter Bezeichner error C2061: Syntaxfehler: Bezeichner 'KlasseA' error C2065: 'obj': nichtdeklarierter Bezeichner error C2227: Links von "->getProv" muss sich ein Zeiger auf Klassen-/Struktur-/Union-/generischen Typ befinden. ich hoffe es ist einige massen klar wo es das Problem Danke in voraus
das Projekt ist in Visual Studio2010 c++ implementiert
simo schrieb: > das Projekt ist in Visual Studio2010 c++ implementiert Dann ist 42 falsch, hier lautet die richtige Antwort 23.
Vielleicht ; am Ende der Klassendeklaration vergessen ?
simo schrieb: > anbei einen Abschnitt der Quellencode: > > > -->KlasseA > #include "KlasseB.h" > class KlasseA { > > .... > //Implementiereung der Schnitte Stelle > void KlasseB::getmProvider() > { > //Hier kommen verschiedene Pobleme: > > KlasseA* obj = new obj(); > KlasseC* m_pro = obj->getProv(); > > } > } Hier deklarierst Du in KlasseA eine Memberfunktion von KlasseB. Was soll das?
Rufus Τ. Firefly schrieb: > Hier deklarierst Du in KlasseA eine Memberfunktion von KlasseB. Jepp, und darin schreibt er: ... KlasseC* m_pro = obj->getProv(); ... wohlgemerkt in der Definition von Klasse A und in der Definition von Klasse B: ... KlasseC* getProv(){ return m_pro;// und genau an diesen Instanz ... Da beisst dich die Katze vollends in den Schwanz. In A initialisiert er m_pro durch Aufruf der Funktion getProv() und in B wird die Funktion getProv() definiert in dem auf eine Variable m_pro zugegriffen wird. Das ist völlig konfus! Entweder fehlt hier noch eine Kilotonne Code für das Verständnis, oder der TO sollte sich zuerst mal mit C# oder klassischem C beschäftigen und danach gaaanz viel über objektorientiertes Programmieren LESEN!
Rufus Τ. Firefly schrieb: > simo schrieb: >> anbei einen Abschnitt der Quellencode: >> >> >> -->KlasseA >> #include "KlasseB.h" >> class KlasseA { >> >> .... >> //Implementiereung der Schnitte Stelle >> void KlasseB::getmProvider() >> { >> //Hier kommen verschiedene Pobleme: >> >> KlasseA* obj = new obj(); >> KlasseC* m_pro = obj->getProv(); >> >> } >> } > > Hier deklarierst Du in KlasseA eine Memberfunktion von KlasseB. > > Was soll das? Hier: >> //Implementiereung der Schnitte Stelle >> void KlasseB::getmProvider() >> { >> //Hier kommen verschiedene Pobleme: >> >> KlasseA* obj = new obj(); >> KlasseC* m_pro = obj->getProv(); >> >> } >> } Ich versuche durch die Memberfunktion "getmProvider()" den Instanz "m_pro" damit ich auf ihm zugreifen kann, da ich ihm brauche für eine andere Implementierung. Kurz zu "m_pro": er ist als Laufer in der Datenbanken. Für das schreiben verantwortlich und deswegen habe ich in den gleichen Datenbanken ein Ändereung gemacht um die Wiederholung in der Datenbanken zu vermeiden und deswegen brauche ich "m_pro"
Schön und gut, aber Memberfunktionen gehören zu einer Klasse und werden in der Deklaration dieser Klasse deklariert. Du aber willst eine Memberfunktion einer völlig anderen Klasse in einer Klasse deklarieren bzw. sogar implementieren. Da haut Dir der Compiler vollkommen zu Recht auf die Pfoten.
Rufus Τ. Firefly schrieb: > aber Memberfunktionen gehören zu einer Klasse und werden > in der Deklaration dieser Klasse deklariert. Das ist nicht ganz richtig: Menberfunktion "getProv()" gehört zu KlasseA und die andere "getmProvider()" gehört zu KlasseB > > Du aber willst eine Memberfunktion einer völlig anderen Klasse in einer > Klasse deklarieren bzw. sogar implementieren Nein : diese Implementierung: void KlasseB::getmProvider() >> { >> //Hier kommen verschiedene Pobleme: >> >> KlasseA* obj = new obj(); >> KlasseC* m_pro = obj->getProv(); >> >> } >> } ermöglicht mir nur der Zugriff auf "m_pro"
Dein Quellcodefragment sagt was anderes:
1 | -->KlasseA |
2 | #include "KlasseB.h" |
3 | class KlasseA { |
4 | |
5 | ....
|
6 | //Implementiereung der Schnitte Stelle
|
7 | void KlasseB::getmProvider() |
8 | {
|
9 | //Hier kommen verschiedene Pobleme:
|
10 | |
11 | KlasseA* obj = new obj(); |
12 | KlasseC* m_pro = obj->getProv(); |
13 | |
14 | }
|
15 | }
|
Das ist immer noch in der Deklaration von KlasseA.
simo schrieb: > Das ist nicht ganz richtig: > Menberfunktion "getProv()" gehört zu KlasseA > und die andere "getmProvider()" gehört zu KlasseB Und warum definiert du dann getProv() in Klasse B und getmProvider() in Klasse A???? Sorry aber das ist mir zu konfus. Du solltest wirklich nochmal ganz von vorne anfangen und erst mal ein Buch über C++ und ein 2. über Klassendesign lesen. Tschüß
und wie soll ich den ambesten umgehen???
simo schrieb: > und wie soll ich den ambesten umgehen??? Was willst du umgehen? Das Lesen eines C++ Buchs?
1 | void KlasseB::getmProvider() |
2 | { |
3 | //Hier kommen verschiedene Pobleme: |
4 | |
5 | KlasseA* obj = new obj(); |
6 | KlasseC* m_pro = obj->getProv(); |
7 | |
8 | } |
raus aus Klasse A und rein in Klasse B ;D
Sinnvoll ist eine strukturierte Vorgehensweise. Trenne die drei Klassen so auf, daß Du je Klasse eine Headerdatei mit der Deklaration und ein C++-Sourcefile mit der Implementierung hast. Wenn in einer der Klassen mit Pointern auf Instanzen der anderen Klassen zugegriffen werden soll, dann genügt i.d.R. eine Vorwärtsdeklaration der anderen Klasse:
1 | // KlasseA.h
|
2 | |
3 | class KlasseB; // Vorwärtsdeklaration |
4 | |
5 | class KlasseA |
6 | {
|
7 | public:
|
8 | KlasseA(); |
9 | ~KlasseA(); |
10 | |
11 | protected:
|
12 | void machwas(); |
13 | |
14 | KlasseB* pAufB; |
15 | };
|
Das #include der Klassendeklaration für KlasseB ist erst bei der Implementierung der Funktionen von KlasseA erforderlich, also erst in der zu KlasseA gehörenden C++-Datei. Für die Deklaration in der Headerdatei aber genügt die Information, daß es eine Klasse namens "KlasseB" gibt, um Pointer darauf nutzen zu können. Und genau die stellt obige Vorwärtsdeklaration zur Verfügung. Wie schon von anderen geschrieben: Besorg Dir ein gutes Buch über C++.
Bitte melde dich an um einen Beitrag zu schreiben. Anmeldung ist kostenlos und dauert nur eine Minute.
Bestehender Account
Schon ein Account bei Google/GoogleMail? Keine Anmeldung erforderlich!
Mit Google-Account einloggen
Mit Google-Account einloggen
Noch kein Account? Hier anmelden.