2011-05-31 286 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。編譯器負責傳遞對象的引用而不是對象本身。