2012-03-22 13 views
0
IDirect3DSurface9 *var = NULL; 

IDirect3DSurface9 *** ret; 

varで参照される値をretで指される変数に代入したいとします。C++でのポインタの割り当て。 (ポインタへのポインタへのポインタはLHS上にあります)

私はfollをした:

(*(*(ret[0]))) = var; 

私は、これは正しいC++構文であると感じています。しかし、なぜ次のように私はコンパイルエラーを取得していますということです。

エラーC2679:バイナリ「=」:なしオペレータは タイプのオペランド「IDirect3DSurface9 *」(または、これらは全く許容 変換されていない)右手をとる見つかりません。

正しい構文は何ですか?

+1

あなたの質問を編集して、大胆な顔のすべての大帽子を叫ぶことができますか?あなたは叫ぶ必要はありません。私たちはここであなたをうまくいきます。 –

+0

私はちょっと編集しましたが、今はアスタリスクの意図された数について実際にはわかりません:-S –

+0

@KerrekSB Gah、数秒ごとにアスタリスクの数が変化し続けます。私は私の答えを削除しています! –

答えて

4

ポインタを3回参照解除しました。一度それを配列として扱い、インデックス[0]を使用した後、*演算子を使用してさらに2回。 varと互換性を持たせるには、2回だけ参照解除する必要があります。

より明確にするために、のは、これを打破してみましょう:

  • retIDirect3DSurface9***型を持ちます。
  • ret[0]は、タイプIDirect3DSurface9**です。
  • *(ret[0])は、タイプIDirect3DSurface9*です。
  • *(*(ret[0]))は、タイプIDirect3DSurface9です。

、はっきりと*(*(ret[0]))IDirect3DSurface9*型を持つvarと代入互換性はないということになります。あなたのコードが実際にどうあるべきかについては

、私は確かに言うことができませんでしたが、あなたは間接の1つのレベルを削除する必要があります。

+0

信じられないほど!!!!そんなに素早く答えてくれてありがとう!私はそれを解決した。 :)私は*(*(ret [0]))= * var;現在、両方のタイプのLHSとRHSは同じです。コンパイルエラーはありません。 – codeLover

+0

それはコンパイルエラーを削除しますが、私はそれが正しいと確信していません。あなたの割り当ては、 'IDirect3DSurface9'レベルではなく、' IDirect3DSurface9 * 'レベルでなければなりません。 –

+0

はい*(ret [0])= varのように変更できます。しかし、IDirectX3DSurface9 *レベルまたはIDirectX3DSurface9レベルでの割り当てをどうやって行うのが問題なのか疑いがあります。最後に、IDirectX3DSurface9の変数に格納されている値をコピーしていますか?私が間違っているとすみませます。親切に私を修正し、明確にする。ありがとう。 – codeLover

0

あなたはおそらくしたい:

(*(*(ret[0]))) = &var; 

または

*(*(*(ret[0]))) = var; 
2

すべて*[]は、間接のいずれかのレベルを奪います。右手側はIDirect3DSurface9 *を入力していながら、だからあなたのコード

(*(*(ret[0]))) = var; 

に左手側には、IDirect3DSurface9を入力しています。 2つのタイプが違うので、コンパイルエラーが発生します。これを解決するには、LHSから*(少なくとも1つ)を削除するか、を持つように&(アドレス演算子)をRHSに追加する必要があります。

関連する問題