Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
981 connectés 

  FORUM HardWare.fr
  Programmation
  C++

  Création d'une classe

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

Création d'une classe

n°2293068
Lt Ripley
Ils ont tout niqué
Posté le 01-12-2016 à 13:44:38  profilanswer
 

Bonjour à tous
 
Le compilateur me sort cette erreur "cannot resolve adress of overloaded function" à la ligne 29 du main, et ce même quand je mets un truc tout simple (pour tester) à la fonction Display, du genre "cout << "blah" << std::endl;"
 
Voici mes fichiers (je programme avec code::blocks et MinGW g++ 5.1  en c++14 si je ne dis pas de bêtises)
 
Je bloque depuis quelques heures
 
Thank you
 
main :

Code :
  1. #include <iostream>
  2. #include <string>
  3. #include <array>
  4. #include "MaDate.h"
  5. // programme qui fait correspondre un jour de la semaine à une date. Basé sur le 01/01/1600
  6. // ========================================================================================
  7. int main() {
  8.     std::cout << "\n ===================================================" << std::endl;
  9.     std::cout << " Calcul du jour de la semaine en fonction d'une date" << std::endl;
  10.     std::cout << "\t\t Lundi a Dimanche" << std::endl;
  11.     std::cout << "\tFonctionne a partir du 1 - 1 - 1600" << std::endl;
  12.     std::cout << "\t    Par Harvey - Novembre 2016" << std::endl;
  13.     std::cout << " ===================================================" << std::endl;
  14.     MaDate D;
  15.     bool playAgain = true;
  16.     std::string pAgain = "";
  17.     while (playAgain)
  18.     {
  19.         if(D.DateEntry() )
  20.         {
  21.             D.Display;
  22.         }
  23.         std::cout << "\n Nouveau calcul ? Taper O/N ";
  24.         std::cin >> pAgain;
  25.         if( (pAgain=="N" ) || (pAgain=="n" ) )
  26.         {
  27.             playAgain=false;
  28.         }
  29.         //daysInFullYears=0; daysInFullMonths=0;  // réinitialisations sinon ça cumule
  30.     }
  31. }


 
MaDate.h

Code :
  1. #ifndef MADATE_H_INCLUDED
  2. #define MADATE_H_INCLUDED
  3. //#include <string>
  4. class MaDate
  5. {
  6.     int day, months, year;
  7.     std::string finalDay;
  8.     int dIFY(); //total de jours dans les années pleines
  9.     int dIFM(); //total de jours dans les mois pleins
  10.     void amountAndFinalDay(); // calcul final = nb de jours total et attribution du jour de la semaine
  11. public:
  12.     MaDate();
  13.     bool DateEntry();
  14.     void Display();
  15. };
  16. #endif // MADATE_H_INCLUDED


 
MaDate.cpp

