c++ - 引用对象内部的指针

标签 c++ directx

我刚才问了一个类似的问题,它完美地回答了我的问题,但我有一个新的困境,我不完全理解,如果有人能提供帮助,我将不胜感激。我在一个类中有以下变量:

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/

相关文章:

由 小码哥发布于 2019-11-08 11:00:01 c++ DirectX 11 glGetUniformLocation 等价物

c++ - 检查 3D 点是否位于 3D 柏拉图立体内部?

c++ - 制作动态对象数组问题?

c++ - 在 C++ 中,您可以先构造子成员,然后在父构造函数中使用吗?

c++ - 在派生类中更改功能访问模式

directx - HLSL 无效 ps_2_0 输入语义 POSITION0

c# - 在 Visual Studio 2012 中使用 DirectX

c++ - 为什么这个 XMVector3Transform 调用没有返回正确的结果?

c++ - 在 DirectX 中创建和使用纹理

c++ - C++ 标准库是如何在幕后工作的?