我刚才问了一个类似的问题,它完美地回答了我的问题,但我有一个新的困境,我不完全理解,如果有人能提供帮助,我将不胜感激。我在一个类中有以下变量:
ID3D11Buffer* variable
我需要在我的 DirectX 绘图调用中取消引用此变量,因此我创建了一个函数来执行此操作:
const ID3D11Buffer* GetBuffer() const { return &variable; }
但后来我得到了这个我不太明白的错误,而且很难用谷歌搜索:
错误 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; }
// ^^^^^^^^
并返回他原来做的,也就是指针变量
的地址。
关于c++ - 引用对象内部的指针,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20460110/