2017-02-22 44 views
0

考虑:如何在基本类型引用中存储对派生类型的引用?

struct Base{}; 
struct Derived: Base{}; 

int main() { 
    Derived *d{}; 
    Base *&b = d; // Error: non-const reference to rvalue. 
    (void)b; 
    return 0; 
} 

正如评论指出,分配试图存储非const引用到右值。我知道右值是d转换为Base *。但是,如何解决此问题,因此可以通过分配b更改d

+0

我怀疑你想要:'Derived d; Base&b = d;' –

+0

@PiotrSkotnicki不,我真的想要指针。 – AlwaysLearning

+1

如果允许,你可以说'b = new Base;'。 'd'指向一个不相关的对象。 –

回答

1

说明为什么它是一个问题,假设您设置了另一个结构

struct OtherDerived : Base 
{}; 

现在考虑会发生什么,如果你B的定义

b = new OtherDerived(); 

后添加以下行本(如果允许)必须将d(Derived *类型)赋值给OtherDerived *,由于OtherDerived不是从派生派生的,所以这是无效的。

为了解决这个问题,你可以决定你正在引用的指针实际上是否需要派生指针。如果不是,它可以是一个基指针,然后你对基指针的引用就可以了。

Derived *d{}; 
Base* pointerToABase = d; 
Base*& refToAPointerToABase = pointerToABase; 

否则,如果您引用的指针必须是Derived *而非Base *,那么您是否可以更改引用的类型:例如,用b替换b的声明。

Derived*& refToAPointerToADerived = d; 

我知道,这是不是你真正的问题的标题问 - 但你描述不能做到这一点呢。

不知道为什么你需要参考指针,很难建议一种替代方法。

相关问题