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 :

Passage d'un tableau d'une classe.


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Par défaut Passage d'un tableau d'une classe.
    Bonjour,
    hier j'ai posé la question de comment passer un attribut d'une classe à une autre, aujourd'hui j'ai le même problème mais avec un tableau. Je n'arrive pas à passer l'ensemble du tableau, tout ce que j'arrive à faire c'est passer un élément à la fois :

    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
    24
    class MyTableau{
        public:
        MyTableau(){
     
            for (int i=0;i<4;++i){
            for(int j=0;j<3;j++){
                Tableau[j][i] = i+j;
     
            }
        }
        }
     
        float getTableau(int i, int j) { return Tableau[i][j]; }
     
     
        private:
        int Tableau[3][2];
    };
     
    int main(unsigned  int argc, char* argv[] ) {
    /// GERE LE RENVOI D'UN ELEMENT D'UN TABLEAU DEPUIS UNE CLASSE:
        MyTableau * p_Tableau = new MyTableau();
        cout << p_Tableau->getTableau(1,2) << endl;
    }
    peut-on faire autrement ?

  2. #2
    Expert confirmé
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Décembre 2003
    Messages
    3 549
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Ingénieur développement logiciels

    Informations forums :
    Inscription : Décembre 2003
    Messages : 3 549
    Par défaut
    Oui, renvoie une référence vers ton tableau.

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Par défaut
    je découvre ce qu'est la référence...
    j'ai fait quelques recherches, voilà ce que j'ai testé :
    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
    24
    25
    26
    27
    class MyTableau{
        public:
        MyTableau(int **tab[3][2]){
     
            for (int i=0;i<4;++i){
            for(int j=0;j<3;j++){
                Tableau[j][i] = i+j;
     
            }
        }
    //    tab = Tableau;
        }
     
        float getTableau(int i, int j) { return Tableau[i][j]; }
     
     
        private:
        int Tableau[3][2];
    };
     
     
    int main(unsigned  int argc, char* argv[] ) {
        int Tablo[3][2];
        cout <<Tablo[0][1] <<"\n" << endl;
        MyTableau * p_Tableau = new MyTableau(Tablo);
        cout <<Tablo[0][1] << endl;
    }
    une erreur est générée sur la ligne:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MyTableau * p_Tableau = new MyTableau(Tablo);
    visiblement c'est la manière dont je passe Tablo qui n'est pas bonne.

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Par défaut
    Alors là je comprends rien! quand j'écris :
    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
    class MyTableau{
        public:
        MyTableau(){}
     
        void Stroumph(int *tab){
            for (int i=0;i<4;++i){
            for(int j=0;j<3;j++){
                tab[j] = i+j;
                }
            }
        }
    };
     
     
    int main(unsigned  int argc, char* argv[] ) {
     
     
        int Tablo[3][2];
        int yy[5];
     
        MyTableau * p_Tableau = new MyTableau();
        p_Tableau->Stroumph(yy);
    }
    ça marche, mais quand j'écris :
    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
    class MyTableau{
        public:
        MyTableau(){}
     
        void Stroumph(int *tab){
            for (int i=0;i<4;++i){
            for(int j=0;j<3;j++){
                tab[j][i] = i+j;
                }
            }
        }
    };
     
     
    int main(unsigned  int argc, char* argv[] ) {
     
     
        int Tablo[3][2];
        int yy[5];
     
        MyTableau * p_Tableau = new MyTableau();
        p_Tableau->Stroumph(Tablo);
    je me fais insulter par le compiler :
    error: invalid types `int[int]' for array subscript
    error: no matching function for call to `MyTableau::Stroumph(int[3][2])'
    note: candidates are: void MyTableau::Stroumph(int*)

    Humm, est-ce que c'est juste d'écrire ça :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        void Stroumph(int ***tab){
            for (int i=0;i<4;++i){
            for(int j=0;j<3;j++){
                tab[j][i][0] = i+j;
                }
            }
        }
    car j'ai l'impression qu'il faut une étoile par [], du moins le compiler ne me gueule plus dessus à ce niveau.

    Si j'écris :

    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
    class MyTableau{
        public:
        MyTableau(){}
     
        void Stroumph(int **tab){
            for (int i=0;i<4;++i){
            for(int j=0;j<3;j++){
                tab[j][i] = i+j;
                }
            }
        }
    };
     
     
    int main(unsigned  int argc, char* argv[] ) {
     
     
        int Tablo[3][2];
        int yy[5];
     
        MyTableau * p_Tableau = new MyTableau();
        p_Tableau->Stroumph(Tablo);
    }
    je me fait insulter :
    error: no matching function for call to `MyTableau::Stroumph(int[3][2])'
    note: candidates are: void MyTableau::Stroumph(int**)


    bref, je suis paumé...

  5. #5
    Expert confirmé
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    Juin 2005
    Messages
    5 761
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 761
    Par défaut
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        void Stroumph(int *tab){
    ...
                tab[j][i] = i+j;
    Le type de tab est int * . L'écriture tab[j][ i] suppose que le type de tab est un pointeur sur un tableau, donc du type int(*)[dim] (avec les parenthèses et une valeur pour dim) ou du type int**
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
        int Tablo[3][2];
    ...
        p_Tableau->Stroumph(Tablo);
    Même punition, même motif : Dans cette expression, Tablo est du type int (*)[2] (pointeur sur tableaux de 2 int) pas du type int*

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Avril 2004
    Messages
    185
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Avril 2004
    Messages : 185
    Par défaut
    j'ai édité mon post précédent avant de lire ton post...
    effectivement je me suis rendu compte qu'il fallait ajouter autant d'étoiles que de dimensions
    par contre j'ai écris :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
        void Stroumph(int(*)[2]tab){
            for (int i=0;i<4;++i){
            for(int j=0;j<3;j++){
                tab[j][i] = i+j;
                }
            }
        }
    le compiler n'aime pas, j'ai pas du comprendre ce que tu me dis de faire...

    par curiosité, peut-on déclarer une dimension en int et une autre en float par exemple ?

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

Discussions similaires

  1. Réponses: 4
    Dernier message: 27/08/2013, 20h10
  2. Comment définir un tableau dans une classe?
    Par Pragmateek dans le forum Collection et Stream
    Réponses: 11
    Dernier message: 30/04/2006, 20h34
  3. tableau dans une classe
    Par blastmanu dans le forum C++
    Réponses: 6
    Dernier message: 18/04/2006, 14h18
  4. Réponses: 2
    Dernier message: 21/12/2005, 17h33
  5. [VB6]Passage d'un tableau dans une DLL écrite en delphi
    Par flash dans le forum VB 6 et antérieur
    Réponses: 6
    Dernier message: 20/09/2002, 10h15

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