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 objet


Sujet :

C++

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut tableau objet
    bonour
    je veux remplire un tableau dynamique d obet de la classe Nation mais j ai l erreur

    error C2679: binary '=' : no operator defined which takes a right-hand operand of type 'class Nation *' (or there is no acceptable conversion)
    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
     
    	void lireRemplir (char *nomFichier, Nation pays [], int &n ){
     
    		      n = 0;  // initialiser le tableau des nations
     
    			  ifstream  aLire(nomFichier, ios::in); // ouvrir le fichier pour la lecture
     
    			  string ligne;
     
    			  while( getline(aLire, ligne, '\n')){
     
    				  char   nouvContinent     = ligne.at(0);
    				  string nouvNom           = ligne.substr(1,  LONG_NOM);
    				  string nouvCapitale      = ligne.substr(36, LONG_CAP);
    				  int    nouvSuperficie    = atoi(ligne.substr(56,10).c_str());
    				  int    nouvPopulation    = atoi(ligne.substr(66).c_str());
     
    				  pays[n++] = new Nation(nouvNom, nouvCapitale, nouvContinent, nouvSuperficie, nouvPopulation);
     
     
     
     
    			  }

  2. #2
    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
    void lireRemplir (char *nomFichier, Nation pays [], int &n )
    pays est un tableau de Nation
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pays[n++] = new Nation(nouvNom, nouvCapitale, ...
    new renvoie un pointeur sur Nation : Nation * or pays[] est du type Nation.

    Sans doute, il faut modifier le paramètre pour :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    void lireRemplir (char *nomFichier, Nation *pays [], int &n )
    et vérifier le code appelant cette fonction

  3. #3
    sas
    sas est déconnecté
    Membre émérite

    Profil pro
    Inscrit en
    Novembre 2003
    Messages
    54
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Par défaut
    ton "tableau" pays est défini comme un conteneur d'objets Nation, mais avec :

    Citation Envoyé par harris_macken
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pays[n++] = new Nation(nouvNom, nouvCapitale, nouvContinent, nouvSuperficie, nouvPopulation);
    pays doit "devenir" un conteneur de pointeurs d'objets Nation, d'où l'erreur à la compil...(or there is no acceptable conversion)

    fo écrire:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pays[n++] = Nation(nouvNom, nouvCapitale, nouvContinent, nouvSuperficie, nouvPopulation);

  4. #4
    Membre éprouvé
    Profil pro
    Étudiant
    Inscrit en
    Juin 2004
    Messages
    68
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Juin 2004
    Messages : 68
    Par défaut
    tu declare donc tu declare un tableau de Nation

    mais tu fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    pays[n++] = new Nation(nouvNom, nouvCapitale, nouvContinent, nouvSuperficie, nouvPopulation);
    donc tu remplis les cases de ton tableau avec des Nation*

    donc 2 solutions s'offre a toi:
    Solution 1: Déclarer un tableau de Nation*
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    void lireRemplir (char *nomFichier, Nation* pays [], int &n )
    et laisser le reste de la fonction tel quel
    Solution 2: changer la façon dont tu remplis ton tableau
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    pays[n++] = Nation(nouvNom, nouvCapitale, nouvContinent, nouvSuperficie, nouvPopulation);

  5. #5
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut
    merci de votre spontaneite

  6. #6
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut
    zut desoler encore une autre question . je confond un peu avec le java

    lors de l appel je fait ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    void main(){
     
    		Nation  * pays = new Nation[MAX_PAYS];
     
    		int nbPays;
     
    		lireRemplir("Pays_jo.E05", pays, nbPays);
     
    	}
    mais j ai l erreur
    error C2512: 'Nation' : no appropriate default constructor available
    Error executing cl.exe.

  7. #7
    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
    Pour construire les objets Nation du tableau, il faut un constructeur par defaut (sans aucun argument)
    Comment est déclarée la classe Nation ?

  8. #8
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut
    class Nation {
    private :

    string nom;
    string capitale;
    char continent;
    int superficie;
    int population;

    public :

    Nation(string nom, string capitale, char continent, int superficie, int population){

    this -> nom = nom;
    this -> capitale = capitale;
    this -> continent = continent;
    this -> superficie = superficie;
    this -> population = population;
    }


    string getNom() { return nom;}
    string getCapitale() {return capitale;}
    char getContinent() {return continent;}
    int getSuperficie() {return superficie; }
    int getPopulation() {return population; }


    bool operator < (const Nation & autre) {

    return population < autre.population;

    }

    }




    // fonction amie permettant de surcharger l'opérateur <<
    friend ostream & operator << (ostream & ,const Nation & );

    friend void afficher(const Nation &, string mess = "");

  9. #9
    Membre éclairé
    Inscrit en
    Février 2005
    Messages
    367
    Détails du profil
    Informations forums :
    Inscription : Février 2005
    Messages : 367
    Par défaut
    oups pardon j ai oublier la balise mais sa marche c etais le constructeur sans parametre

    merci

  10. #10
    Expert confirmé
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 296
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Août 2003
    Messages : 5 296
    Par défaut
    Sinon ....
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    std::vector<Nation> nations;
    nations.push_back(Nation("N", "V", "C", 42, 43));
    PS: Références constantes, accesseurs constants (qui ne modifient pas this), liste d'initialisation, ..., c'est bien aussi.
    PPS: pour les oublis de balises, il y a le bouton "editer"
    Blog|FAQ C++|FAQ fclc++|FAQ Comeau|FAQ C++lite|FAQ BS|Bons livres sur le C++
    Les MP ne sont pas une hotline. Je ne réponds à aucune question technique par le biais de ce média. Et de toutes façons, ma BAL sur dvpz est pleine...

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

Discussions similaires

  1. Aide Tableau objet
    Par EricL dans le forum Débuter
    Réponses: 12
    Dernier message: 12/12/2008, 16h49
  2. Réponses: 3
    Dernier message: 24/08/2008, 03h30
  3. Débutant Salut pb de tableau Objet.
    Par JPC++ dans le forum Collection et Stream
    Réponses: 9
    Dernier message: 17/02/2007, 23h27
  4. [tableau objet] impossible à remplir
    Par vasilov dans le forum C++
    Réponses: 6
    Dernier message: 23/03/2006, 14h26
  5. [POO] Tri tableau objets
    Par Metallic-84s dans le forum Langage
    Réponses: 4
    Dernier message: 21/02/2006, 19h53

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