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 : invalid types «int[int]» for array subscript


Sujet :

C++

  1. #1
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut Erreur : invalid types «int[int]» for array subscript
    Bonjour,

    Je débute en C++ et j'essaye de faire un petit projet pour appréhender toutes les facettes de ce langage. J'ai quelques notions en C mais toujours des problèmes avec ces satanés pointeurs, adresses etc...
    Lorsque je lis un cours, je comprends pas trop mal mais il faut à chaque fois que je réfléchisse (trop longtemps...) lorsque je vois un *, ** ou &
    Et donc je ne m'en sors pas, j'ai beau rabâcher tout ça, ça ne rentre pas...
    Ca doit être l'âge...
    En tout cas, je tente tout de même de développer un jeu de morpion.
    Voici mes 3 fichiers :

    Définition de ma classe Echiquier : l'objet possède un tableau à 2 dimensions de 3 x 3 (aie les problèmes vont venir de là...), une méthode init() et une methode print() :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    // morpion.h
     
    #ifndef MORPION_H
    #define MORPION_H
     
    class Echiquier {
      public:
      int plateau[3][3] ;
      void init() ;
      void print() ;
    } ;
     
    #endif
    Définition des fonctions : la méthode init() sur un objet de classe Echiquier rempli le tableau à 2 dimensions de 0; la méthode print() pour l'instant ne fait rien
    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
     
    // morpion.cpp
     
    #include "morpion.h"
     
    void Echiquier::init() {
      for ( int i=0; i<3; i++ ) {
        for ( int j=0; j<3; j++ ) {
          plateau[i][j] = 0 ;
        }
      }
    }
     
    void Echiquier::print() {
    }
    Le programme en lui-même qui créé un objet ech de la classe Echiquier et qui l'initialise :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    // morpionTest.cpp
     
    #include <iostream>
    #include "morpion.h"
     
    using namespace std;
     
    int main() {
      Echiquier ech ;
      ech.init();
    }
    A la compilation,
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    gcc morpion.cpp morpionTest.cpp
    j'ai l'erreur suivante :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    morpion.cpp: In member function «void Echiquier::init()»:
    morpion.cpp:8: erreur: invalid types «int[int]» for array subscript
    Je me doute qu'il s'agit d'un problème du au tableau à deux dimensions et à l'utilisation de pointeurs pour remplir celui-ci. J'ai essayé ceci sans trop comprendre ce que je faisais mais l'erreur est la même :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    *plateau[i][j] = 0       
    ou
    **plateau[i][j] = 0 ;
    Ca fait 2 jours que je tourne sur plein de tuto mais je n'arrive pas à m'en sortir.
    Merci pour une explication !!!

  2. #2
    Membre émérite Avatar de Astraya
    Homme Profil pro
    Consommateur de café
    Inscrit en
    Mai 2007
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France

    Informations professionnelles :
    Activité : Consommateur de café
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2007
    Messages : 1 047
    Points : 2 251
    Points
    2 251
    Par défaut
    Bonjour,

    Tu incrémentes une fois de trop tes boucles for

    Définition de ma classe Echiquier : l'objet possède un tableau à 2 dimensions de 3 x 3
    Tu fais un tableau de 2 x 2

  3. #3
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Citation Envoyé par Astraya Voir le message
    Bonjour,

    Tu incrémentes une fois de trop tes boucles for

    Tu fais un tableau de 2 x 2
    Ah oui, je corrige le code, mais en fait c'est pas la boucle qui n'est pas bonne mais la définition du plateau qui doit être plateau[3][3] au lieu de plateau[2][2]
    Donc la boucle est bonne ( de 0 à 2 pour i et 0 à 2 pour j)...
    Mais le message d'erreur persiste à la compil...

  4. #4
    Membre éclairé Avatar de MatRem
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2002
    Messages : 750
    Points : 693
    Points
    693
    Par défaut
    Tu peux peut être essayer de passer en unsigned int dans ta boucle.
    Ca peut être un bug d'accéder à un tableau avec un index négatif, mais bizarrement j'ai pas ce warnings avec gcc 4.5 en pedantic (donc c'est peut être pas ça le problème ).

  5. #5
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Citation Envoyé par MatRem Voir le message
    Tu peux peut être essayer de passer en unsigned int dans ta boucle.
    Je ne comprends pas trop comment faire ça...
    J'ai essayé de mettre "unsigned plateau[i][j] = 0" mais j'ai une erreur
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
     variable-sized object «plateau» may not be initialized
    donc je pense que ce n'est pas ce que tu voulais dire...
    Que veux tu dire par "passer en unsigned int" ?
    Citation Envoyé par MatRem Voir le message
    Ca peut être un bug d'accéder à un tableau avec un index négatif, mais bizarrement j'ai pas ce warnings avec gcc 4.5 en pedantic (donc c'est peut être pas ça le problème ).
    Tu veux dire que chez toi mon code compile ???
    Ici j'ai :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    gcc --version
    gcc (GCC) 4.2.4 (Ubuntu 4.2.4-1ubuntu4)

  6. #6
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Ah, pour le unsigned de la boucle, j'ai essayé ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    void Echiquier::init() {
      for ( unsigned int i=0; i<3; i++ ) {
        for ( unsigned int j=0; j<3; j++ ) {
          plateau[i][j] = 0 ;
        }
      }
    }
    mais toujours une erreur, qui porte bien sur le type :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    invalid types «int[unsigned int]» for array subscript

  7. #7
    Membre habitué
    Homme Profil pro
    En rupture avec la societé
    Inscrit en
    Novembre 2008
    Messages
    144
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : En rupture avec la societé

    Informations forums :
    Inscription : Novembre 2008
    Messages : 144
    Points : 194
    Points
    194
    Par défaut
    salut

    il me semble que pour compilé en c++ ca nous donne ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ morpion.cpp morpionTest.cpp
    bon code

  8. #8
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Citation Envoyé par burndev Voir le message
    il me semble que pour compilé en c++ ca nous donne ceci ?
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    g++ morpion.cpp morpionTest.cpp
    J'ai trois outils de compilation :
    g++
    gcc
    g++-4.2
    Tous me donnent la même erreur de compilation.
    Citation Envoyé par burndev Voir le message
    bon code
    C'est ce que tu me souhaites ou c'est ce que tu observes sur le code que j'ai envoyé ?
    J'aimerais savoir si cela compile sans erreur chez vous et quelle version de compilateur.
    Je suis sous Ubuntu 8.04, peut être est-ce le moment d'upgrade sur 10.04...

  9. #9
    Membre confirmé
    Inscrit en
    Juillet 2005
    Messages
    512
    Détails du profil
    Informations forums :
    Inscription : Juillet 2005
    Messages : 512
    Points : 641
    Points
    641
    Par défaut
    J'ai testé ton code il compile.
    L'erreur doit venir d'ailleurs.

  10. #10
    Membre habitué
    Inscrit en
    Juin 2007
    Messages
    259
    Détails du profil
    Informations forums :
    Inscription : Juin 2007
    Messages : 259
    Points : 177
    Points
    177
    Par défaut
    Citation Envoyé par Lucien63 Voir le message
    J'ai testé ton code il compile.
    L'erreur doit venir d'ailleurs.
    Ok, merci pour ton retour.
    J'ai upgradé mon ubuntu 8.04 LTS -> 10.04 LTS ce qui m'a installé une version à jour de g++
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    g++ (Ubuntu 4.4.3-4ubuntu5) 4.4.3
    Et maintenant le code compile sans erreur...

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

Discussions similaires

  1. Réponses: 7
    Dernier message: 14/03/2014, 21h50
  2. erreur :invalid types ‘bool[int]’ for array subscript
    Par ferhat.adel dans le forum Débuter
    Réponses: 1
    Dernier message: 10/06/2013, 18h56
  3. [caml light] ( int -> int ) -> int
    Par ylarvor dans le forum Caml
    Réponses: 5
    Dernier message: 26/11/2009, 19h35
  4. Réponses: 0
    Dernier message: 26/08/2009, 15h59
  5. Array subscript has type 'char'
    Par obelix dans le forum C
    Réponses: 11
    Dernier message: 31/10/2005, 18h21

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