Bonjour à tous,
Je découvre Visual C++ aujourd'hui avec un programme qui n'avait aucun soucis de compilation sous Linux (compilateur g++). Visual a visiblement un problème avec l'allocation d'un tableau (in_file) qui doit permettre d'accéder à une série de fichiers.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| // Juste pour info ---
char file_name[1024];
char** file_name_in;
file_name_in = (char**) malloc(max_index * sizeof(char*));
for (ind = 0; ind < max_index; ind++)
{
file_name_in[ind] = (char*) malloc(1024 * sizeof(char));
if (!file_name_in[ind])
printf("allocation failure for filename array %s",file_name_in[ind]);
fscanf(fp_feature, "%s", file_name_in[ind]);
}
//---
FILE * in_file[max_index]; // ligne 538 qui pose problème
for (ind = 0; ind < max_index; ind++)
{
sprintf(file_name,"%s", file_name_in[ind]);
if ((in_file[ind] = fopen(file_name, "rb")) == NULL) // ligne 545
printf("Could not open input file: %s", file_name);
} |
Sachant que :
- max_index est un int lu prédédemment dans un fichier
- feature_filename est un fichier qui contient les noms complets vers des fichiers de "features"
Quand je compile, j'obtiens les erreurs suivantes :
(538) : error C2057: expression constante attendue
(538) : error C2466: impossible d'allouer un tableau de taille constante 0
(538) : error C2133: 'in_file'*: taille inconnue
Du coup, j'ai tenté une autre façon d'allouer mon tableau in_file :
1 2
| FILE * in_file;
in_file = (FILE *) malloc(max_index * sizeof(FILE)); |
ce qui me génère ces nouvelles erreurs :
(545) : error C2679: '=' binaire*: aucun opérateur trouvé qui accepte un opérande de partie droite de type 'FILE *' (ou il n'existe pas de conversion acceptable)
1> c:\program files\microsoft visual studio 8\vc\include\stdio.h(68): peut être '_iobuf &_iobuf::operator =(const _iobuf &)'
1> lors de la tentative de mise en correspondance de la liste des arguments '(FILE, FILE *)'
(583) : error C2664: 'fseek'*: impossible de convertir le paramètre 1 de 'FILE' en 'FILE *'
1> Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
1>e:\svm\src\pspsvm.cpp(584) : error C2664: 'fread'*: impossible de convertir le paramètre 4 de 'FILE' en 'FILE *'
1> Aucun opérateur de conversion définie par l'utilisateur disponible qui puisse effectuer cette conversion, ou l'opérateur ne peut pas être appelé
La ligne 583 est la suivante :
fseek(in_file[ind],sizeof(float)*i,SEEK_SET);
Quelqu'un saurait me dire comment faire pour que ça compile correctement ?
Partager