7
#include <iomanip>
#include <iostream>
#include <Windows.h>
using namespace std;

template <class T>
void sort(int n, T a[]){
       for(i=0;i<n-1;i++){
          for(j=i;j<n;j++){
               if(a[i] > a[j]){
               temp=a[i];
               a[i]=a[j];
               a[j]=temp;
               }
           }
     }
}


void main(){
    int size;
    cout<<" Please input the amount of numbers you would like to sort"<<endl;
    cin>>size;
    int Amta[size];
    for(int i=0; i<size; i++){
        cout<<"Please enter the "<<size+1<< "number";
        cin>>Amta[i];
    }
    Sleep(100000);
}

ユーザーがユーザーから入力したい数字の数を取得し、それを可変サイズに格納しようとしています。

しかし、初期化するarray Amta[size]と、次のコンパイル エラーが発生します。

式には定数値が必要です

C2057: 定数式が必要です" コンパイル エラーです。

4

2 に答える 2

14

配列を宣言するとき、角かっこの間に非定数値を入力することはできません。

int Amta[size];

ユーザーから取得sizeしているため、コンパイラーは に必要なメモリー量を事前に知ることができませんAmta。ここで (特に演習で) 最も簡単なのは、次のように、比較的大きな値を選択して一定の割り当てにすることです。

int Amta[1024];

そして、注意が必要な場合 (注意する必要があります) if (size > 1024)、ユーザーが事前に割り当てられた境界を超えるサイズを希望する場合は、エラーを確認して出力できます。

派手にしたい場合はAmta、事前に設定されたサイズなしで定義し、int *Amta;後で次のように割り当てることができますmalloc

Amta = (int *)malloc(sizeof(int) * size);

次にAmta、使い終わったら、後で解放する必要があります。

free(Amta);
于 2013-10-24T03:07:59.270 に答える