我试图弄清楚如何使用指向子类的指针来访问父方法。有任何想法吗?我找了一些例子,但发现了一些不同的东西。 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();
...
}
答案 0 :(得分:3)
看起来您正在尝试从派生类实例访问基类方法/数据。
而不是:
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,但是你没有为该方法提供签名。您可能需要使用您希望具有的确切类型(CanvasObject *)来强制转换或替换auto。它的posisble是parseCanvas可能返回一个const类型而getThree没有标记为const,所以你调用它时会遇到麻烦。
也许如果您提供了确切的编译器错误,我们可以进一步缩小范围。
编辑:
根据您的注释,canvas对象返回另一个基类指针,并且您尝试调用派生类的方法。这是不可能做到的。您需要调整parseCanvas方法以返回派生类指针,或者您需要(非常糟糕的IDEA)将指针从基类转换为派生类(如果您确实知道它真的是那种类型)。
答案 1 :(得分:1)
您需要使用对象变量,例如:
Three l_three = canvasObj->getThree();
答案 2 :(得分:-1)
我做完了这件事并且正在工作:
base_static_cast<AnotherObject, Three>(canvasObject)->getThree();
校正。经过进一步测试,我必须这样做:
的static_cast(canvasobject.get()) - &GT; getThree();
它试图从错误的地方获取信息。