使用auto /指向child的指针,访问child的父方法

时间:2015-03-10 13:17:46

标签: c++ c++11 parent-child auto

我试图弄清楚如何使用指向子类的指针来访问父方法。有任何想法吗?我找了一些例子,但发现了一些不同的东西。 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();
       ...
}

3 个答案:

答案 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();

它试图从错误的地方获取信息。