2016-04-21 8 views
-3

Für meinen vorhandenen Code, der arbeitet, hat es Aussage wie:(von einem anderen Namespace) Zeiger

namespace aa{ 
    class a{} 
    class b: public a {....} 

    class x 
    { 
     a* function(){ 
     b* object = new b(...); 
     .... 
     return b; 
     } 
    } 
} 

Dort wird die implizite convertion von b * ist in einem * während der Aufruf "Funktion" Und es gibt ein * zurück. Es klappt.

Jetzt habe ich die Klasse in einem anderen Namensraum bewegen wie:

namepsace newaa{ 
    class a{} 
} 

namespace aa{ 
    class b: public newaa::a {....} 

    class x 
    { 
     newaa::a* function(){ 
     b* object = new b(...); 
     .... 
     return b; 
     } 
    } 
} 

Mit über Änderungen, ich den Fehler bekam: kann sie nicht verdeckte 'aa :: b *' auf 'newaa: a *' im Gegenzug, Warum?

Und wenn ich dynamic_cast verwenden zurück dynamic_cast (b) Es übergeben die Kompilation, aber ich habe einige andere Fehler in anderen Dateien.

+7

Beitrag echten Code, dass wir uns bitte zusammenstellen können. Es gibt so viele kleine Fehler, dass es unmöglich ist, zu erraten, wie Ihr echter Code aussieht. – interjay

+0

auch, "Es bestehen die Kompilation, aber ich habe ein paar Fehler" - _Which sind? _ –

+0

"Code, der funktioniert" gefolgt von Code, der nicht einmal kompiliert ... –

Antwort

2

Ich habe Ihren Code mit diesen Korrekturen arbeiten; vor allem: Rückkehr object von function(), nicht der Typ b:

namespace newaa{ 
    class a{}; 
} 
namespace aa{ 
    class b: public newaa::a {}; 
    class x 
    { 
     newaa::a* function(){ 
      b* object = new b(); 
       return object; 
     } 
    }; 
} 
+0

Angesichts der gleichen Fehler in OP "funktioniert" Code, offenbar zeigte er nicht den Code, der den tatsächlichen Fehler verursacht. – interjay

Verwandte Themen