errore di tipo incompleto

Sto cercando di fare della class A un amico di class B.

class B; class A{ public: void show(const B&); // ##1## but this one works fine B ob;// error incomplete type }; class B{ public: int b; B():b(1){} friend class A; }; 

quindi la mia domanda perché è di tipo incompleto? Ho pensato che quando ho fatto la class B è come un prototipo di una funzione che dice alla compilazione che c’è una definizione da qualche parte nel codice.

anche nel codice sopra a ## 1 ## perché questo è ansible?

No, è una dichiarazione anticipata e non definisce un tipo completo. Avrai bisogno di avere una definizione completa di B prima di A , se vuoi mantenere il membro come un object e non come un puntatore.

Una delle ragioni di ciò è che la dimensione della class B deve essere nota come A , poiché la dimensione di A dipende da B

Ti suggerisco #include "Bh" in Ah .

MODIFICA: chiarimento:

 struct A; struct B { A foo(); void foo(A); void foo(A&); void foo(A*); A* _a; A& __a; A a; // <--- only error here };