"对类型的非const左值引用不能绑定"带引用的错误(Type&)但不带有指针(Type*)

Ale*_*ion 4 c++ pointers const reference lvalue

我收到此错误"非const lvalue to type'Cell'无法使用此代码绑定到'Cell*'类型的临时值:

class RegionHolder
{    
public:
    RegionHolder(Region& Region1):m_RegionCellNOO(&(Region1.m_NOO))
    ~RegionHolder();

protected:
    Cell & m_RegionCellNOO; // difference is here   
};
Run Code Online (Sandbox Code Playgroud)

但不是这个:

class RegionHolder
{    
public:
    RegionHolder(Region& Region1):m_RegionCellNOO(&(Region1.m_NOO))
    ~RegionHolder();

protected:
    Cell * m_RegionCellNOO; // difference is here   
};
Run Code Online (Sandbox Code Playgroud)

我不明白这个问题,并且真的想使用引用而不是指针.

谢谢

Mik*_*our 6

你忘了向我们展示这个定义,但可能Region1.m_NOO是一个类型的对象Cell.您的第一个示例是获取它的地址,并尝试使用结果指针初始化引用.引用不是从指针初始化,而是从对象本身初始化:

RegionHolder(Region& Region1):m_RegionCellNOO(Region1.m_NOO) {}
//                                            ^ no &         ^^ don't forget that
Run Code Online (Sandbox Code Playgroud)

使用引用而不是指针有一个警告:它们不可分配,所以你的类也不是.通常这不是问题; 但是如果你确实需要你的类可以赋值,那么你需要使用指针代替.