如何解决这个问题?非const引用必须绑定到左值

时间:2016-05-26 09:38:36

标签: c++

基类指针的引用不能绑定到派生类的poiner?

class base
{

};
class derived : public base
{

};
int main()
{
    derived va;
    derived *p = &va;
    base * &rp = (base*)p;    //wrong, non-const reference must bind to lvalue
    return 0;
} 

3 个答案:

答案 0 :(得分:3)

  

基类指针的引用不能绑定到派生类的poiner?

它不能。但是,您正在尝试将 base 类指针引用绑定到临时 base 类指针(rvalue)。但由于它是非const引用,因此无法绑定到右值。

根据您的意图,您有两种选择。使用const引用,它可以绑定到rvalues。这延长了临时的使用寿命:

base * const &rp = (base*)p;

或者将引用绑定到左值:

base * b = p;
base * &rp = b;

答案 1 :(得分:1)

您可能想要

base& rp = *p;

或者,如果你真的想要一个指针的引用,你可以这样做:

base* tmp = p;
base*& rp = tmp;

答案 2 :(得分:1)

我不确定你是否想要

 base* rp = (base*)p;