In mijn code heb ik een circular dependency, class A heeft class B nodig en andersom. Ze refereren naar elkaar via pointers.
Ik heb de code opgedeeld in header files en source. Waarbij ik in de headers al de pointers naar de andere class definieer.
Het probleem is het volgende, als ik vanuit class A een self-reference mee geef aan class B, dan ontstaat er een segmentation fault als ik de reeds bestaande pointer van class B probeer te wijzigen.
Hoe kan ik er voor zorgen dat class B een pointer naar de instantie van class A krijgt?
Ik heb de code opgedeeld in header files en source. Waarbij ik in de headers al de pointers naar de andere class definieer.
Het probleem is het volgende, als ik vanuit class A een self-reference mee geef aan class B, dan ontstaat er een segmentation fault als ik de reeds bestaande pointer van class B probeer te wijzigen.
C++: a.h
1
2
3
4
5
6
7
8
9
| class B; class A { private: B * b; public: void start(); }; |
C++: b.h
1
2
3
4
5
6
7
8
9
| class A; class B { private: A * a; public: void setA(A*); }; |
C++: a.cpp
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
| #include "a.h" #include "b.h" void A::start() { A * ptr; ptr = this; b->setA(ptr); }; int main() { A a; a.start(); return 0; }; |
C++: b.cpp
1
2
3
4
5
6
7
8
9
| #include "b.h" #include "a.h" using namespace std; void B::setA(A* newA) { this->a = newA; }; |
Hoe kan ik er voor zorgen dat class B een pointer naar de instantie van class A krijgt?