stavo compilare il codice seguente:tipo incompleto chiamato in nome nidificato specificatore
class B;
class A {
A();
friend A B::newAObject();
};
class B {
friend A::A();
public:
A newAObject();
};
Questo può sembrare strano, ma l'idea era di avere una classe A
che potrebbe essere prodotta solo da un oggetto di tipo B
(chi probabilmente sarebbe un singleton).
Il problema è che ho creato una dipendenza circolare tra questi oggetti. A
deve essere definito prima di B
e B
deve essere definito prima di A
. Apparentemente in avanti dichiarare B
non è abbastanza buono, B
deve essere effettivamente definito prima dello A
(e viceversa).
Come aggirare questo?
Modifica: l'errore effettivo è: Tipo incompleto 'B' denominato nello specificatore del nome nidificato.
Nota: c'è un altro post che è simile a questo qui: Error: incomplete type used in nested name specifier, ma è fortemente templato e questo mi ha confuso, quindi questo post.
È un po 'strano rendere un singolo metodo un amico. Sei sicuro di non voler rendere l'intera classe un amico? –
Non sapevo che fosse possibile. Com'è fatto? devo semplicemente scrivere "friend class B" all'interno di "A" e "friend class A" all'interno di "B"? – anthropomorphic
Proprio così ... –