2011-12-08 2 views
1

ダイナミックメモリを作成しようとしています。配列のサイズは、ユーザー入力によって決定されます。次のエラーが表示されます。 "expression must have a constant value"C++でダイナミックメモリを作成する

私は何か間違っているようです。私を助けてください!どのように私はこの動的にすることができますか?

これは私がこれまで持っているものです。

int* IntPtr = NULL; 
int main(){ 

int arraySize; 
cout << "How many numbers will be on the list? "; 
cin >> arraySize; 

IntPtr = new int[arraySize]; 

Contact list[arraySize]; // <-- expression must be constant 

//more code 

delete [] IntPtr; 
+0

ユーロ使用の代わりに 'のstd ::ベクトルを'。その後、最終サイズを知る必要はありません。ユーザに別の番号を尋ねるだけで、 'push_back'メソッドを使ってベクターに追加し、必要に応じて拡大します。乾杯&乾杯。 –

答えて

5

あなたはVariable Length Arraysを使用しようとしています。残念ながら、C++ではそれらを許可していません。 (一部のコンパイルでは拡張が可能ですが)

代わりに、newを使用して動的に配列を割り当てる必要があります。

IntPtr = new int[arraySize]; 

は今、あなたはlist変数と同じ操作を行うことができます。また

Contact *list = new Contact[arraySize]; 
delete [] list; 

することができます、あなたが既にしてこれを正しくやっている

(および手動deleteして後で割り当てを解除) vectorクラスを使用します。これは、動的配列よりもしばしば好まれます。

vector<Contact> list(arraySize); 
3

使用std::vector<Contact>代わりに、またはあなたが裸の配列を割り当てたい場合は、IntPtrで行うのと同じ操作を行います。

Contact* list = new Contact[arraySize]; 
関連する問題