C++ 错误:初始化类型为‘;的引用无效;LineLayer&’;来自类型为‘的表达式;第’层;

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=*this->layers.back()

所以他说,他不能从*this->layers.back()初始化
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());