引用对象内的指针

时间:2013-12-08 22:38:33

标签: c++ directx

前一段时间我问了一个与此类似的问题,完全回答了我的问题,但是我有一个新的困境,我不完全理解,如果有人可以提供帮助,我会很感激。我在类中有以下变量:

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 *'

4 个答案:

答案 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(指针或变量),你可以向后读它。

  • const type * X; - >指向'type'类型的变量的指针,它是const(数据是常量)
  • type * const X; - > const指向“type”类型的变量(指针是const)
  • const type * const X; - > const指向“type”类型变量的const指针,它是const(数据和指针是const)