我问了一个类似不久前的问题,该问题很好地回答了我的问题,但是我有一个新的难题,我不完全理解,如果有人可以帮助,我将不胜感激。我在课堂上有以下变量:
ID3D11Buffer* variable
我需要在对DirectX的绘制调用中取消引用此变量,因此我创建了一个函数来这样做:
const ID3D11Buffer* GetBuffer() const { return &variable; }
但是然后我收到了一个我不太了解的错误,对Google来说有点难:
错误C2440:'返回':无法从'ID3D11Buffer * const *'转换为'const ID3D11Buffer *'
明智的C ++专家能启发我吗? :D
编辑:有了提供的答案,我得到一个新的错误,这就是为什么我尝试在开始时添加&的原因,我将如何使此行有效?
抽奖电话线:
md3dImmediateContext->IASetVertexBuffers(0, 1, cube.GetBuffer(), &stride, &offset);
下面的答案会创建此新错误:
错误C2664:'ID3D11DeviceContext :: IASetVertexBuffers':无法将参数3从'const ID3D11Buffer *'转换为'ID3D11Buffer * const *'
我要做这项工作的原始代码是
md3dImmediateContext->IASetVertexBuffers(0, 1, &buffer, &stride, &offset);
编辑#2:感谢您的帮助,您的建议使get函数有效,但是IASetVertexBuffers函数仍然不喜欢它。它使用新建议返回此错误:
错误C2664:'ID3D11DeviceContext :: IASetVertexBuffers':无法将参数3从'const ID3D11Buffer * const *'转换为'ID3D11Buffer * const *'
最佳答案
GetBuffer
应该返回一个指向缓冲区的指针-而不是指向它的指针。由于variable
已经被定义为指针,因此您可以简单地返回它:
const ID3D11Buffer* GetBuffer() const { return variable; }
&variable
的类型为ID3D11Buffer**
,与类型为ID3D11Buffer*
的指针不匹配,因此会出现错误。编辑-
读取对OP帖子所做的编辑后,很明显
GetBuffer
应该返回一个指向缓冲区的指针(指向该指针)。因此,实际上错误的是返回类型,而不是返回值。因此,他只需要将返回类型签名更改为:const ID3D11Buffer* const* GetBuffer const { return &variable; }
// ^^^^^^^^
并返回其最初的操作,即指针
variable
的地址。