2016-03-28 11 views
1

Below Code gibt mir:Unvollständige Typ in verschachtelten Namespace verwendet

In member function ‘void A::method()’:error: incomplete type ‘B’ used in nested name specifier B::meth();

ich Lösung zu diesem Fehler gesucht auf SO fand, dass ich :: aber helfen nicht

class B; 
class A 
{ 
    public: 
    void method() 
    { 
     B::meth(); 
    } 
}; 

class B 
{ 
    public: 
    void static meth() 
    { 
    } 
}; 
+1

Haben Sie versucht, Klasse B vor Klasse A zu definieren? –

+0

Ich habe aber dann habe ich andere Abhängigkeiten Problem, gibt es eine andere Lösung? – lllook

+0

Werfen Sie einen Blick auf @R Sahu Antwort hoffe, es hilft. –

Antwort

3

Auf die Linie nutzen könnte A::method ist definiert, B ist nur mit dem Namen bekannt, nicht durch seine vollständige Definition.

Sie müssen sicherstellen, dass die vollständige Definition von B bekannt ist, bevor Sie B::meth() verwenden können.

Option 1

Verschieben Sie die Definition von B vor der Definition von A.

class B 
{ 
    public: 
    void static meth() 
    { 
    } 
}; 

class A 
{ 
    public: 
    void method() 
    { 
     B::meth(); 
    } 
}; 

Option 2

Verschieben Sie die Definition von A::method nach der Definition von B.

0

Das Problem ist, dass Klasse A versucht, auf ein Mitglied der Klasse B zugreifen, bevor Klasse B definiert ist. Sie sollten Klasse B zuerst definieren. Ziehen Sie außerdem in Betracht, die Klassen umzubenennen, damit sie in alphabetischer Reihenfolge angezeigt werden.

Verwandte Themen