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 :

probleme de compilation


Sujet :

C++

  1. #1
    Membre à l'essai
    Homme Profil pro
    Étudiant
    Inscrit en
    Septembre 2016
    Messages
    24
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2016
    Messages : 24
    Points : 16
    Points
    16
    Par défaut probleme de compilation
    Bonjour,
    Ma classe date ne fonctionne pas pourtant je crois que je l'ai bien implémentée.

    voilà le code de date.h

    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
    #if !defined(__DATE__H__)
    #define __DATE__H__
    #include <iostream>
     
     
    class Date{
      public:
       Date();  
       Date(int j, int h, int m);                
     
       bool operator <(const Date& date) const;
        bool operator <=(const Date& date) const;
     
      private:
     
      int jours; 
      int heures; 
      int minutes;                      
     
      friend std::ostream& operator << (std::ostream&, const Date& date);
      friend std::istream& operator >> (std::istream&, Date& date);
    };
     
    #endif
    et voilà date.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
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    #include "date.h"
    #include <cstdio>
    #include <iomanip>
    #include <assert.h>
    #include<iostream>
     
    Date::Date()
    {
        jours= 0;
        heures= 0;
        minutes= 0;
    }
     
    Date::Date(int j,int h,int m){
     
     
        jours = j;
        heures = h;
        minutes = m;
    }
     
    bool Date::operator <(const Date& d) const{
     
         return (this->jours < d.jours);
         return (this->heures < d.heures);
         return (this->minutes < d.minutes);
    }
     
    bool Date::operator <=(const Date& d) const{
     
         return (this->jours <= d.jours);
         return (this->heures <= d.heures);
         return (this->minutes <= d.minutes);
     
    }
     
    std::ostream& operator << (std::ostream& os, const Date& d){
        int jours, heures, minutes;
        //completed
        jours = d.jours;                 
        heures = d.heures;              
        minutes = d.minutes;          
        char chaine[40];
        sprintf(chaine, "%dj_%02dh%02dm", jours, heures, minutes);
        os << chaine;
        return os;
    }
     
    std::istream& operator >> (std::istream& is, Date& d){
        char chaine[40];
        int jours, heures, minutes;
        char j, m, h, underscore;
        is >> jours >> j >> underscore >> heures >> h >> minutes >> m;
        assert(j=='j');
        assert(underscore=='_');
        assert(h=='h' && m=='m');
     
        // completed  :utiliser les variable jours,heures,minutes pour modifier l'objet d.
        d.jours = jours;              
        d.heures = heures;            
        d.minutes = minutes;          
     
        return is;
    }
    voilà le résultat de la compilation:

    testdate.cpp: (.text+0xe5): référence indéfinie vers « Date:: Date() »
    testdate.cpp: (.text+0xfe): référence indéfinie vers « operator>>(std::istream&, Date&) »
    testdate.cpp: (.text+0x11f): référence indéfinie vers « operator<<(std::ostream&, Date const&) »
    testdate.cpp: (.text+0x215): référence indéfinie vers « Date::operator<(Date const&) const »
    testdate.cpp: (.text+0x2b0): référence indéfinie vers « operator<<(std::ostream&, Date const&) »
    testdate.cpp: (.text+0x2c8): référence indéfinie vers « operator<<(std::ostream&, Date const&) »
    testdate.cpp: (.text+0x337): référence indéfinie vers « Date::operator<(Date const&) const »
    testdate.cpp: (.text+0x3d2): référence indéfinie vers « operator<<(std::ostream&, Date const&) »
    testdate.cpp: (.text+0x3ea): référence indéfinie vers « operator<<(std::ostream&, Date const&) »
    testdate.cpp: (.text+0x447): référence indéfinie vers « Date::operator<(Date const&) const »
    testdate.cpp: (.text+0x4df): référence indéfinie vers « operator<<(std::ostream&, Date const&) »
    testdate.cpp: (.text+0x4f7): référence indéfinie vers « operator<<(std::ostream&, Date const&) »
    collect2: error: ld returned 1 exit status


    Est ce que quelqu'un peut m'aider sur ça SVP.Merci davance.

  2. #2
    Expert éminent sénior
    Avatar de koala01
    Homme Profil pro
    aucun
    Inscrit en
    Octobre 2004
    Messages
    11 612
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : aucun

    Informations forums :
    Inscription : Octobre 2004
    Messages : 11 612
    Points : 30 612
    Points
    30 612
    Par défaut
    Salut,

    Quand tu as une erreur de type "référence indéfinie sur <un nom de fonction>", c'est une erreur qui survient à l'étape de l'édition de liens; c'est à dire quand toutes tes unités de compilation ont été traitées (que le compilateur a généré le fichier objet pour chacune d'elle) et que l'éditeur de liens essaye de regrouper tous les fichiers objets et toutes les bibliothèques nécessaires en un exécutable qui sera compris par l'ordinateur.

    Il y a, globalement, trois raisons qui peuvent faire qu'une telle erreur survienne:
    1. soit, tu n'as pas fourni l'implémentation de la fonction indiquée
    2. soit tu n'as pas compilé l'unité de compilation dans laquelle se trouvent les fonctions indiquées
    3. soit l'éditeur de liens n'essaye pas d'ajouter le fichier objet généré sur base de l'unité de compilation qui contient les fonctions indiquées.

    Etant donné que l'éditeur de liens rale pour toutes les fonctions déclarées dans ton fichier d'en-tête (et que tu donnes le code d'un fichier .cpp), je pencherais volontiers pour la dernière solution. Et cela nous amène naturellement à parler de l'EDI (Environnement de Développement Intégré) que tu utilises, et à la notion de "projet":

    En effet, il se peut que tu aies créé tes fichiers au travers de ton EDI préféré, mais que ces fichiers n'aient pas été ajoutés dans le projet pour qu'ils soient pris en compte lors de tout le processus de compilation.

    C'est une erreur qui survient souvent avec code::blocks, parce qu'il nécessite d'indiquer explicitement les projets cibles (debug ou release) dans lesquels ajouter les fichiers que l'on crée : lors de la création du fichier, la dernière étape te demande s'il faut l'ajouter aux différentes cibles, et, le(s) fichier(s) créé(s) ne sera (seront) ajouté(s) que pour les cibles pour lesquelles la checkboxe est cochée.

    Par chance, il est possible d'ajouter un (des) fichier(s) existant(s) à un projet ouvert en passant par le menu "project"->"add files ..." (ou "add files recursively ...", si tu veux carrément rajouter le contenu de tout un répertoire). Après, il "suffira" de relancer la compilation pour que "tout rentre dans l'ordre"
    A méditer: La solution la plus simple est toujours la moins compliquée
    Ce qui se conçoit bien s'énonce clairement, et les mots pour le dire vous viennent aisément. Nicolas Boileau
    Compiler Gcc sous windows avec MinGW
    Coder efficacement en C++ : dans les bacs le 17 février 2014
    mon tout nouveau blog

Discussions similaires

  1. [API][Cup] problem niveau compilation
    Par KoLziG dans le forum Général Java
    Réponses: 1
    Dernier message: 02/01/2005, 19h30
  2. [JSP & TAGLIB] Probleme de compilation
    Par GesMo dans le forum Servlets/JSP
    Réponses: 7
    Dernier message: 17/05/2004, 15h03
  3. Probleme de Compilation de la STL
    Par stoluup dans le forum MFC
    Réponses: 3
    Dernier message: 05/05/2004, 17h25
  4. [TP]Probleme de compilation sous TP7
    Par yffick dans le forum Turbo Pascal
    Réponses: 7
    Dernier message: 18/12/2003, 20h32
  5. Problemes de compilation avec g++ sous linux
    Par Selimmel dans le forum Autres éditeurs
    Réponses: 3
    Dernier message: 19/09/2003, 13h43

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