将子对象指针转换为基类(来自另一个命名空间)指针

时间:2016-04-21 11:30:24

标签: c++

对于我现有的工作代码,它有如下声明:

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

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

在“函数”调用期间,存在从b *到* *的隐式转换。它返回*。它有效。

现在我将类移动到另一个名称空间,如:

namepsace newaa{
  class a{}
}

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

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

通过上述更改,我收到了错误:无法将'aa :: b *'转换为'newaa:a *'作为回报​​,为什么?

如果我使用dynamic_cast     return dynamic_cast(b) 它通过编译,但我在其他文件中得到了一些其他错误。

1 个答案:

答案 0 :(得分:2)

我让你的代码使用这些修复程序;主要:从object返回function(),而不是b

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