El problema es el orden de la cabeceras, ambas clases se complementan pero al incluirse forman un bucle recursivo.
He conseguido compilar lo siguiente:
A.hpp
Código
#ifndef A_H #define A_H class A { public: A(int); protected: private: int num; B* Algo; }; #endif // A_H
A.cpp
Código
#include "B.h" #include "A.h" A::A(int n) { num = n; Algo = new B; }
B.hpp
Código
#ifndef B_H #define B_H class A; class B { public: B(); protected: private: int tonteria; A* retornoA(); }; #endif // B_H
B.cpp
Código
#include "B.h" #include "A.h" B::B() { tonteria = 2; } A* B::retornoA(){ A *a = new A(10); return a; }
Main.cpp
Código
#include <iostream> #include "B.h" #include "A.h" using namespace std; int main() { cout << "Hello world!" << endl; return 0; }
Hay otro método que proponen aquí:
http://www.daniweb.com/software-development/cpp/threads/20494/c-beginner-include-recursion-problem