gpt4 book ai didi

c++ - 使用自动/指向 child 的指针,访问 child 的父方法

转载 作者:行者123 更新时间:2023-11-28 00:18:10 25 4
gpt4 key购买 nike

我正在尝试弄清楚如何使用指向子类的指针访问父方法。有任何想法吗?我寻找了例子,但发现了更多不同的东西。 child access parent - different .

我有一个包含以下内容的测试类:

auto canvasObj = parseCanvas(one, two);
Three l_three = CanvasObject::ParentOfCanvas->getThree(); //this isn't working
//I also tried l_three = canvasObj->getThree(); (doesn't work)

哪里:

class CanvasObject final : public ParentOfCanvas
{....}

和:

class ParentOfCanvas : public AnotherObject
{
public:
Three getThree();
...
}

最佳答案

看起来您正在尝试从派生类实例访问基类方法/数据。

代替:

auto canvasObj = parseCanvas(one, two); 
Three l_three = CanvasObject::ParentOfCanvas->getThree(); //this isn't working

使用:

auto canvasObj = parseCanvas(one, two);
Three l_three = canvasObj.getThree(); // or maybe canvasObj->getThree()

你的方法不起作用的原因是,它是一种试图访问“静态”成员函数而不是特定实例上的成员函数的错误混搭。在我的解决方案中,我访问了您从 parseCanvas 的返回创建的 Canvas 对象上的“getThree”数据。

或者,如果我的解决方案不起作用,则可能是 parseCanvas 返回了错误的数据类型。也就是说,我希望它返回 CanvasObject,但您没有为该方法提供签名。您可能需要将 auto 转换为或替换为您想要的确切类型 (CanvasObject*)。可能是 parseCanvas 返回的是 const 类型,而 getThree 未标记为 const,因此调用它时会遇到问题。

也许如果您提供了确切的编译器错误,我们可以进一步缩小范围。

编辑:

根据您的评论,canvas 对象返回了一个进一步的基类指针,您正在尝试调用派生类的方法。这是做不到的。您需要调整您的 parseCanvas 方法以返回派生类指针,或者您需要(非常糟糕的想法)将您的指针从基类转换为派生类(如果您真的知道它确实是那种类型)。

关于c++ - 使用自动/指向 child 的指针,访问 child 的父方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28964800/

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