这是示例代码。
class BaseClass {
};
class DerivedClass ? public BaseClass {
};
int Foo(BaseClass*& ptr) {
}
DerivedClass* ptr_to_derived;
//following will not work
Foo(ptr_to_derived);
Run Code Online (Sandbox Code Playgroud)
我无法编译上面的代码,并且错误消息为“ can't convert DerivedClass* to BaseClass*&”。那么如何将ptr_to_derived传递给Foo?
错误消息非常清楚:
错误:的类型的“非const引用无效初始化
BaseClass*&”从类型的右值“BaseClass*”
因为Foo通过非常量引用获取指针,所以您不能将其传递给右值。从DerivedClass到的隐式转换BaseClass会在您将其传递给Foo您时得到,该值是错误所抱怨的。
您可以从派生的指针创建基本指针,然后传递该指针:
DerivedClass* ptr_to_derived;
BaseClass* ptr_derived_base = ptr_to_derived;
Foo(ptr_derived_base);
Run Code Online (Sandbox Code Playgroud)