перекрестные указатели в классах

перекрестные указатели в классах - наверно в эту сторону.

Есть класс "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(); }

Ответы (0 шт):