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 :

Struct ou classe ?


Sujet :

C++

  1. #1
    Membre actif
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 238
    Points
    238
    Par défaut Struct ou classe ?
    Bonjour,

    J'ai un petit problème. Je dois pinguer une liste d'équipement.
    J'ai donc, créé une structure comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    struct materiel {
          string adresse_ip ;
          string message ;
          };
    Je vais récupérer les données dans un fichier pour tout mettre dans un tableau.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    int affectation( ifstream & Fichier, materiel & matos, int LongeurTableau ) {
     
    //code      
     
    }
    et donc, dans mon main, je l'appelle avec :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    materiel equipement ;
    affectation ( Fichier , equipement , Retour_LongeurFichier ) ;

    Par contre, comme je dois travailler sur 10 ou 15 equipement. Je pensais pouvoir appeller le 1er élément d'un tableau comme ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    matos[0].adresse_ip = "127.0.0.1" ;
    Mais, bien entendu, celà ne fonctionne pas. Ca serait trop simple !

    Pouvez-vous m'aider ? struct, est-ce un bon choix ?

  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
    Pouvez-vous m'aider ?
    Ben d'après ton code, matos n'est pas un tableau. Donc soit tu ne nous montres pas le bon code, soit tu tentes d'indexer un truc qui n'est pas un tableau.

    struct, est-ce un bon choix ?
    http://c.developpez.com/faq/cpp/?pag...e_class_struct

  3. #3
    Membre actif
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 238
    Points
    238
    Par défaut
    C'est le bon code, mais je tente d'indexer un truc qui n'est pas un tableau.

    En fait, il me faut un 'objet?' qui soit de type materiel.
    Mais, dans le principe, il faut que je puisse en créer 15 de même type, puisque j'aurai 15 adresses IP à pinger.

    Je pensais passer par un tableau, mais il semble que je ne sache pas le créer.

    Et faire ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
        materiel equipement[Retour_LongeurFichier] ;
        affectation ( Fichier , equipement , Retour_LongeurFichier ) ;
    ne fonctionne pas non plus.

  4. #4
    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
    Si la valeur de Retour_LongeurFichier n'est pas connue à la compilation il faut utiliser un tableau dynamique (voir std::vector, dans la FAQ par exemple).

  5. #5
    Membre actif
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 238
    Points
    238
    Par défaut
    C'est bon, j'y suis arrivé avec quelques modifs :

    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
    28
    29
     
     
    class materiel {
          public :
          string adresse_ip ;
          string message ;
          };
     
     
    int affectation( ifstream & Fichier, materiel * matos , int LongeurTableau ) {
     
        matos[0].adresse_ip = "essai";
        cout << "Matos : " << matos[0].adresse_ip << endl;   
     
    }
     
     
    int main(int argc, char *argv[])
    {
     
       ...
     
        materiel equipement[Retour_LongeurFichier] ;
     
        affectation ( Fichier , equipement, Retour_LongeurFichier ) ;
     
        cout << "Equipement : " << equipement[0].adresse_ip << endl;
     
    }
    Merci.

  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
    Pourquoi les gens n'écoutent jamais les bons conseils
    Citation Envoyé par Laurent Gomila
    voir std::vector, dans la FAQ par exemple

  7. #7
    Membre expérimenté
    Avatar de coyotte507
    Profil pro
    Inscrit en
    Octobre 2006
    Messages
    1 327
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : France

    Informations forums :
    Inscription : Octobre 2006
    Messages : 1 327
    Points : 1 452
    Points
    1 452
    Par défaut
    parceque std vector n'est pas toujours plus utile et se faitguer à apprendre la STL sans livre c'est pas mon truc.

  8. #8
    Membre actif
    Inscrit en
    Mai 2002
    Messages
    251
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 251
    Points : 238
    Points
    238
    Par défaut
    Je suis allé voir, d'ailleurs, la FAQ est toujours ouverte. Mais, ma faculté d'adaptation est pas si grande Je vais bien lire, bien comprendre, puis appliquer

    Par contre, j'ai encore un petit problème.

    Voici une focntion qui récupère le nombre de ligne dans un fichier (tiré de la FAQ ;-)

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    int LongeurFichier ( ifstream & Fichier) {
     
         int Count = 0;
         string s;
     
         while (getline(Fichier, s))
         { Count ++; }
     
     
         return Count;
         }

    Voici un extrait du main() :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    ifstream Fichier ( "config.cfg" ) ;
     
    int Retour_LongeurFichier ;
     
    Retour_LongeurFichier = LongeurFichier(Fichier) ;
    cout << "Nombre de ligne dans le fichier Config.cfg : " << Retour_LongeurFichier << endl ;
     
    Retour_LongeurFichier = LongeurFichier(Fichier) ;
    cout << "Nombre de ligne dans le fichier Config.cfg : " << Retour_LongeurFichier << endl ;

    Le 1er cout... renvoi la valuer int : 28 (normal, j'ai 28 lignes).
    Par contre, le 2eme renvoi 0 comme si, il ne savait plus trouver le fichier.

    Savez-vous pourquoi ?

  9. #9
    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
    Une fois la fin de fichier atteinte, le flux se met dans un état invalide (en plus d'être à la fin du fichier). Il faut rembobiner la position de lecture (Fichier.seekg(0, std::ios::beg) puis remettre le flux dans un état valide (Fichier.clear()).

Discussions similaires

  1. Passer de struct (C) à class (JAVA)
    Par rtg57 dans le forum Langage
    Réponses: 8
    Dernier message: 01/05/2010, 22h50
  2. [Débutant] Struct v Class !
    Par F.Saad dans le forum C#
    Réponses: 3
    Dernier message: 27/07/2009, 12h21
  3. diff entre struct et class
    Par camboui dans le forum C++
    Réponses: 7
    Dernier message: 02/03/2009, 18h53
  4. Struct et classes
    Par oodini dans le forum C++
    Réponses: 3
    Dernier message: 14/08/2008, 18h03
  5. struct et class
    Par zais_ethael dans le forum C++
    Réponses: 17
    Dernier message: 11/03/2008, 19h17

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