7
votes

C ++ Expression constante attendue

#include <iostream>
#include <fstream>
#include <cmath>
#include <math.h>
#include <iomanip>
using std::ifstream;
using namespace std;

int main (void)

{
int count=0;
float sum=0;
float maximum=-1000000;
float sumOfX;
float sumOfY;
int size;
int negativeY=0;
int positiveX=0;
int negativeX=0;
ifstream points; //the points to be imported from file
//points.open( "data.dat");
//points>>size;
//cout<<size<<endl;

size=100;
float x[size][2];
while (count<size) {



points>>(x[count][0]);
//cout<<"x= "<<(x[count][0])<<"  ";//read in x value
points>>(x[count][1]);
//cout<<"y= "<<(x[count][1])<<endl;//read in y value


count++;
}
This program is giving me expected constant expression error on the line where I declare float x[size][2]. Why?

0 commentaires

8 Réponses :


8
votes

Le tableau sera attribué à l'heure de la compilation, et étant donné que Taille n'est pas une constante, le compilateur ne peut pas déterminer avec précision sa valeur.


0 commentaires

4
votes

Vous ne pouvez pas disposer de tableaux de longueur variable (comme ils sont appelés en C99) en C ++. Vous devez utiliser des tableaux alloués dynamiquement (si la taille varie) ou une expression constante intégrale statique pour la taille.


0 commentaires

1
votes

C'est une restriction de la langue. Les tailles de tableau doivent être des expressions constantes. Voici une jsutification partielle de Cplusplus.com

Remarque: le champ Éléments entre crochets [] qui représente le nombre d'éléments que la matrice s'efforcera, doit être une valeur constante, car les tableaux sont des blocs de mémoire non dynamique dont la taille doit être déterminée avant l'exécution. Afin de créer des tableaux avec une mémoire variable de la mémoire dynamique est nécessaire, ce qui est expliqué plus loin dans ces tutoriels.


0 commentaires

2
votes

La ligne float x [taille] [2] code> ne fonctionnera pas, car les tableaux doivent être alloués à la compilation (avec quelques exceptions spécifiques au compilateur). Si vous souhaitez pouvoir facilement modifier la taille du tableau x code> sur compile em> heure, vous pouvez le faire:

 #define SIZE 100
 float x[SIZE][2];


0 commentaires

1
votes

Vous n'avez attribué aucune valeur à la taille; Ainsi, le compilateur ne peut pas allouer la mémoire de la matrice. (Un tableau de taille null? Quoi?)

En outre, vous auriez besoin de faire une taille une taille, et non d'une variable.

edit: Malheureusement, cette réponse n'a plus de sens puisque l'affiche a changé de question.


0 commentaires

12
votes
std::vector< std::pair<float, float> > x(size);
// syntax: x[i].first, x[i].second

0 commentaires

2
votes

La taille d'un tableau automatique doit être une constante de temps de compilation.

std::vector<std::pair<float, float> > x(somesize);


0 commentaires

2
votes

Parce que cela s'attendait à une expression constante!

Les dimensions du tableau en C (Ignorer les VLAS de C99) et C ++ doivent être des quantités connues à la compilée. Cela ne signifie pas juste étiqueté avec const : ils ont être codé dur dans le programme.

Utiliser une allocation dynamique ou std :: vecteur (qui est un wrapper autour de l'allocation de réseau dynamique) pour déterminer la taille des matrices au moment de l'exécution.


0 commentaires