gpt4 book ai didi

c++ - 从基指针到派生指针的转换问题

转载 作者:行者123 更新时间:2023-12-03 01:01:29 25 4
gpt4 key购买 nike

我有以下类架构:

class A{
public:
A() {}
virtual ~A() {}
void printA() { cout << "A" << endl; }
};
class B{
public:
B() {}
virtual ~B() {}
void printB() { cout << "B" << endl; }
};
class C : public A{
public:
C() : A() {}
virtual ~C() {}
void printC() { cout << "C" << endl; }
};
class D : public B{
public:
D() : B() {}
virtual ~D() {}
void printD() { cout << "D" << endl; }
};
class P: public C, public D{
public:
P() : C(), D() {}
~P() {}
void printP() { cout << "P" << endl; }
};

问题是在 Visual Studio 中某些转换失败,但在在线编译器中一切正常。我会更好地用代码解释这个问题:

    A* pObject= new P(); // let s say I have this instance of type P referenced by an A type pointer
dynamic_cast<P*>(pObject)->printP(); // works fine in both VS and online compiler, as expected
dynamic_cast<D*>(pObject)->printD(); // THIS IS THE PROBLEM, in Visual Studio cast returns nullptr, but in online compiler works fine.
return 0;
}

您知道这种行为的任何解决方案/原因吗?谢谢。

最佳答案

我解决了这个问题,但这是愚蠢的,是由于我缺乏注意力造成的。我必须承认,类架构不是我的,在派生行的某个地方有一个 protected 继承,我不知道,因此dynamic_cast失败了(编译器的奇怪行为,因为在我尝试强制转换的某个文件中)它并不是提示这个无法访问的基类,而是在另一个文件中提示了这个问题,并且我设法找到了问题)。

关于c++ - 从基指针到派生指针的转换问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59823975/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com