我问了一个类似不久前的问题,该问题很好地回答了我的问题,但是我有一个新的难题,我不完全理解,如果有人可以帮助,我将不胜感激。我在课堂上有以下变量:

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的地址。

10-08 11:19