IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

C++ Discussion :

Tableau 2 entrées problème compil borland


Sujet :

C++

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 8
    Points
    8
    Par défaut Tableau 2 entrées problème compil borland
    Bonjour,
    J'ai un petit problemme avec le compilateur il bute sur une étape de compilation.
    Cette etape compile bien avec gcc sous linux mais ne fonctionne pas avec
    le compilateur de borland
    Voici le code:

    istringstream fluxString(repStats);

    getline( fluxString,nbEnregistrement,';');
    getline( fluxString,nbChamps,';');


    QString nombreEnregistrement(nbEnregistrement);
    QString strNbChamps(nbChamps);

    int iNbChamps=1;
    int iNbEnregistrement=1;

    iNbChamps=strNbChamps.toInt();
    iNbEnregistrement=nombreEnregistrement.toInt();

    string enregistrement [iNbEnregistrement][iNbChamps];


    C'est la derniere ligne qui pose problemme il m'affiche 2 fois cette erreur:
    Expression Constante Nécessaires dans la fonction .............

    Ou est le problème ?
    Merci

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    La taille des tableaux statiques doit être connu à la compilation, c'est donc Borland qui a raison cette fois. Les VLA (Variable Length Array -- ce que tu utilises là sans le savoir) sont une extension du C99, c'est pourquoi GCC les tolère par défaut si tu n'as pas les bonnes options de compilation.

    Pour un tableau dynamique, il faut regarder du côté de std::vector.

  3. #3
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    C'est un tableau statique donc impossible de fixer sa taille à l'exécution.
    Il faut une allocation dynamique.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  4. #4
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    donc remplacer la ligne

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     string enregistrement [iNbEnregistrement][iNbChamps];
    par :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string enregistrement [][] = new string [iNbEnregistrement] [iNbChamps] ;
    Quand je fais ca, le comiltateur me sort une autre erreur:
    La taile du type 'string []' est inconue ou zero
    Impossible de convertir 'string ( *)[1]' en 'string[][]'


    et avec :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string **enregistrement = new string [iNbEnregistrement] [iNbChamps] ;
    le compilateur me dit:
    Impossible de convertir 'string ( *)[1]' en 'string[][]'

  5. #5
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    new renvoie des pointeurs.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  6. #6
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Un tableau dynamique à deux dimensions ne s'alloue pas comme ça.
    http://c.developpez.com/faq/cpp/?pag..._new_array_dim

  7. #7
    Membre expert
    Avatar de Pragmateek
    Homme Profil pro
    Formateur expert .Net/C#
    Inscrit en
    Mars 2006
    Messages
    2 635
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Val de Marne (Île de France)

    Informations professionnelles :
    Activité : Formateur expert .Net/C#
    Secteur : Conseil

    Informations forums :
    Inscription : Mars 2006
    Messages : 2 635
    Points : 3 958
    Points
    3 958
    Par défaut
    On peut allouer dimension par dimension comme en C:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    int **t=new int*[n];
    for(int i=0;i<m;i++){
            t[i]=new int[m];
            }
    Mais ça me paraitrait étrange que le C++ ne permette pas de gérer cela différemment.
    Formateur expert .Net/C#/WPF/EF Certifié MCP disponible sur Paris, province et pays limitrophes (enseignement en français uniquement).
    Mon blog : pragmateek.com

  8. #8
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    En C++ on utilise une classe qui encapsule tout ça. Malheureusement tout ce que propose le standard c'est std::vector, qui est parfois pénible pour les tableaux multi-dimensionnels.

    Parfois aussi, simuler un tableau 2D avec un tableau 1D est plus simple.

  9. #9
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Cool merci ca à l'air de marcher, en tout cas ca compile bien.


    j'ai donc remplacer:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    string enregistrement [iNbEnregistrement][iNbChamps];
    par:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    string **enregistrement=new string *[iNbChamps];
            for(int i=0;i<iNbEnregistrement;i++)
            {
                enregistrement[i]=new string[iNbEnregistrement];
            }

  10. #10
    Futur Membre du Club
    Homme Profil pro
    Développeur .NET
    Inscrit en
    Octobre 2004
    Messages
    15
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 37
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur .NET
    Secteur : Communication - Médias

    Informations forums :
    Inscription : Octobre 2004
    Messages : 15
    Points : 8
    Points
    8
    Par défaut
    Voila je vient de retester l'application avec le serveur et ca marche !!!!

    Alors c'est ok pour moi merci a tous de vos réponse super rapide et éfficaces


    Pour info quelqun sur un autre forum ma donnée cette réponse(ca peut peut etre servir à quelqun) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    vector< vector<string> > enregistrement(iNbEnregistrement, vector<string>(iNbChamps);
    Merci et A+

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème compilation tableau multidimensionnel
    Par Marneus dans le forum Débuter
    Réponses: 6
    Dernier message: 23/03/2009, 16h57
  2. [XSLT]tableau double entrée avec cellule manquante
    Par nferay dans le forum XSL/XSLT/XPATH
    Réponses: 9
    Dernier message: 08/03/2005, 15h07
  3. Problème compilation (toolkit Maximum Entropy)
    Par yannick_frere dans le forum MFC
    Réponses: 4
    Dernier message: 07/03/2005, 09h47
  4. Problème compilation Version 8.0.1 sous Debian Sarge
    Par LIndien dans le forum PostgreSQL
    Réponses: 1
    Dernier message: 04/02/2005, 21h38
  5. [Kylix] problème compilation kylix3 avec redhat 9.0
    Par madininaoursa dans le forum EDI
    Réponses: 1
    Dernier message: 02/07/2003, 16h21

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo