2012-03-22 120 views
0
IDirect3DSurface9 *var = NULL; 

IDirect3DSurface9 *** ret; 

我要分配由VAR解除引用到由RET指向的變量的值。C++中的指針分配。 (指針的指針到指針位於LHS)

我做了FOLL:

(*(*(ret[0]))) = var; 

我覺得這是正確的C++語法。但是,這是爲什麼我收到編譯錯誤如下:

錯誤C2679:二進制「=」:沒有操作員發現這需要右手 數類型「IDirect3DSurface9 *」的(或這些沒有接受 轉換) 。

什麼是正確的語法?

+1

你可以編輯你的問題,刪除所有大膽的臉全部大喊大叫。你不需要留言。我們可以在這裏很好。 – 2012-03-22 10:41:33

+0

我編輯了一下,但我實際上並不確定星號的星期數:-S – 2012-03-22 10:43:33

+0

@KerrekSB Gah,星秒數不斷變化。我正在刪除我的答案! – 2012-03-22 10:44:28

回答

4

您已經對指針進行了3次取消引用。一旦您將其作爲數組處理並使用索引[0],然後再使用*運算符兩次。爲了與var兼容,您應該只參考兩次。

更明確,讓我們打破這:

  • ret有類型IDirect3DSurface9***
  • ret[0]具有類型IDirect3DSurface9**
  • *(ret[0])有型號IDirect3DSurface9*
  • *(*(ret[0]))具有類型IDirect3DSurface9

而且很顯然它遵循*(*(ret[0]))不分配與var兼容其類型IDirect3DSurface9*

至於你的代碼真的應該是什麼,我不能肯定地說,但你將需要刪除一個間接層。

+0

不可思議!!!!非常感謝你這麼快速的回答!我解決了它。 :)我沒有*(*(ret [0]))= * var;現在兩種類型的LHS和RHS都是一樣的。所以沒有編譯錯誤。 – codeLover 2012-03-22 11:10:55

+0

這消除了編譯錯誤,但我不相信這是正確的。當然你的任務應該在'IDirect3DSurface9 *'級別而不是'IDirect3DSurface9'級別。 – 2012-03-22 11:16:17

+0

是的,我可以改變它像*(ret [0])= var;但我懷疑它是如何影響我們是否在IDirectX3DSurface9 *級別或IDirectX3DSurface9級別進行分配。 Bcoz最後我們複製存儲在tyoe IDirectX3DSurface9變量中的值吧?對不起,如果我錯了。請糾正我和澄清。謝謝。 – codeLover 2012-03-22 11:24:06

0

你可能想:

(*(*(ret[0]))) = &var; 

*(*(*(ret[0]))) = var; 
2

*[]帶走了一個間接層。因此,在你的代碼

(*(*(ret[0]))) = var; 

的左手側的類型爲IDirect3DSurface9,而右手邊的類型爲IDirect3DSurface9 *。這兩種類型是不同的,這就是爲什麼你得到編譯器錯誤。你需要通過移除(至少一個)*從LHS解決這一問題或添加&(地址運算符)的RHS(有&var)。