Code :
  1. #include "MaDate.h"
  2. MaDate::MaDate()
  3. {
  4.     day = " ";
  5.     month = " ";
  6.     year = " ";
  7. }
  8. void MaDate::DateEntry()  // saisie de la date
  9. {
  10.     std::cout << "\n Entrez le jour (ex : 17) : ";
  11.     std::cin >> day;
  12.     std::cout << " Entrez le mois (ex : 04) : ";
  13.     std::cin >> month;
  14.     std::cout << " Entrez l'annee (ex : 1925) : ";
  15.     std::cin >> year;
  16. }
  17. int MaDate::dIFY()    // calcul de daysInFullYears : le nombre de jours total dans les années pleines
  18. {
  19.     int daysInFullYears{0};
  20.     int currentYear=1600;
  21.     bool bissextile{0};
  22.     for (currentYear; currentYear<year; currentYear++)
  23.     {
  24.         bissextile =0;
  25.         if( ((currentYear%4==0)&&(currentYear%100!=0))||(currentYear%400==0)&&(currentYear%100==0) )
  26.         {
  27.             bissextile =1;
  28.         }
  29.         daysInFullYears +=(365+bissextile);
  30.     }
  31.     return daysInFullYears;
  32. }
  33. int MaDate::dIFM()    // calcul de daysInFullMonths : le nombre de jours total dans les mois pleins
  34. {
  35.     int daysInFullMonths{0};
  36.     std::array<int, 12>monthsTable;
  37.     monthsTable[0]=31; // janvier
  38.     monthsTable[1]=28;
  39.     monthsTable[2]=31;
  40.     monthsTable[3]=30; // avril
  41.     monthsTable[4]=31;
  42.     monthsTable[5]=30;
  43.     monthsTable[6]=31;
  44.     monthsTable[7]=31; // aout
  45.     monthsTable[8]=30;
  46.     monthsTable[9]=31;
  47.     monthsTable[10]=30;
  48.     monthsTable[11]=31; // decembre
  49.     int fullMonths=(month-1);
  50.     if( ((year%4==0)&&(year%100!=0))||(year%400==0)&&(year%100==0) )
  51.     {
  52.         monthsTable[1]=29;
  53.     }
  54.     for (int i{0}; i<fullMonths; i++)
  55.     {
  56.         daysInFullMonths+=monthsTable[i];
  57.     }
  58.     return daysInFullMonths;
  59. }
  60. std::string MaDate::amountAndFinalDay()
  61. {
  62.     std::array<std::string, 7> daysOfWeek;
  63.     daysOfWeek[0]="Vendredi";
  64.     daysOfWeek[1]="Samedi";
  65.     daysOfWeek[2]="Dimanche";
  66.     daysOfWeek[3]="Lundi";
  67.     daysOfWeek[4]="Mardi";
  68.     daysOfWeek[5]="Mercredi";
  69.     daysOfWeek[6]="Jeudi";
  70.     int daysFinalAmount = (daysInFullYears+daysInFullMonths+day);  // total du nb jours
  71.     std::string finalDay = daysOfWeek[daysFinalAmount%7];
  72.     return finalDay;
  73. }
  74. void MaDate::Display()
  75. {
  76.     std::cout << "\n Le " << day << "-" << month << "-" << year << " correspond a un "<< amountAndFinalDay() << std::endl << std::endl;
  77. }


Message édité par Lt Ripley le 01-12-2016 à 13:45:07
mood
Publicité
Posté le 01-12-2016 à 13:44:38  profilanswer
 

n°2293076
Farian
Posté le 01-12-2016 à 14:50:55  profilanswer
 

Bonjour !
 
La fonction amountAndFinalDay est de retour "void" dans le .h et std::string dans le .cpp :)
 
Idem pour dateEntry (void et bool)
De plus, dans le main, il manque les () à l'appel de la fonction Display.
Je n'ai pas vu d'autre chose ... (Mais, pour être un peu pointilleux, il faudrait déclarer "const" les méthodes qui ne modifient pas l'objet :les "get" et assimilés (p. ex. amountAndFinallyDat, Display, ...).
 
(Il y a d'autres raffinements qui pourraient être faits, mais chaque chose en son temps :) )
Bonne continuation !
 
 
 
 


---------------
On n'est jamais très fort pour ce calcul !
n°2293080
Lt Ripley
Ils ont tout niqué
Posté le 01-12-2016 à 15:08:10  profilanswer
 

Merci beaucoup, je vais regarder tout ça  :)

n°2293092
Lt Ripley
Ils ont tout niqué
Posté le 01-12-2016 à 17:01:10  profilanswer
 

Super ça fonctionne  
 
Il a aussi fallu que je refasse le projet dans code::blocks car je n'avais initialement pas coché debug ni release lors de la création des fichiers MaDate.h et .cpp et le compilo me disait "undefined reference to 'MaDate...' " alors j'ai googlé
 
Et puis j'ai ajouté qq réinitialisations sinon ça cumulait quand je playAgain
 
Là j'ai plus qu'un warning, un statement has no effect (non used value) mais c'est sur un for, et où je ne déclare rien...  [:gordon shumway]
 
Merci  :hello:  

n°2293109
rat de com​bat
attention rongeur méchant!
Posté le 01-12-2016 à 19:37:50  profilanswer
 

Lt Ripley a écrit :

Là j'ai plus qu'un warning, un statement has no effect (non used value) mais c'est sur un for, et où je ne déclare rien...  [:gordon shumway]

Si tu n'as rien à déclarer ;)  alors tu ne met rien tout simplement:

Code :
  1. for (; currentYear<year; currentYear++)

Tu peux même écrire

Code :
  1. for(;;) { /* code */ }

, tu auras alors une boucle sans fin.

n°2293122
Lt Ripley
Ils ont tout niqué
Posté le 01-12-2016 à 21:16:55  profilanswer
 

Génial
 
Merci rat de combat

n°2293169
benriach
Posté le 02-12-2016 à 16:58:55  profilanswer
 

çà avance bien   :)  
quand tu seras satisfait, cherche les raffinements évoqués par Farian.

