IDirect3DSurface9 *var = NULL;
IDirect3DSurface9 *** ret;
我想将var取消引用的值赋值给ret指向的变量。
我做了foll:
(*(*(ret[0]))) = var;
我觉得这是正确的C ++语法。但是为什么我得到编译错误如下:
错误C2679:二进制'=':找不到右手的操作符 “IDirect3DSurface9 *”类型的操作数(或者这些是不可接受的 转化率)。
正确的语法是什么?
答案 0 :(得分:4)
您已将指针取消引用3次。一旦您将其视为数组并使用索引[0]
,然后使用*
运算符再使用两次。为了与var
兼容,您应该只引用两次。
更明确一点,让我们分解一下:
ret
的类型为IDirect3DSurface9***
。ret[0]
的类型为IDirect3DSurface9**
。*(ret[0])
的类型为IDirect3DSurface9*
。*(*(ret[0]))
的类型为IDirect3DSurface9
。显然,*(*(ret[0]))
与var
类型IDirect3DSurface9*
的作业不兼容。
关于你的代码究竟应该是什么,我不能肯定地说,但你需要删除一个间接层。
答案 1 :(得分:2)
每个*
和[]
都会占用一个间接级别。所以在你的代码中
(*(*(ret[0]))) = var;
左侧有IDirect3DSurface9
类型,而右侧有类型IDirect3DSurface9 *
。这两种类型不同,这就是你得到编译器错误的原因。您需要通过从LHS中删除(至少一个)*
或将&
(地址操作符)添加到RHS(以使&var
)来解决此问题。
答案 2 :(得分:0)
你可能想要:
(*(*(ret[0]))) = &var;
或
*(*(*(ret[0]))) = var;