2010-11-29 11 views
2

ダム質問です。しかし、これを行うことができます。 (ちなみにこれらはグローバル変数)Imは、ファイルのサイズを取得した場合配列サイズが定義されていませんか? C++

int size; 
double Values[size]; 

私はファイルから読み込んだ番号に基づいてサイズを再調整するための方法を知っているかもしれませんが(私が7で読んだと言うように、値はサイズ7でなければならないことを知っています) 。

コンパイラは文句を言っていますが、いくつかの回避策があるのか​​不思議です。 (これらはグローバル変数ところでとして滞在する必要が

+0

グローバルにする必要がありますか? – helpermethod

+1

@Helper:これまで何もグローバルにする必要はありません。まあ、 "これまで何も"少し強いですが、あなたは私のポイントを得る。 –

+0

@Johnこれは、皮肉な質問の多くでした。悲しいことに、皮肉な形で埋め込むことは難しいです:-)。 – helpermethod

答えて

6

を。一定の整数表現。コンパイル時に知られている意味している。

あなたはおそらくとにかく、これを実行すべきではない。その代わり、あなたはベクトルを使用する必要があります。

何らかの理由でベクトル(私が真剣に疑う)を使うことができないなら、次のオプションは動的に割り当てられた配列を使うことです。しかし、もしあなたがこれを行うなら、彼は世界の良いintすべての愛のために、スマートなポインタを使用してください。

+1

スタックベースの動的配列には、標準ではないが明らかに非常に一般的なalloca()を使用することもできます。 – Puppy

+0

私はベクトルを使うつもりだったのですが、なんらかの理由で私の世界でベクトルにたった一つの行を読む方法を見つけることはできません。ベクトルがどれくらいの長さである必要があるかを知っているとき(最初の値を読み込んだ後) –

+1

@Mercfh:それについての別個の質問を投稿してください。私はあなたが42秒以内に答えを得ると推測します。たぶん私から。 –

2

あなたがそれらを動的に割り当てる場合は、それを行うことができます。いいえ、あなただけ使用して、このような配列のサイズを指定することができます

double *Values = new double[size]; 
... 

delete [] Values; 

ではなく、静的

+0

どうすればいいですか?それらを動的に割り当てる。私はSize = 10と言っていますが、ファイルから数値を読み込んだら、後でプログラムのサイズを変更することはできますか? –

+0

申し訳ありませんが、グローバル変数について少し不足しています。値を宣言する場所( 'double * Values;')で 'new'を実行しないで、ファイルからサイズを読み取ったときはどこにでも設定します(つまり、' Values = new double [size]; ')。 –

3

することができます、実際に:)

C99はそれを可能にします。 MSVCはC99をサポートしていませんが、GCCはサポートしていません。

C++コンパイラも拡張(あなたはコンパイラの拡張機能に依存してOKなら、自分自身を答える)としてそのを可能にする傾向があります。唯一の要件は、Valuesの宣言の瞬間にsizeを知る必要があることです。あなたは本当に本当には、スタック上のデータを使用する場合に限り

std::vectorは、通常、より良い(とより安全とstandarisedなどに)とにかくです。

+1

C99は本当に**グローバル**可変長配列をサポートしていますか? – fredoverflow

+0

宣言の瞬間に 'size'が知られていたので、グローバル配列の場合、ここで何か間違っていない限り、"コンパイル時に知られています "に減らします。 – Kos

関連する問題