【发布时间】:2019-09-25 01:33:25
【问题描述】:
我正在为学校做一个 OOP 项目,但由于以下问题,我目前陷入困境:
假设A 是我的基类,B 继承自 A,C 继承自 B。
A 有一个方法可以检查两个 A 类对象是否发生碰撞。
这个方法在C中没有被重新定义/过度驱动,但是我必须在这个子类中使用它。
class A
{
public:
bool isColliding(A);
};
class B : public A
{
};
class C : public B
{
public:
void Eat(B);
}
void C::Eat(B objectB)
{
if(isColliding(objectB))
{
}
}
这是对代码的过度简化,我只是想传达这个想法。
它返回以下内容:
error : no matching function for call to 'C::isColliding(B)'
note: candidate: bool A::isColliding(A)
note: no known conversion for argument 1 from 'B' to 'A'.
如何让这种方法将 C 和 B 解释为 A 才能工作?
【问题讨论】:
-
请提供minimal reproducible example。目前,您的代码无法编译,因为
A::isColliding()是A的private 方法。改成public后,编译就好了:wandbox.org/permlink/MXCCLmmb6dprMUFX -
错误消息的其余部分是否可能包含“在此上下文中是私有的”字样?
-
谢谢,我忘了在我的帖子中指定它,但在我的代码中我公开了这些方法。我现在已经更新了。
标签: c++ class oop polymorphism