使用自动/指向子项的指针,访问子项的父方法
using auto/pointer to child, access child's parent method
我试图弄清楚如何使用指向子类的指针访问父方法。 有什么想法吗? 我寻找示例,但发现更多不同的东西。 子访问父级 - 不同。
我有一个测试类,内容如下:
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 返回中创建的画布对象上的"getThree"数据。
或者,如果我的解决方案不起作用,那么 parseCanvas 可能返回了错误的数据类型。 也就是说,我希望它返回 CanvasObject,但您没有为该方法提供签名。 您可能需要将 auto 转换为您希望的确切类型 (CanvasObject*)。 parseCanvas 可能返回一个 const 类型,而 getThree 没有标记为 const,所以你很难调用它。
也许如果您提供了确切的编译器错误,我们可以进一步缩小范围。
编辑:
根据您的注释,画布对象将返回一个进一步的基类指针,并且您正在尝试调用派生类的方法。 这是做不到的。 你需要调整你的parseCanvas方法以返回派生类指针,或者你需要(非常糟糕的主意)将指针从基类强制转换为派生类(如果你真的知道它真的是那种类型)。
您需要使用对象变量,如下所示:
Three l_three = canvasObj->getThree();
我最终这样做了,它正在工作:
base_static_cast<AnotherObject, Three>(canvasObject)->getThree();
校正。 经过进一步测试,我必须这样做:
static_cast(canvasobject.get())->getThree();
它试图从错误的地方获取信息。
相关文章:
- 通过指向指针数组的指针访问子类的属性
- 使用指针访问数组中的对象数据成员
- 无法通过指针访问对象的成员
- decltype:使用指针访问类的静态成员
- 是否可以使用指针访问变量以避免直接编辑变量?
- 为什么 C++ 地址中的矢量无法通过原始指针访问
- 使用指针访问数组元素时出现意外结果
- 使用指针访问数组的值
- C++继承从基类指针访问派生类中的非虚拟函数
- 如何使用指针访问成对向量的元素
- 为什么有些库提供无指针访问,而另一些库则不提供
- 如何通过引用或指针访问二维矢量
- 使用指针访问参数接收的结构中的元素时内存泄漏
- 我正在学习C++,我不能使用指针访问参考吗?(举个例子)
- 复制堆栈上的成员值或使用指针访问它?
- C++娜娜 如何从全局列表框*指针访问列表框内的索引 0 上的按钮?
- 通过此指针访问时的成员差异和自身的成员指针(简单的 QT 示例问题)
- 从指针访问 Kaguya Lua 状态
- 说明通过指针访问非静态类成员函数
- 有没有办法使用初始化到第一行的指针访问 2d 数组的第二行?