estaba compilando el código siguiente:tipo incompleto nombrado en nombre anidado especificador
class B;
class A {
A();
friend A B::newAObject();
};
class B {
friend A::A();
public:
A newAObject();
};
Esto puede parecer extraño, pero la idea era tener una clase A
que sólo podía ser producida por un objeto de tipo B
(quien probablemente sería un singleton).
El problema es que he creado una dependencia circular entre estos objetos. A
se debe definir antes de B
, y B
se debe definir antes de A
. Aparentemente hacia adelante declarando B
no es lo suficientemente bueno, B
debe estar completamente definido antes de A
(y viceversa).
¿Cómo puedo evitar esto?
Editar: el error real es: Incompleto tipo 'B' nombrado en especificador de nombre anidado.
Nota: hay otra publicación que es similar a esta aquí: Error: incomplete type used in nested name specifier, pero está muy templada y eso me confundía, de ahí esta publicación.
Es un poco extraño hacer que un solo método sea un amigo. ¿Estás seguro de que no quieres hacer de toda la clase un amigo? –
No sabía que eso fuera posible. ¿Cómo se hace? ¿acabo de escribir 'friend class B' dentro de' A' y 'friend class A' dentro de' B'? – anthropomorphic
Eso es correcto ... –