前一段时间我问了一个与此类似的问题,完全回答了我的问题,但是我有一个新的困境,我不完全理解,如果有人可以提供帮助,我会很感激。我在类中有以下变量:
ID3D11Buffer* variable
我需要在DirectX的绘制调用中取消引用此变量,所以我创建了一个函数来执行此操作:
const ID3D11Buffer* GetBuffer() const { return &variable; }
但是后来我得到了这个我不太懂的错误,谷歌有点难:
错误C2440:'return':无法从'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 *'
答案 0 :(得分:2)
GetBuffer
应返回指向缓冲区的指针 - 而不是指向它的指针(指针)。由于variable
已经被定义为指针,因此您只需返回:
const ID3D11Buffer* GetBuffer() const { return variable; }
&variable
的类型为ID3D11Buffer**
,与ID3D11Buffer*
类型的指针不匹配,因此出错。
编辑 -
在阅读对OP的帖子进行的编辑之后,很明显GetBuffer
应该返回指向缓冲区的指针(指针)。所以实际上错误的是返回类型,而不是返回值。所以他只需要将返回类型签名更改为:
const ID3D11Buffer* const* GetBuffer const { return &variable; }
// ^^^^^^^^
并返回他最初所做的事情,这是指针variable
的地址。
答案 1 :(得分:1)
variable
已经属于ID3D11Buffer*
类型。所以返回return variable;
就足够了。
答案 2 :(得分:0)
查看const X * const
如果您在*
左侧的const指的是指针,因此您无法更改指针值(指向的位置)
右边的const指向被指向的对象,因此无法更改内容
答案 3 :(得分:0)
一个小技巧,找出哪个是const(指针或变量),你可以向后读它。