我是C ++的新手,我遇到了一个我不明白的错误。
class1* a = (class1*)p1;
class2* b = (class2*)p2;
a->foo(b);
错误是:
error: no matching function for call to 'a::foo(b*&)'
note: candidates are: void a::foo(const b&)
我如何做到这一点?
答案 0 :(得分:10)
您可能必须这样做
a->foo(*b);
因为foo引用b而不是b的指针。
What are the differences between a pointer variable and a reference variable in C++?是学习C ++中指针和引用之间区别的好地方
答案 1 :(得分:4)
您正在调用一个函数,该函数需要引用一个带有指向所述对象的指针的对象(这是一种不兼容的类型)。要获取要编译的代码,您需要像这样调用foo:
a->foo(*b);
基本上你是取消引用指针来获取实际对象并将其传递给foo
。编译器负责传递对象的引用而不是对象本身。