2011-02-09 4 views
1

私の.hでは変数がTexture ** skyboxTexturesです。私は1つの方法では、いくつかのテクスチャのポインタを割り当て、すぐにそれらを使用する:** varname []に​​* varnameを割り当てる際に問題が発生しました。 C++

Texture *skt[] = { 
    tleft, 
    tright, 
    tfront, 
    tback, 
    tup, 
    tdown 
}; 
skyboxTextures = skt; 

for(int i = 0; i < 6; i++) 
{ 
    skyboxTextures[i]->load(); 
} 

を次に後、私は再びテクスチャを使用しようとする別の方法で。

Texture *skt[] = skyboxTextures; 

// Render the front quad 
skyboxTextures[0]->activate(); 

これは私のオブジェクトにはもうアクセスできません。これは、このエラーのコンパイルされません。

error C2440: 'initializing' : cannot convert from 'Texture **' to 'Texture *[]' 

私はラインTexture *skt[] = skyboxTextures;をコメントアウトした場合、私が得るすべては無効なテクスチャポインタです。

+5

あなたは何をしようとしていますか? –

+0

@Piotrブローアップ...どの惑星か推測する。 –

+0

skyboxTexturesは6つのテクスチャポインタの配列で、私のskyboxオブジェクトは自身を描画する方法を知っています。最初に使用するテクスチャは、マップをロードするときにテクスチャのファイル名を読み込むときです。 2番目の使用はテクスチャをアクティブにするので、スカイボックスを描画するときには正しいテクスチャイメージで塗りつぶされます。 – TealFawn

答えて

0

Then later in another method I try to use the textures again.

これはできません。配列を最初の要素へのポインタに変換することは、一方向の処理です。配列はまだ配列のままですが、コンパイラはコンパイル時に使用できる配列のサイズなどの情報を持っています。一度それがポインタであると、コンパイラはその情報を持っていません。

sktを参照するか、skyboxTexturesを配列に戻してください。 skyboxTextures[0]->activate();は期待どおりに動作するはずです。

If I comment out the line Texture *skt[] = skyboxTextures;, all I get are invalid texture pointers.

私の推測では、問題はここにあるということです:あなたは、あなたが他のアレイを使用する場合tleft、tright、tfront、がtback、TUP、およびTDOWNが有効であることを確認する必要があり

Texture *skt[] = { 
    tleft, 
    tright, 
    tfront, 
    tback, 
    tup, 
    tdown 
}; 

。あなたがスタックにそれらを割り当てたような何かをして、あなたのメソッドからポインタとしてskyboxTexturesを返した場合、未定義の振る舞いをします。おそらく、これらをヒープ割り当てに置く必要があります。

1

配列を割り当てることはできません。残念ながら、あなたのコードの小さなスニペットを提供しただけで、何を示唆するべきかを正確に知ることは難しいです。私はこれを読むことをお勧めします:http://c-faq.com/aryptr/index.html

0

ティール、

このライン テクスチャをアップデートしてみてください* SKT [] =のskyboxTextures。

~ テクスチャ** skt = skyboxTextures;

+0

しかし、私はあなたにテクスチャ**をテクスチャにしたいのですか? – rajeshnair

+0

配列の場合、 'sizeof()'のようなものを使うことができます。 –

関連する問題