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 :

erreur a la compilation


Sujet :

C++

  1. #1
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Points : 22
    Points
    22
    Par défaut erreur a la compilation
    Bonjour,

    J'ai une erreur de compilation que je ne m'explique pas... est ce que qqn saurait comment je peux m'en sortir?

    je declare un tableau statique en 2D:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    int triTable[256][16] = 
    {
        {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
        {0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
        {0, 1, 9, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
        {1, 8, 3, 9, 8, 1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
         .......
    }
    Puis plus loin j'essaie d'acceder a une valeur de ce tableau:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    int u = triTable[i][j];
    et j'obtiens l'erreur de compilation suivante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    error: invalid types `int[int]' for array subscript

    Qqn saurait ou est l'erreur, et comment la corriger??

    merci!

    Z.

  2. #2
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par zeder59 Voir le message
    Bonjour,
    J'ai une erreur de compilation que je ne m'explique pas... est ce que qqn saurait comment je peux m'en sortir?
    Bonjour,
    Le code tel que tu le présentes compile sans problème. Quelle est la vrai ligne de code qui te pose problème. En particulier si triTable est une variable globale, comment est-elle déclaré dans le .h ? Ou s'il s'agit d'un paramètre de fonctions, quel est le prototype de la fonction ?

  3. #3
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    salut et merci pour ta reponse.

    dans mon .h, effectivement, il y avait un probleme.

    J'avais declaré:
    int* triTable;


    La j'ai trouvé une solution qui compile... mais c'est moche:
    dans mon .h:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
            vector<vector<int> > triTable;
    et dans mon .cpp:
    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
     
           int triTableInit[256][16] =
        {
            {-1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
            {0, 8, 3, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1, -1},
            ......
        };
     
     
        vector<int> v(16, -1);
        triTable.resize(256, v);
        for(int i = 0; i < 256; i++)
        {
            for(int j = 0; j < 16; j++)
            {
                v[j] = triTableInit[i][j];
            }
            triTable[i] = v;
        }
    y'a pas une solution plus elegante???

    Merci

  4. #4
    Membre éclairé Avatar de befalimpertinent
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    561
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Avril 2007
    Messages : 561
    Points : 833
    Points
    833
    Par défaut
    Tu peux créer un tableau simple de taille 256*16 (à la C ou vector peu importe) et accéder aux éléments en utilisant 256*j+i où j est dans [0,16] et i [0,256]
    Linux > *

  5. #5
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Citation Envoyé par zeder59 Voir le message
    salut et merci pour ta reponse.

    dans mon .h, effectivement, il y avait un probleme.

    J'avais declaré:
    int* triTable;
    int [][] == int **.

    Citation Envoyé par zeder59 Voir le message
    La j'ai trouvé une solution qui compile... mais c'est moche:
    Pas d'accord. std::vector<std::vector<int> > peut être une solution plus pertinente dans un code C++. En revanche, je comprend que l'assignation te gêne. Mais, Boost.Assign est ton ami : un tutoriel est disponible sur le site.

  6. #6
    Rédacteur
    Avatar de 3DArchi
    Profil pro
    Inscrit en
    Juin 2008
    Messages
    7 634
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2008
    Messages : 7 634
    Points : 13 017
    Points
    13 017
    Par défaut
    Encore plus simple, l'utilisation de Boost.Array :
    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
    20
    21
    22
    23
    #include <iostream>
    #include <boost/array.hpp>
     
     
    int main()
    {
       boost::array<boost::array<int,16>,4> tableau = { 
          {
             { 1, 2, 3,4,5,6,7,8,9,10,11,12,13,14,15,16 } ,
             { 101, 102, 103,104,105,106,107,108,109,110,111,112,113,114,115,116 } ,
             { 201, 202, 203,204,205,206,207,208,209,210,211,212,213,214,215,216 } ,
             { 301, 302, 303,304,305,306,307,308,309,310,311,312,313,314,315,316 } ,
          }
       };
       for(int i=0;i<4;++i){
          for(int j=0;j<16;++j){
             std::cout<<tableau[i][j]<<" ";
          }
          std::cout<<std::endl;
       }
     
       return 0;
    }
    C'est pas beau, ça

  7. #7
    Membre à l'essai
    Profil pro
    Inscrit en
    Janvier 2009
    Messages
    43
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2009
    Messages : 43
    Points : 22
    Points
    22
    Par défaut
    SAlut et merci pour toutes les reponses!
    Effectivement quand je dis que c'est moche, je parle de l'initialisation.
    Pour boost, depuis le temps que j'en entends parler, je vais jeter un oeil au tuto!

    merci a tous les deux!

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

Discussions similaires

  1. [Tomcat][JSP] Erreur de génération /compilation
    Par kedare dans le forum Tomcat et TomEE
    Réponses: 2
    Dernier message: 20/02/2006, 09h21
  2. Réponses: 2
    Dernier message: 11/02/2006, 15h42
  3. Réponses: 6
    Dernier message: 21/11/2005, 13h40
  4. Réponses: 2
    Dernier message: 14/11/2005, 11h07
  5. Erreurs à la compilation
    Par Code source dans le forum GLUT
    Réponses: 11
    Dernier message: 02/05/2004, 19h33

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