假设我有三个类 - Animal
,Cat
和Dog
, whereCat
和Dog
是子类Animal
(这听起来确实像第一堂课,但我保证这不是作业,只是简化真实代码)
Dog* spike = new Dog();
Cat* puss = new Cat();
int main(int argc, char** argv)
{
function(spike, puss);
return 0;
}
void function(Animal *pet, Animal *pet2)
{
magic->andSoForth();
}
现在这会产生以下错误:
Cannot convert parameter 1 from 'Dog *' to 'Animal'
No constructor could take the source type,
or constructor overload resolution was ambiguous
将参数更改为完全匹配会产生类似的错误,只是它说它不能从一个类转换为同一个类。
我已经成功地调用了它们从超类继承的子类函数和成员,所以我知道这在逻辑上应该可以工作。我只是不知道这种语言要我扭曲逻辑的扭曲方式。
编辑
解决方案恰好是:指针混淆了每个人。
- 声明指针。
- 将指针作为参数发送给不处理指针的函数。
在我的示例中,我将“非指针”发送到需要指针的函数,我只是切换了它。现在它工作正常。