Zirkuläre Abhängigkeit einer bidrektionalen Assoziation

Ceppi

Erfahrenes Mitglied
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:)):
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;
}
 

Neue Beiträge

Zurück