Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/161.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
指针混淆 我在C++方面比较新手,而且我有一个我不理解的错误。 class1* a = (class1*)p1; class2* b = (class2*)p2; a->foo(b);_C++_Pointers - Fatal编程技术网

指针混淆 我在C++方面比较新手,而且我有一个我不理解的错误。 class1* a = (class1*)p1; class2* b = (class2*)p2; a->foo(b);

指针混淆 我在C++方面比较新手,而且我有一个我不理解的错误。 class1* a = (class1*)p1; class2* b = (class2*)p2; a->foo(b);,c++,pointers,C++,Pointers,错误是: error: no matching function for call to 'a::foo(b*&)' note: candidates are: void a::foo(const b&) 我怎样才能做到这一点呢?你可能必须这样做 a->foo(*b); 因为foo引用了b,而不是指向b的指针 是学习C++中指针和引用之间区别的好地方。您正在调用一个函数,该函数期望对一个对象的引用带有指向该对象的指针(这是一种不兼容的类型)。要获得要编译的代码,您需

错误是:

error: no matching function for call to 'a::foo(b*&)'
note: candidates are: void a::foo(const b&)

我怎样才能做到这一点呢?

你可能必须这样做

  a->foo(*b);
因为foo引用了b,而不是指向b的指针


是学习C++中指针和引用之间区别的好地方。

您正在调用一个函数,该函数期望对一个对象的引用带有指向该对象的指针(这是一种不兼容的类型)。要获得要编译的代码,您需要如下调用foo:

a->foo(*b);

实际上,您是在取消对指针的引用,以获取实际对象并将其传递给
foo
。编译器负责向对象而不是对象本身传递引用。

从错误消息中可以明显看出,您向我们展示的代码与您试图编译的代码不同。将来,请向我们展示您的实际代码,而不是内存中的近似值。@ildjam:实际上,我认为错误消息与显示的代码非常相关:尝试调用类
a
的方法
foo
,使用类型为
b*
的左值作为参数,该左值与
a->foo(b)匹配
非常完美。@dribeas:除了在真实代码和这个问题之间的某个地方,
a
类型被重命名为
class1
b
类型被重命名为
class2
,然后变量以旧类型名称命名。这是直接复制的,变量被重命名(因为它们又长又丑,而且会分散注意力)-多亏了那些帮忙的人!@Sticky:你理解引用、指针和对象地址之间的区别吗?