C++中的指针分配。 (指针的指针到指针位于LHS)
IDirect3DSurface9 *var = NULL;
IDirect3DSurface9 *** ret;
我要分配由VAR解除引用到由RET指向的变量的值。C++中的指针分配。 (指针的指针到指针位于LHS)
我做了FOLL:
(*(*(ret[0]))) = var;
我觉得这是正确的C++语法。但是,这是为什么我收到编译错误如下:
错误C2679:二进制“=”:没有操作员发现这需要右手 数类型“IDirect3DSurface9 *”的(或这些没有接受 转换) 。
什么是正确的语法?
您已经对指针进行了3次取消引用。一旦您将其作为数组处理并使用索引[0]
,然后再使用*
运算符两次。为了与var
兼容,您应该只参考两次。
更明确,让我们打破这:
-
ret
有类型IDirect3DSurface9***
。 -
ret[0]
具有类型IDirect3DSurface9**
。 -
*(ret[0])
有型号IDirect3DSurface9*
。 -
*(*(ret[0]))
具有类型IDirect3DSurface9
。
而且很显然它遵循*(*(ret[0]))
不分配与var
兼容其类型IDirect3DSurface9*
。
至于你的代码真的应该是什么,我不能肯定地说,但你将需要删除一个间接层。
不可思议!!!!非常感谢你这么快速的回答!我解决了它。 :)我没有*(*(ret [0]))= * var;现在两种类型的LHS和RHS都是一样的。所以没有编译错误。 – codeLover 2012-03-22 11:10:55
这消除了编译错误,但我不相信这是正确的。当然你的任务应该在'IDirect3DSurface9 *'级别而不是'IDirect3DSurface9'级别。 – 2012-03-22 11:16:17
是的,我可以改变它像*(ret [0])= var;但我怀疑它是如何影响我们是否在IDirectX3DSurface9 *级别或IDirectX3DSurface9级别进行分配。 Bcoz最后我们复制存储在tyoe IDirectX3DSurface9变量中的值吧?对不起,如果我错了。请纠正我和澄清。谢谢。 – codeLover 2012-03-22 11:24:06
你可能想:
(*(*(ret[0]))) = &var;
或
*(*(*(ret[0]))) = var;
每*
和[]
带走了一个间接层。因此,在你的代码
(*(*(ret[0]))) = var;
的左手侧的类型为IDirect3DSurface9
,而右手边的类型为IDirect3DSurface9 *
。这两种类型是不同的,这就是为什么你得到编译器错误。你需要通过移除(至少一个)*
从LHS解决这一问题或添加&
(地址运算符)的RHS(有&var
)。
你可以编辑你的问题,删除所有大胆的脸全部大喊大叫。你不需要留言。我们可以在这里很好。 – 2012-03-22 10:41:33
我编辑了一下,但我实际上并不确定星号的星期数:-S – 2012-03-22 10:43:33
@KerrekSB Gah,星秒数不断变化。我正在删除我的答案! – 2012-03-22 10:44:28