从"class**"到"base class**"的无效转换

Psy*_*Kai 0 c++ pointer-to-pointer

我想将一个对象指针的指针传递给一个函数,但是得到了错误

invalid conversion from 'CustomInterface**' to LocalLogger**'
Run Code Online (Sandbox Code Playgroud)

我尝试这样的事情:

class LocalLogger
{}
class CustomInterface: public LocalLogger
{}

foo(LocalLogger** const obj)
{
    // do something
}

bar()
{
    CustomInterface** p_p_obj;
    CustomInterface* p_obj = new CustomInterface();
    p_p_obj = &p_obj;
    foo(p_p_obj);                      // <-- here is the error
}
Run Code Online (Sandbox Code Playgroud)

这是非常简化的,但我需要指针指针.

T.C*_*.C. 6

由于充分的理由,编译器不允许您这样做.考虑:

class A { };
class B : public A { };
class C : public A { };

void make_an_A(A** out) { *out = new B(); }

C* pC;
make_an_A(&pC); // Doesn't compile.
Run Code Online (Sandbox Code Playgroud)

如果它允许C**转换为A**,你可以BC不使用强制转换的情况下将指针存储在指针中,这非常糟糕.