C++ Expression doit avoir la valeur de la constante
#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);
}
Je suis en train d'essayer d'obtenir le nombre de chiffres que l'utilisateur souhaite l'entrée de l'utilisateur et de les stocker dans la variable de taille.
Mais quand j'initialise array Amta[size]
- je obtenir la suite des erreurs de compilation:
Expression doit avoir la valeur de la constante
et
C2057: attendu constante de l'expression" erreur de compilation.
- Vous devriez regarder dans le
new
etdelete
opérateurs pour faire des tableaux à la volée. cplusplus.com/reference/new/operator%20new - Mieux encore, regarder dans
std::vector
et ne visent pas autour de vos pieds avec un pistolet chargé. Aussi,void main
n'est pas légal C++. - double possible de c++ tableau - expresssion doit avoir une valeur constante
- Double Possible de Comment faire des compilateurs de traiter de longueur variable tableaux
Vous devez vous connecter pour publier un commentaire.
Vous ne pouvez pas entrer une non-valeur constante entre les crochets lorsque vous déclarez votre tableau:
Puisque vous êtes l'obtention de
size
de l'utilisateur, le compilateur ne peut pas dire à l'avance combien de mémoire dont il a besoin pourAmta
. La meilleure chose à faire ici (surtout pour un exercice) est de simplement choisir une relativement grande valeur et que la constante de répartition, comme:Et puis si vous voulez être prudent (et vous devez) vous pouvez vérifier
if (size > 1024)
et imprimer un message d'erreur si l'utilisateur veut une taille qui est au-delà de la pré-alloués limites.Si vous voulez obtenir la fantaisie, vous pouvez définir
Amta
avec pas de pré-taille de l'ensemble, commeint *Amta;
et puis vous allouer plus tard avecmalloc
:Alors vous devez aussi gratuit
Amta
plus tard, lorsque vous en avez terminé avec elle:malloc
en C++ est généralement une mauvaise idée.ints
. Ce n'est pas comme il y a un constructeur à être appelé. Quel est le problème?new
pour les objets et lesmalloc()
pour laint
s? Quel plaisir cela doit être.std::vector
par défaut. En bonus, je n'ai pas à nettoyer.new
etdelete
au lieu demalloc
etfree
C++ ne permet pas de tableaux de longueur variable. La taille doit être une constante. C99 ne la soutiennent donc si vous avez besoin vous pouvez utiliser un C99 conforme compilateur. Certains compilateurs comme GCC et Clang également en charge VLA comme une extension de C++ en mode
Mais si le C++ est un must, alors vous pouvez utiliser
alloca
(ou_alloca
sur Windows) pour allouer de la mémoire sur la pile et d'imiter la C99 de longueur variable de la matrice de comportementDe cette façon, vous n'avez pas besoin de libérer la mémoire après de sortir du champ d'application en raison de la structure de pile sera automatiquement restauré. Cependant vous devez être très prudent lors de l'utilisation de ce. C'est toujours mieux d'utiliser
std::vector
en C++ pour ces fins