#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]时,出现以下编译错误:





最佳答案

声明数组时,不能在方括号之间输入非常数值:

int Amta[size];

由于您是从用户那里获得size的,因此编译器无法提前告知Amta需要多少内存。在这里要做的最简单的事情(尤其是对于练习而言)是选择一个相对较大的值并使该常量分配不变,例如:
int Amta[1024];

然后,如果您要小心(并且应该),则可以检查if (size > 1024)并在用户希望大小超出预分配范围的情况下打印错误。

如果您想花哨的话,可以定义没有预设大小的Amta(例如int *Amta;),然后再使用malloc进行分配:
Amta = (int *)malloc(sizeof(int) * size);

然后,还必须在完成后释放Amta:
free(Amta);

10-07 18:41