перекрестные указатели в классах
перекрестные указатели в классах - наверно в эту сторону.
Есть класс "A", он содержит поле имеющее тип - указатель на класс "B". И в "B" так же должен быть указатель на объект "A" . Сначала создаётся объект A с пустым полем b. Потом создаётся объект B и при помощи setB указывается указатель на объект A. Оба класса имеют метод print() их тела смотреть ниже. Всё просто казалось бы, но у меня не собирается.
кстати, может фантастика, но возможно ли сделать данную задачу 3мя файлами main.cpp и A.h, B.h , причем все определения методов разместить внутри классов A и B ?
main.cpp
#include <iostream>
#include "A.h"
int main() {
A a;
B b(&a);
a.setB(&b);
a.print();
std::cout << std::endl;
b.print();
}
A.h
#pragma once
#include "B.h"
class A {
B* b ;
public:
A();
void setB(B* b_);
void print();
};
B.h
#pragma once
#include "A.h"
class B {
A* a;
public:
B(A* a_);
void print();
};
A.cpp
#include <iostream>
#include "A.h"
A::A():b(nullptr) {}
void A::setB(B* b_) { b = b_; }
void A::print() { std::cout << "print from A" << std::endl;b->print(); }
B.cpp
#include <iostream>
#include "B.h"
B::B(A* a_): a(a_) {}
void B::print(){ std::cout << "print from B" << std::endl;a->print(); }