C++ 错误:初始化类型为‘;的引用无效;LineLayer&’;来自类型为‘的表达式;第’层;
我的编译器抱怨这行代码: LineLayer&lastLayer=*this->layers.back() 所以他说,他不能从*this->layers.back()初始化C++ 错误:初始化类型为‘;的引用无效;LineLayer&’;来自类型为‘的表达式;第’层;,c++,compiler-errors,C++,Compiler Errors,我的编译器抱怨这行代码: LineLayer&lastLayer=*this->layers.back() 所以他说,他不能从*this->layers.back()初始化LineLayer&lastLayer引用,这是Layer*对象的向量(LineLayer的基类) 取消对指针的引用并将其指定给子类的引用不是很好吗?可以这样做,但不能隐式地这样做。这是为了保护您免受不必要的转换,因为并非每个层都是线层。若要在确定此转换有效时执行此转换,请使用静态\u cast: LineLayer&
LineLayer&lastLayer引用,这是Layer*对象的向量(LineLayer的基类)
取消对指针的引用并将其指定给子类的引用不是很好吗?可以这样做,但不能隐式地这样做。这是为了保护您免受不必要的转换,因为并非每个层
都是线层
。若要在确定此转换有效时执行此转换,请使用静态\u cast
:
LineLayer& lastLayer = static_cast<LineLayer&>(*this->layers.back());
另一种方式——从派生到基——不需要强制转换,而是隐式执行,因为这是一种安全的转换。“取消引用指针并将其指定给子类的引用不是很好吗?”?亚类???不,当然不应该是“好的”。您如何知道指针最初是否指向该子类的对象?也许它指向了一个完全不同子类的对象。在这种情况下,你希望它如何工作
如果确定目标对象具有正确的子类类型,则必须显式地告诉编译器您确实想要执行这种危险的转换。您必须使用static\u cast
强制转换。或者,如果基类是多态的,则可以使用dynamic\u cast
当然,这里真正的(隐含的)问题是你为什么要这么做。您真的需要LineLayer&
类型的引用吗?或者,也许,层&
类型的引用也可以工作?从你的帖子中没有办法回答这个问题
LineLayer& lastLayer = static_cast<LineLayer&>(*this->layers.back());
LineLayer& lastLayer = dynamic_cast<LineLayer&>(*this->layers.back());