Hallo,
ich bekomme die Abbildung einer bidirektionalen Assoziation in C++ nicht hin: Klasse A hat ein Member aus Klasse B. Dieses soll eine Methode der es beinhaltenden Instanz von A aufrufen. Dazu besitzen A und B jeweils Pointer aufeinander - soweit so einfach.
Aber wie binde ich fehlerfrei über #include die einzelnen header-Dateien zusammen? Mein Beispielcode (in der Realität heißen die Klassen natürlich anders und nutzen auch keine rohen Pointer
):
ich bekomme die Abbildung einer bidirektionalen Assoziation in C++ nicht hin: Klasse A hat ein Member aus Klasse B. Dieses soll eine Methode der es beinhaltenden Instanz von A aufrufen. Dazu besitzen A und B jeweils Pointer aufeinander - soweit so einfach.
Aber wie binde ich fehlerfrei über #include die einzelnen header-Dateien zusammen? Mein Beispielcode (in der Realität heißen die Klassen natürlich anders und nutzen auch keine rohen Pointer

Code:
/*
* A.cpp
*/
#include "A.h"
A::A() {
}
A::~A() {
}
void A::setB(B* b) {
this->ptr = b;
}
int A::getValue() {
return 99;
}
void A::process() {
this->ptr->doSomething();
}
// Test
int main() {
A a = A();
B b = B(&a);
a.setB(&b);
a.process();
std::cout << "Alles OK." << std::endl;
}
/*
* A.h
*/
#ifndef A_H_
#define A_H_
#include <iostream>
#include "B.h"
class A {
B* ptr;
public:
A();
virtual ~A();
void setB(B* b);
int getValue();
void process();
};
#endif /* A_H_ */
/*
* B.h
*/
#ifndef B_H_
#define B_H_
#include <iostream>
class A;
class B {
A* ptr;
public:
B(A* ptr);
virtual ~B();
void doSomething();
};
#endif /* B_H_ */
/*
* B.cpp
*/
#include "B.h"
B::B(A* ptr) {
// TODO Auto-generated constructor stub
this->ptr = ptr;
}
B::~B() {
// TODO Auto-generated destructor stub
}
void B::doSomething() {
int add = ptr->getValue();
std::cout << "B: Ergebnis von " << add << " + 1 = " << (add+1) << std::endl;
}