Aktuelle Zeit: 07.01.2025, 03:28

Alle Zeiten sind UTC + 1 Stunde




Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 
Autor Nachricht
 Betreff des Beitrags: klassen mit zeiger aufeinander
BeitragVerfasst: 08.03.2010, 22:09 
Offline

Registriert: 11.02.2010, 02:59
Beiträge: 8
is eigentlich mehr ne allgemeine programmierfrage.
gibts ne möglichkeit sowas in zum funktionieren zu bringen?:

class a
{
b* pointer;
};

class b
{
a* pointer;
};


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: klassen mit zeiger aufeinander
BeitragVerfasst: 08.03.2010, 22:47 
Offline

Registriert: 11.02.2009, 23:27
Beiträge: 23
Müsste so möglich sein:
Code:
class b;

class a
{
   b* pointer;
};

class b
{
   a* pointer;
};


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: klassen mit zeiger aufeinander
BeitragVerfasst: 08.03.2010, 23:24 
Offline

Registriert: 11.02.2010, 02:59
Beiträge: 8
hm, ja dann compiled das ganze ohne fehler.

aber wenn ich in A irgendwas mit B mache kommen zwei fehler:
error: invalid use of undefined type 'struct B'
error: forward declaration of 'struct B' (der fehler ist in der zeile "class b;")

ich verstehe nicht was da passiert.. ??

EDIT:
ok, habe das jetzt noch ma in deutsch geändert...


Zuletzt geändert von heft am 08.03.2010, 23:38, insgesamt 2-mal geändert.

Nach oben
 Profil  
 
 Betreff des Beitrags: Re: klassen mit zeiger aufeinander
BeitragVerfasst: 08.03.2010, 23:34 
Offline

Registriert: 11.02.2010, 02:59
Beiträge: 8
oh, sry das ich grad auf englisch geschrieben hab.. bin ein bisschen müde
und habe gerade was in einem anderen englischen forum geschrieben! :D

also das sieht so aus:

Code:
#include <iostream>



using namespace std;



class b;



class a

{

  public:

  b* pointer;

  void atest();

};



void a::atest()

{

  cout << "A TEST " << endl;

  pointer = new b;

  pointer->btest();

}





class b

{

  public:

  a* pointer;

  void btest();

};



void b::btest()

{

  cout << "B TEST" << endl;

}



int main()

{

    a* testClass = new a;

    testClass->atest();

    return 0;

}



Nach oben
 Profil  
 
 Betreff des Beitrags: Re: klassen mit zeiger aufeinander
BeitragVerfasst: 09.03.2010, 07:23 
Offline
Benutzeravatar

Registriert: 17.04.2007, 08:42
Beiträge: 460
Wohnort: Willich, NRW
Das Problem ist, dass du die Klasse B lediglich (forward) deklariert hast. Der Compiler weiß, dass es sie gibt, aber nicht wie sie aussieht, von daher kennt er auch nicht die Funktion, die später in der Klasse aufgeführt wird. Das kann mit einem Interface (was es in C++ leider (noch) nicht so reinrassig gibt, der Punkt geht an Java =/ ) aufgelöst werden. Dazu kann man in C++ die abstrakten Klassen verwenden, etwa so:

Code:
//interface.h
class A;
class B

class IA
{
public:
//virtual ... = 0 heißt indem Fall reinvirtuell und bedeutet, dass wir keine Instanz dieser Klasse anlegen können,
//sondern eben nur von ihr erben dürfen. Interface halt^^
virtual void atest(void) = 0;
};

class IB
{
public:
virtual void btest(void) = 0;
};


Jez weiß der Compiler, es gibt zwei abstrakte Klassen (interfaces), die A und B heißen und jeweils ihre Funktionen haben. Und jez implementierst du das Interface:

Code:
//iwo anders

#include "CB.h"

class CA : public IA
{
private:
  //da wir die Klasse IB deklariert UND definiert haben, kennt der Compiler die Klasse bestens und somit auch ihre
  //funktionen!
  IB* myB;

public:
  void atest(void)
{
    myB = new CB;
    myB->btest();
}
};

//analog dazu CB


Und nun in der main:

Code:
//main.cpp
#include "CA.h"

int main(void)
{
  IA* temp = new CA;
  CA->atest();

  return(0);
}


Sas kannst du in dem Fall tun, da du von einem Zeiger immer in den Geerbten Zeiger umwandlen kannst. Es würde auch gehen CA* temp = new CA; Damit würdest du aber an anderer Stelle Probleme bekommen. Natürlich bleibt zu erwähnen, dass das Konzept nur Vorteile hat, und das in der großen Softwareerzeugung bis dato unersetzbar ist :>

mfg heck

_________________
Bild

Irrlicht - From Noob To Pro A Guideline

--

Sonstige Projekte, Blog : http://www.rpdev.net


Nach oben
 Profil  
 
 Betreff des Beitrags: Re: klassen mit zeiger aufeinander
BeitragVerfasst: 09.03.2010, 15:53 
Offline

Registriert: 11.02.2010, 02:59
Beiträge: 8
habe das jetzt so nicht ausprobiert, weil ich jetzt in nem anderen forum schon ne antwort
ne bekommen habe, aber trotzdem danke! :)

was auch funktioniert ist die methoden erst nach den beiden klassen zu definieren.
so:
Code:
class b;

class a
{
public:
b* pointer;
void atest();
};

class b
{
public:
a* pointer;
void btest();
};

void a::atest()
{
cout << "A TEST " << endl;
pointer = new b;
pointer->btest();
}

void b::btest()
{
cout << "B TEST" << endl;
}


Nach oben
 Profil  
 
Beiträge der letzten Zeit anzeigen:  Sortiere nach  
Ein neues Thema erstellen Auf das Thema antworten  [ 6 Beiträge ] 

Alle Zeiten sind UTC + 1 Stunde


Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder und 10 Gäste


Du darfst keine neuen Themen in diesem Forum erstellen.
Du darfst keine Antworten zu Themen in diesem Forum erstellen.
Du darfst deine Beiträge in diesem Forum nicht ändern.
Du darfst deine Beiträge in diesem Forum nicht löschen.
Du darfst keine Dateianhänge in diesem Forum erstellen.

Suche nach:
Gehe zu:  
Powered by phpBB® Forum Software © phpBB Group
Deutsche Übersetzung durch phpBB.de