2012-05-03 19 views
0

ちょっと私は私がC++を初めて使っていて、プロジェクトに通っています。私は大学で勉強しています。 (リストは名前=連鎖、キュー名=キュー、商品は基本的に連鎖フィールドを持つ構造体です)[btw誰かがそれを知っていれば私はSahnisの本(データ構造)を使用しました。私はここで立ち往生しています:オブジェクトの初期化の配列

任意のアイデアをintに*> *キューから無効な変換:ループ上の

int k=4; 
Queue<Chain<Product>*>* x = new Queue<Chain<Product>*> [k]; 
for(int i=1;i<k;i++) 
{ 
    x[i] = new Queue<Chain<Product>*> [i+1]; 
} 

は、それは私にエラーがスローされますか?

+3

配列は0ではなく1から始まります。 – chris

+1

'[i + 1]'を取り除きます。 – ildjarn

+0

ポインタ配列の代わりにベクトル(または通常の配列)を使用すると便利です。 – chris

答えて

2

Queue<Chain<Product>*>* x = new Queue<Chain<Product>*> [k]; 

Queue<Chain<Product>*>オブジェクトではなく、ポインタの配列を作成しますので、それは

for(int i=0;i<k;i++) // first index is 0 
{ 
    x[i] = Queue<Chain<Product>*>(); 
} 

でなければなりません。

それとも、2次元配列をしたい場合は、使用:

Queue<Chain<Product>*>** x = new Queue<Chain<Product>*> * [k]; 
for(int 0=1;i<k;i++) 
{ 
    x[i] = new Queue<Chain<Product>*> [i+1]; 
} 

を簡素化するために、あなたは基本的に次のことをしようとしている:

int* x = new int[4]; 
for (int i = 0 ; i < 4 ; i++) 
    x[i] = new int[i]; 

明らかに間違っあります。

+0

Btw、私はそれがC++で実行可能かどうかを覚えていませんが(私はC#とJavaで主に働いています)、待ち行列 *>は静的関数 '.operator [int x]'を持っていませんか?明らかにここのケースではなく、ただ尋ねるだけです。 –

+0

@Shingetsuはい、演算子をオーバーロードする可能性がありますが、私は 'static'演算子[]'を持っていないと思います。 –

+0

私は、静的であるように演算子をオーバーロードすることは可能ですか?そして、それが存在する可能性がある場合、特定のファイルの場所または同様の場所からクラスのデコードされたバージョンを取得するために使用される可能性があります。 –

1

x[i] = new Queue<Chain<Product>*> [i+1]の行で彼[i + 1]が間違っています。
なぜですか?あなたは新しいオブジェクトnewキーワードを作成しています。アレイでは.operator[int x]が使用されます。その行では、サイズがi + 1で、型がQueue<Chain<Product>*>の新しい配列でなければならないと言っています。

for(int i=0;i<k;i++)//because indexes begin at 0, not 1. 
{ 
    x[i] = Queue<Chain<Product>*>() 
} 

注*( - 廃棄物のスペースを、私は周りのコードをコピーしません)、あなたの間違いの簡易版を参照して、他の人の記事を参照してください。代わりにx[i] = Queue<Chain<Product>*>();

を使用するので、コードが終了します。

+0

ありがとうございました。私はそれを実行すると完璧な、しかし、ウィンドウが私はそれがfilename.exeがexececutingを停止したことを言うそれを実行するときにエラーをポップアップ。 forループがなければ、同じことが起こり、私の配列のために保存されたスペースがまだ残っていないことを意味します。単に私の古いコードidをコンパイルしていないので、私はいくつかのミスを犯しましたが、もし私がforループを持っていなかったなら、結果はあなたのコード –

+0

@ Tryme_34と同じものになります。実行を停止してもメモリが不足しているとは限りません。私の推測では、コードの後のエラーです。完全なソースで新しい質問を投稿してください。 –

+0

私は明日に投稿しますが、私のコードはコンパイルして初期化せずに大丈夫にしてください。このコードウィンドウを追加するとメッセージがポップアップします 明日は全面的なヘルプを作成します! –