我是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&)
我如何得到這個權利?
我是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&)
我如何得到這個權利?
你可能需要做
a->foo(*b);
因爲foo的需要參照非B指針到b。
What are the differences between a pointer variable and a reference variable in C++?是學習指針和C++
謝謝,那工作 – 2011-05-31 21:53:45
@Sticky:你瞭解引用,指針和對象地址之間的區別嗎? – Klaim 2011-05-31 21:59:51
我來自Java,所以這一切都爲我完成;) 現在我明白了 – 2011-06-01 14:29:08
你調用一個期望的對象的引用的指針表示函數的引用之間的差異的好地方對象(這是一個不兼容的類型)。爲了讓代碼編譯,你要調用foo這樣的:
a->foo(*b);
基本上你解引用指針以獲得實際的對象,並傳遞一個foo
。編譯器負責傳遞對象的引用而不是對象本身。
從錯誤消息中可以明顯看出,您向我們展示的代碼與您試圖編譯的代碼不同。將來,向我們展示您的*實際*代碼,而不是從存儲器的近似值。 – ildjarn 2011-05-31 21:53:30
@ildjam:我實際上認爲錯誤信息與提供的代碼非常相關:試圖使用'b *'類型的左值作爲參數來調用類「a」的方法'foo',它匹配'a - > foo(b)'完美。 – 2011-05-31 22:20:21
@dribeas:除了在真正的代碼和這個問題之間的某處,類型'a'已被重命名爲'class1','b'爲'class2',然後是以舊類型名稱命名的變量。 – 2011-05-31 22:32:16