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.

Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
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 :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
fseek(in_file[ind],sizeof(float)*i,SEEK_SET);
Quelqu'un saurait me dire comment faire pour que ça compile correctement ?