n°2293172
Lt Ripley
Ils ont tout niqué
Posté le 02-12-2016 à 18:06:36  profilanswer
 

Salut benriach
 
Pour l'instant je ne peux passer aucune fonction en const, j'ai essayé avec la fonction display, mais le compilateur me sort une erreur.  Je pense que c'est parceque dans display j'appelle la fonction amountAndFinalDay qui modifie les attributs.
 
Sinon j'ai fait sauter un attribut dont je n'avais pas besoin (un string) en mettant directement "return moncalcul" au lieu de "return monattribut"
 
Là ce que je vois que je peux faire c'est utiliser un type moins gourmand au lieu de int pour certains attributs.
 
Edit : Voici mon nouveau code :
 
main.cpp

Code :
  1. #include "MaDate.h"
  2. #include <iostream>
  3. #include <string>
  4. #include <array>
  5. // programme qui fait correspondre un jour de la semaine à une date. Basé sur le 01/01/1600
  6. // ========================================================================================
  7. int main() {
  8.     std::cout << "\n ===================================================" << std::endl;
  9.     std::cout << " Calcul du jour de la semaine en fonction d'une date" << std::endl;
  10.     std::cout << "\t\t Lundi a Dimanche" << std::endl;
  11.     std::cout << "\tFonctionne a partir du 1 - 1 - 1600" << std::endl;
  12.     std::cout << "\t    Par Harvey - Novembre 2016" << std::endl;
  13.     std::cout << " ===================================================" << std::endl;
  14.     MaDate D;
  15.     bool playAgain = true;
  16.     std::string pAgain = "";
  17.     while (playAgain)
  18.     {
  19.         if(D.dateEntry() )
  20.         {
  21.             D.display();
  22.         }
  23.         std::cout << "\n Nouveau calcul ? Taper O/N ";
  24.         std::cin >> pAgain;
  25.         if( (pAgain=="N" ) || (pAgain=="n" ) )
  26.         {
  27.             playAgain=false;
  28.         }
  29.     }
  30. }


 
MaDate.h

Code :
  1. #ifndef MADATE_H_INCLUDED
  2. #define MADATE_H_INCLUDED
  3. #include <string>
  4. class MaDate
  5. {
  6.     int day, month, year;  // entry
  7.     int daysInFullMonths, daysInFullYears, currentYear, fullMonths, daysFinalAmount;  // résultats
  8.     bool bissextile;
  9.     int dIFY(); //total de jours dans les années pleines (daysInFullYears)
  10.     int dIFM(); //total de jours dans les mois pleins
  11.     std::string amountAndFinalDay();// calcul final = nb de jours total et attribution du jour de la semaine
  12. public:
  13.     MaDate();
  14.     bool dateEntry();
  15.     void display();
  16. };
  17. #endif // MADATE_H_INCLUDED


 
MaDate.cpp

