[C++]sind zwei Klassen, die gegenseitig aufeinander zugreifen möglich?

ok, das war mein Fehler, sorry - es hat mich eh gewundert, warum überhaupt keine Ausgabe kam. Ich hab den Fehler korrigiert und bekomme jetzt genau das falsche Ergebnis, was ich Euch eigentlich zeigen wollte:

Code:
// test.h

#include "iostream.h"

class b;

class a{
  private:
    b* v;

  public:
    a(){val = 1;}

    int val;
    int wert();

    void setval(b* val){v = val;}
};

class b{
  private:
    a* v;

  public:
    b();

    int val;
    a meinA;
    int wert();

    void setval(a* val){v = val;}
};


// test.cpp

#include "test.h"

int a::wert()
{
  v->val;
}

int b::wert()
{
  meinA.val;
}

b::b(){
  val = 2;
  meinA.setval(this);
}

int main(){
  b klb;

  cout << "A: " << klb.wert();

  cout << endl << endl;

  cout << "B: " << klb.meinA.wert();

  cout << endl;

}

Ich hoffe ich hab jetzt nichts mehr übersehen.
Die Ausgabe dieses Codes ist:
A: 2293624

B: 2293632

Es wurde also willkürliche Werte aus dem Speicher gefischt und nicht 1 und 2 ausgegeben.

Woran kann das liegen?

Mfg MaX
 
Code:
int a::wert()
{
  return v->val;
}

So müsste das aussehen. Was du da im Moment zurückkriegst ist irgendwas - vielleicht die Adresse der Funktion oder so. Nicht das return vergessen!


---
Aaa, erster! :)
 
heul...warum bin ich so s c h e i ß e?... :(
danke Euch

--
aber keine Sorge - da mein echtes Programm immer noch nicht tut,
sondern wieder nur ein weiteres Beispielprogramm, werd ich sicher
noch mal auf Euch zurückgreifen! :-)

Gruß MaX
 
heul...warum bin ich so s c h e i ß e?
Na, manche haben's einfach nicht drauf. :-)

Nein, im Ernst, mir sind schon blödere Sachen passiert. Wenn man konzentriert daran arbeitet, ein Problem zu lösen, passiert es nun mal gelegentlich, dass man an einer anderen Stelle etwas übersieht. Mach dir deshalb keine Sorgen.

da mein echtes Programm immer noch nicht tut,
sondern wieder nur ein weiteres Beispielprogramm, werd ich sicher
noch mal auf Euch zurückgreifen!
Nur zu!
 
worin besteht eigentlich der Unterschied zwischen einer .h (Header-datei) und einer .cpp (Quellcode-datei)?

Was, wenn ich die Definintion der Klassen in verschiedene header packe und die dazugehörigen Methoden in cpp-dateien? Muss ich dann die header in die cpp includen und die cpp der beiden klassen in die hauptdatei?
So hab ich das eben versucht und es haut nicht hin.

Hilfe....

danke Euch!
Gruß MaX
 
Was, wenn ich die Definintion der Klassen in verschiedene header packe und die dazugehörigen Methoden in cpp-dateien? Muss ich dann die header in die cpp includen und die cpp der beiden klassen in die hauptdatei?
Ja, das mit den Headern stimmt soweit. Die cpp-Dateien werden aber normalerweise nicht mit #include eingebunden sondern seperat übersetzt und der resultierende Objectcode dazugelinkt. Wie das genau gemacht wird, hängt vom Compiler bzw. der Entwicklungsumgebung ab. Falls du MSVC verwendest, musst du die cpp-Dateien in der Baumansicht zum Projekt hinzufügen.
So hab ich das eben versucht und es haut nicht hin.
Es wäre hilfreich, wenn du das Nicht-Hin-Hauen etwas erläutern könntest. Was geht denn nicht?
 
Zurück