#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?
8 Réponses :
Le tableau sera attribué à l'heure de la compilation, et étant donné que Taille code> n'est pas une constante, le compilateur ne peut pas déterminer avec précision sa valeur. P>
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. P>
C'est une restriction de la langue. Les tailles de tableau doivent être des expressions constantes. Voici une jsutification partielle de Cplusplus.com P>
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. P> blockQuote>
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];
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?) P>
En outre, vous auriez besoin de faire une taille une taille, et non d'une variable. P>
edit: strong> Malheureusement, cette réponse n'a plus de sens puisque l'affiche a changé de question. P>
std::vector< std::pair<float, float> > x(size); // syntax: x[i].first, x[i].second
La taille d'un tableau automatique doit être une constante de temps de compilation.
std::vector<std::pair<float, float> > x(somesize);
Parce que cela s'attendait à une expression constante! p>
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 Utiliser une allocation dynamique ou const code>: ils ont em> être codé dur dans le programme. P>
std :: vecteur code> (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. P>