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 :

[C++] débutant apprentissage avec le livre la bible c++


Sujet :

C++

  1. #1
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Points : 149
    Points
    149
    Par défaut [C++] débutant apprentissage avec le livre la bible c++
    De nouveau une question, je viens d'acheter le livre de Cay horstmann "la bible du c++ " afin d'avoir une base de départ sérieuse en c++.
    J'utilise comme IDE DEV-C++
    aU CHAPITRE TROIS on introduit la notion d'objets via deux classes créées par l'auteur :
    la classe Time et win qui gèrent respectivement le temps et les graphismes
    Pour pouvoir les utiliser il est indiquer d'inclurer deux fichiers.h
    Pour ce faire je les ai copiés dans le répertoire include de l'IDE
    Exemple d'une fonction Time, celle qui créée un objet temps

    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
    #ifndef CCC_TIME_H
    #define CCC_TIME_H
     
    /**
       A class that describes a time of day
       (between 00:00:00 and 23:59:59)
    */
    class Time
    {
    public:
       /**
          Constructs a time of day.
          @param hour the hours
          @param min the minutes
          @param sec the seconds
       */
       Time(int hour, int min, int sec);
       /**
          Constructs a Time object that is set to 
          the time at which the constructor executes.
       */
    Je saisie le programme suivant :
    #include <iostream>
     
    using namespace std;
     
    #include "ccc_time.h"
     
    int main()
    {
       Time reveil(7, 0, 0);
       reveil.add_seconds(1000); /* mille secondes plus tard */
       cout << reveil.get_hours()
          << ":" << reveil.get_minutes()
          << ":" << reveil.get_seconds() << "\n";
     
       return 0;
    }
    lorsque je lance la compilation dev-c++ m'indique [linker Error] undefined reference to Time :: Time (int,int,int) id return 1 exit status
    Je perds mon latin en effet j'ai bien le fichier include correspond "ccc-time" dans le répertoire "include" et j'ai bien fait attention d'indiquer dans l'entête
    " include "ccc-time.h"

    Qui peut m'apporter une aide ?

  2. #2
    Rédacteur

    Avatar de khayyam90
    Homme Profil pro
    Architecte de système d’information
    Inscrit en
    Janvier 2004
    Messages
    10 370
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 39
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Architecte de système d’information

    Informations forums :
    Inscription : Janvier 2004
    Messages : 10 370
    Points : 40 164
    Points
    40 164
    Par défaut
    bien le bonjour,

    as-tu bien un fichier .cpp contenant le code des méthodes de ta classe Time ?

    ta classe Time n'est pas correctement écrite, il manque le }; sensé fermer la classe.
    il faudra aussi penser à rajouter quelques lignes à propos de la méthode get_hours() dans le fichier .h et dans le .cpp qui va avec

  3. #3
    Expert éminent sénior
    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
    Points : 13 926
    Points
    13 926
    Par défaut
    Il te manque le constructeur de la classe Time. Il est déclaré dans la classe mais tu as oublié de mettre son code. Du coup , le linker ne peut pas la trouver
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    Time::Time(int hour, int min, int sec);
    {
    .....
     
    }

  4. #4
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Points : 149
    Points
    149
    Par défaut
    je n'ai présenté dans mon message qu'un extrait du fichier include d'où l'absence de de la fermeture de la classe
    J'ai bien un fichier time.CPP dans lequel j'ai retrouvé les différentes fonctions de ma classe.
    Que dois je faire ?
    ouvrir un projet avec mon fichier exercice + le fichier cpp?
    mettre le fichier cpp dans un répertoire ?
    J'ai du mal à comprendre
    je pensais que les fonctions des fichiers include étaient définies au niveau de librairies?

  5. #5
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Voila le prob:
    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
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
     
    #include <ctime>
    #include <cassert>
    #include <iostream>
     
    using namespace std;
     
    #include "ccc_time.h"
     
    /**
       Computes the correct remainder for negative dividend
       @param a - an integer
       @param n - an integer > 0
       @return the mathematically correct remainder r such that
       a - r is divisible by n and 0 <= r and r < n
    */
    int remainder(int a, int n)
    {  
       if (a >= 0)
          return a % n;
       else
          return n - 1 - (-a - 1) % n;
    }
     
    Time::Time(int hour, int min, int sec)
    {  
       assert(0 <= hour);
       assert(hour < 24);
       assert(0 <= min);
       assert(min < 60);
       assert(0 <= sec);
       assert(sec < 60);
     
       time_in_secs = 60L * 60 * hour + 60 * min + sec;
    }
     
    Time::Time()
    {  
       time_t now = time(0);
       struct tm& t = *localtime(&now);
       time_in_secs = 60L * 60 * t.tm_hour + 60 * t.tm_min + t.tm_sec;
    }
     
    int Time::get_hours() const
    {  
       return time_in_secs / (60 * 60);
    }
     
    int Time::get_minutes() const
    {  
       return (time_in_secs / 60) % 60;
    }
     
    int Time::get_seconds() const
    {  
       return time_in_secs % 60;
    }
     
    int Time::seconds_from(Time t) const
    {  
       return time_in_secs - t.time_in_secs;
    }
     
    void Time::add_seconds(int s)
    {  
       const int SECONDS_PER_DAY = 60 * 60 * 24;
       time_in_secs = remainder(time_in_secs + s, SECONDS_PER_DAY);
    }
     
     
    int main()
    {
       Time reveil(7, 0, 0);
       reveil.add_seconds(1000); /* mille secondes plus tard */
       std::cout << reveil.get_hours()
          << ":" << reveil.get_minutes()
          << ":" << reveil.get_seconds() << "\n";
       system("pause");
       return 0;
    }
    Voila
    Désolé si le message est un peu long...
    PS: continue avec ce livre il est super

  6. #6
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Points : 149
    Points
    149
    Par défaut
    Si j'ai bien compris ton message je dois copier avant le "main " le code .ccp de Time.
    Aucune indication n'est fourni dans le livre
    A priori j'ai fait le bon choix quant au livre !

  7. #7
    Expert éminent sénior
    Avatar de Luc Hermitte
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2003
    Messages
    5 282
    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 282
    Points : 11 036
    Points
    11 036
    Par défaut
    Citation Envoyé par TERRIBLE
    A priori j'ai fait le bon choix quant au livre !
    Connais pas le bouquin. Mais un autre bouquin de cet auteur (a moins qu'ils aient fumé la traduction du titre du livre) est "recommandé avec réserves" sur ACCU.

  8. #8
    Rédacteur/Modérateur
    Avatar de JolyLoic
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2004
    Messages
    5 463
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 50
    Localisation : France, Yvelines (Île de France)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Août 2004
    Messages : 5 463
    Points : 16 213
    Points
    16 213
    Par défaut
    Citation Envoyé par Luc Hermitte
    Mais un autre bouquin de cet auteur (a moins qu'ils aient fumé la traduction du titre du livre)
    A priori, en regardant les pochettes, ce livre est la traduction de "Big C++", un bouquin non noté sur l'ACCU.

    Et ce livre est co-écrit avec T. Budd, qui a de bonnes critiques aussi sur l'ACCU (3 recommended sur 3).

    Donc bien qu'instinctivement, j'ai un peu peur en voyant un livre nommé "la bible ....", celui ci a un potentiel raisonnable. J'y jetterai un oeil la prochaine fois que je passerai dans mon magasin de livres d'info.

  9. #9
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Les instructions doivent se trouver sur le site officiel de BIG C++...
    C'est la premièrefois que j'utilise ces classes et ce que je viens de faire me paraît être la seule possibilité...
    Est-il possible de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    #include "code.cpp"
    ??? En gros d'inclure un fichier .cpp? C'est la seule alternative que je vois à ma manière de procéder

  10. #10
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    la bonne manière de procéder, c'est la compilation séparée.

    Tu définis l'en-tête de la classe dans ccc_time.h
    Tu définis les fonctions membres dans ccc_time.cpp qui inclut ccc_time.h
    Tu définis main dans main.cpp qui inclut ccc_time.h

    Normalement, ccc_time.cpp et main.cpp sont compilés séparément, et "liés" ensemble lors de l'édition de liens (le dernière étape de la compilation d'un projet)

  11. #11
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Ok merci!

  12. #12
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Points : 149
    Points
    149
    Par défaut
    je viens de reprendre mon projet sous dev-c++ avec la classe Time
    j'ai créé deux fichiers l'un main avec le cod pour indiquer l'heure puis un second dans lequel sont définie les fonctions;'ai récupérr ce fichier sur le site du livre
    mais lorsque je lance la compilation,j'ai toujours le même message d'erreur Pourquoi?
    j'ai bien mes fonctions Time définies dans le fichier cpp de l'auteur
    et j'ai bien inclu dans mon fichier main la "ccc-time.h""
    pr contre bien que j'ai mes deux fichiers dans la partie centrale de dev-c++ jen e vois que le fichier main dans l'explorateur de projet
    En effet ayant deux fichiers j'ai créé un projet console
    Je pense que mon second problème viens d'un manque de maîtrise de IDE je recherche donc un bon tuturiel sur DEV C++
    En conclusion :
    - pourquoi j'ai toujours une erreur de compilatin
    - où puis je trouver un bon tutoriel sur dev-c++

  13. #13
    Membre éclairé Avatar de reggae
    Profil pro
    Inscrit en
    Août 2005
    Messages
    773
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Août 2005
    Messages : 773
    Points : 795
    Points
    795
    Par défaut
    Je n'ai pas bien compris... tu as 3 sources: main.cpp ccc_time.h et ccc_time.cpp?

  14. #14
    Expert éminent sénior
    Avatar de Médinoc
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Septembre 2005
    Messages
    27 382
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Septembre 2005
    Messages : 27 382
    Points : 41 590
    Points
    41 590
    Par défaut
    Tu peux poster tes sources?

  15. #15
    sas
    sas est déconnecté
    Membre éprouvé

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

    Informations forums :
    Inscription : Novembre 2003
    Messages : 54
    Points : 1 257
    Points
    1 257
    Par défaut
    Citation Envoyé par TERRIBLE
    pr contre bien que j'ai mes deux fichiers dans la partie centrale de dev-c++ jen e vois que le fichier main dans l'explorateur de projet
    question bête, as-tu bien inclu à ton projet les fichiers ccc-time.h et ccc-time.cpp ??

  16. #16
    Membre habitué
    Profil pro
    Inscrit en
    Octobre 2005
    Messages
    352
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2005
    Messages : 352
    Points : 149
    Points
    149
    Par défaut
    j'ai bien inclus dans mon projet le fichier ccc_time.cpp qui défini les fontions
    voici le contenu des deux fichiers
    main
    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
    #include <cstdlib>
    #include <iostream>
    using namespace std;
    #include "ccc_time.h"
     
    int main(int argc, char *argv[])
    {
     
       Time reveil(7, 0, 0);
       reveil.add_seconds(1000); /* mille secondes plus tard */
       cout << reveil.get_hours()
          << ":" << reveil.get_minutes()
          << ":" << reveil.get_seconds() << "\n";
        system("PAUSE");
        return EXIT_SUCCESS;
    }
    fichier ccc_time.ccp

    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
    65
    66
    #include <ctime>
    #include <cassert>
     
    using namespace std;
     
    #include "ccc_time.h"
     
    /**
       Computes the correct remainder for negative dividend
       @param a - an integer
       @param n - an integer > 0
       @return the mathematically correct remainder r such that
       a - r is divisible by n and 0 <= r and r < n
    */
    int remainder(int a, int n)
    {  
       if (a >= 0)
          return a % n;
       else
          return n - 1 - (-a - 1) % n;
    }
     
    Time::Time(int hour, int min, int sec)
    {  
       assert(0 <= hour);
       assert(hour < 24);
       assert(0 <= min);
       assert(min < 60);
       assert(0 <= sec);
       assert(sec < 60);
     
       time_in_secs = 60L * 60 * hour + 60 * min + sec;
    }
     
    Time::Time()
    {  
       time_t now = time(0);
       struct tm& t = *localtime(&now);
       time_in_secs = 60L * 60 * t.tm_hour + 60 * t.tm_min + t.tm_sec;
    }
     
    int Time::get_hours() const
    {  
       return time_in_secs / (60 * 60);
    }
     
    int Time::get_minutes() const
    {  
       return (time_in_secs / 60) % 60;
    }
     
    int Time::get_seconds() const
    {  
       return time_in_secs % 60;
    }
     
    int Time::seconds_from(Time t) const
    {  
       return time_in_secs - t.time_in_secs;
    }
     
    void Time::add_seconds(int s)
    {  
       const int SECONDS_PER_DAY = 60 * 60 * 24;
       time_in_secs = remainder(time_in_secs + s, SECONDS_PER_DAY);
    }
    voilà j'espère que vous allez pouvoir m'aider !!

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

Discussions similaires

  1. Débutant avec un livre usagé
    Par wreaghea dans le forum Langage
    Réponses: 3
    Dernier message: 31/08/2006, 11h05
  2. [CR 7] [débutante] pb avec if then else
    Par xs_nady dans le forum Formules
    Réponses: 8
    Dernier message: 28/05/2004, 16h36
  3. [débutant] Prob avec Tree ctrl
    Par Devether dans le forum MFC
    Réponses: 3
    Dernier message: 24/03/2004, 12h36
  4. [débutant] Problèmes avec CRegKey
    Par Pedro dans le forum MFC
    Réponses: 4
    Dernier message: 10/11/2003, 16h28
  5. [Débutant] Lenteur avec TComPort
    Par PhDt76 dans le forum C++Builder
    Réponses: 22
    Dernier message: 27/09/2003, 22h43

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