2013-12-08 132 views
0

我之前問過一個類似於這個問題的問題,它完美地回答了我的問題,但我有一個新的難題,我不完全明白,如果有人可以幫忙,我將不勝感激。我有以下變量的類:在對象中引用一個指針

ID3D11Buffer* variable 

我需要去參考我在繪製調用支持DirectX這個變量,所以我創建一個函數來做到這一點:

const ID3D11Buffer* GetBuffer() const { return &variable; } 

但後來我得到這個錯誤,我真的不明白,它是有點難以谷歌:

錯誤C2440:「迴歸」:不能從轉換「ID3D11Buffer * const的*」到「常量ID3D11Buffer *」

有限公司嗯,明智的C++大師請賜教嗎? :D

編輯:有了答案提供了我得到一個新的錯誤,這就是爲什麼我試圖在開始時添加&,我該如何使這條線有效?

繪製調用線:

md3dImmediateContext->IASetVertexBuffers(0, 1, cube.GetBuffer(), &stride, &offset); 

下面的答案創建這個新的錯誤:

錯誤C2664: 'ID3D11DeviceContext :: IASetVertexBuffers':不能參數3轉換從 '常量ID3D11Buffer *' 來'ID3D11Buffer * const的*'

原代碼,我不得不做這項工作是

md3dImmediateContext->IASetVertexBuffers(0, 1, &buffer, &stride, &offset); 

編輯#2:感謝您的幫助,您的建議使get函數有效,但IASetVertexBuffers函數仍然不喜歡它。它返回此錯誤與新的建議:

錯誤C2664: 'ID3D11DeviceContext :: IASetVertexBuffers':無法從 '常量ID3D11Buffer * const的*' 到 'ID3D11Buffer * const的*' 轉換參數3

回答

2

GetBuffer應該返回指向緩衝區的指針 - 不是指向它的指針(指針)。由於variable已被定義爲指針,你可以簡單地返回:

const ID3D11Buffer* GetBuffer() const { return variable; } 

&variableID3D11Buffer**型不ID3D11Buffer*類型的指針,因此錯誤匹配。

編輯 -

閱讀到OP的崗位上做出了編輯之後,很顯然,GetBuffer應該指針(以指針)返回緩衝區。所以實際上錯誤的是返回類型,而不是返回值。於是,他只需要返回類型簽名改爲:

const ID3D11Buffer* const* GetBuffer const { return &variable; } 
//    ^^^^^^^^ 

,回到他本來,這是指針variable的地址。

+0

謝謝但是這會產生一個新的錯誤,我已經更新了我的帖子的細節:) – user1157885

+0

@ user1157885 I是在你的返回值錯誤的印象之中,實際上它是*返回類型*是錯誤的 - 將你的返回類型改爲'const X * const *'並返回'&variable'。 – 0x499602D2

+0

嗯,謝謝,它使功能有效,但DirectX繪製調用仍然不太喜歡它。我已經用新錯誤更新了我的帖子:( – user1157885

0

看看const X * const

如果繪製在*

左邊的常量指的是指針,所以你不能改變指針值(它指向)

右側的const指的是指向的對象,因此您無法更改內容

1

variable已屬於ID3D11Buffer*類型。所以返回return variable;應該就足夠了。

0

找出哪個是const(指針或變量),你可以反向讀取一個小技巧。

  • const type * X; - >指向類型爲'type'的變量的常量(數據爲const)
  • type * const X; - >指向類型'type'的變量的const指針(指針是const)
  • const type * const X; - > const指針指向一個類型爲'type'的變量,它是const(數據和指針是常量)
相關問題