Code :
  1. #include "MaDate.h"
  2. #include <string>
  3. #include <array>
  4. #include <iostream>
  5. MaDate::MaDate()  // initialisations
  6. {
  7.     day = 0;
  8.     month = 0;
  9.     year = 0;
  10.     daysInFullYears = 0;
  11.     daysInFullMonths = 0;
  12.     currentYear = 1600;
  13.     bissextile = 0;
  14.     fullMonths = 0;
  15.     daysFinalAmount = 0;
  16. }
  17. bool MaDate::dateEntry()  // saisie de la date
  18. {
  19.     std::cout << "\n Entrez le jour (ex : 17) : ";
  20.     std::cin >> day;
  21.     std::cout << " Entrez le mois (ex : 04) : ";
  22.     std::cin >> month;
  23.     std::cout << " Entrez l'annee (ex : 1925) : ";
  24.     std::cin >> year;
  25.     return true;
  26. }
  27. int MaDate::dIFY()    // calcul de daysInFullYears : le nombre de jours total dans les années pleines
  28. {
  29.     daysInFullYears=0; // réinitialisations sinon ça cumule
  30.     currentYear=1600;
  31.     for (; currentYear<year; currentYear++)  // rien a déclarer donc un ; tout de suite
  32.     {
  33.         bissextile =0;
  34.         if( (((currentYear%4)==0)&&((currentYear%100)!=0)) || ((currentYear%400)==0)&&((currentYear%100)==0) )
  35.         {
  36.             bissextile =1;
  37.         }
  38.         daysInFullYears +=(365+bissextile);
  39.     }
  40.     return daysInFullYears;
  41. }
  42. int MaDate::dIFM()    // calcul de daysInFullMonths : le nombre de jours total dans les mois pleins
  43. {
  44.     daysInFullMonths=0;
  45.     std::array<int, 12>monthsTable;
  46.     monthsTable[0]=31; // janvier
  47.     monthsTable[1]=28;
  48.     monthsTable[2]=31;
  49.     monthsTable[3]=30; // avril
  50.     monthsTable[4]=31;
  51.     monthsTable[5]=30;
  52.     monthsTable[6]=31;
  53.     monthsTable[7]=31; // aout
  54.     monthsTable[8]=30;
  55.     monthsTable[9]=31;
  56.     monthsTable[10]=30;
  57.     monthsTable[11]=31; // decembre
  58.     fullMonths=(month-1);
  59.     if( ((year%4==0)&&(year%100!=0))||(year%400==0)&&(year%100==0) )
  60.     {
  61.         monthsTable[1]=29;
  62.     }
  63.     for (int i{0}; i<fullMonths; i++)
  64.     {
  65.         daysInFullMonths+=monthsTable[i];
  66.     }
  67.     return daysInFullMonths;
  68. }
  69. std::string MaDate::amountAndFinalDay()
  70. {
  71.     std::array<std::string, 7> daysOfWeek;
  72.     daysOfWeek[0]="Vendredi";
  73.     daysOfWeek[1]="Samedi";
  74.     daysOfWeek[2]="Dimanche";
  75.     daysOfWeek[3]="Lundi";
  76.     daysOfWeek[4]="Mardi";
  77.     daysOfWeek[5]="Mercredi";
  78.     daysOfWeek[6]="Jeudi";
  79.     daysFinalAmount = (dIFY()+dIFM()+day);  // total du nb jours
  80.     return daysOfWeek[daysFinalAmount%7];
  81. }
  82. void MaDate::display()
  83. {
  84.     std::cout << "\n Le " << day << "-" << month << "-" << year << " correspond a un "<< amountAndFinalDay() << std::endl << std::endl;
  85. }


Message édité par Lt Ripley le 06-12-2016 à 11:05:30

Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  C++

  Création d'une classe

 

Sujets relatifs
projet web. création de site + de son application.creation d'un script pour deplacer les dossier par defaut
creation de classepb lors creation d'une classe generic en java pour type primitif
Création dynamique de classe en PHP5 ?[eclipse 3.1] Création de Jar -> trouve pas la classe main
[C#] Création de packageensemble de fonction sans utiliser une classe?[VB] Création d'un objet et de sa classe
classe anonyme et création de thread à la volée[JAVA] Création d'une classe Border avec Swing
Plus de sujets relatifs à : Création d'une classe


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR