c++ Programmierung "Basisklasse undefiniert trotz include "

Gast #2394190
Lesenswert?
• ▲
▼
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
Persönliche Seite #2394298
Lesenswert?
• ▲
▼
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?
#2394318
Lesenswert?
• ▲
▼
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!
Gast #2394330
Lesenswert?
• ▲
▼
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"
Gast #2394358
Lesenswert?
• ▲
▼
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"
#2394375
Lesenswert?
• ▲
▼
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üß
Persönliche Seite #2394471
Lesenswert?
• ▲
▼
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++.

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren