2011-05-31 223 views
0

我是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

从错误消息中可以明显看出,您向我们展示的代码与您试图编译的代码不同。将来,向我们展示您的*实际*代码,而不是从存储器的近似值。 – ildjarn 2011-05-31 21:53:30

+1

@ildjam:我实际上认为错误信息与提供的代码非常相关:试图使用'b *'类型的左值作为参数来调用类“a”的方法'foo',它匹配'a - > foo(b)'完美。 – 2011-05-31 22:20:21

+1

@dribeas:除了在真正的代码和这个问题之间的某处,类型'a'已被重命名为'class1','b'为'class2',然后是以旧类型名称命名的变量。 – 2011-05-31 22:32:16

回答

4

你调用一个期望的对象的引用的指针表示函数的引用之间的差异的好地方对象(这是一个不兼容的类型)。为了让代码编译,你要调用foo这样的:

a->foo(*b); 

基本上你解引用指针以获得实际的对象,并传递一个foo。编译器负责传递对象的引用而不是对象本身。