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

  FORUM HardWare.fr
  Programmation
  C++

  [ C++ ] Un projet, 3 fichiers, #include et ou c'est que je me gourre ?

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

[ C++ ] Un projet, 3 fichiers, #include et ou c'est que je me gourre ?

n°677374
Ciler
Posté le 18-03-2004 à 17:37:44  profilanswer
 

Attention, l'erreur qui va suivre est probablement stupide, alors si vous avez eu une mauvaise journee et manquez de patience, passez votre chemin [:dawa]
 
J'essaye de compiler un chti prog compose des 3 fichiers suivants :
 
main.cpp

Code :
  1. #include <iostream>
  2. #include "locales.h"
  3. int main(){
  4.   std::cout << ".:The Core File Library:." << std::endl;
  5.   Entry MyEntry;
  6.   std::cout << MyEntry.GetValue() << std::endl;
  7.   Entry MyEntry2(12,"test" );
  8.   std::cout << MyEntry2.GetValue() << std::endl;
  9.   return 0;
  10. }


 
locales.h

Code :
  1. #include <string>
  2. class Entry
  3. {
  4. private:
  5.     int id;
  6.     std::string name;
  7. public:
  8.     Entry();
  9.     Entry(int id_, std::string name_);
  10.     std::string GetValue();
  11. };


 
locales.cpp

Code :
  1. #include "locales.h"
  2. Entry::Entry(){
  3.   id=0;
  4.   name="no name";
  5. }
  6. Entry::Entry(int id_, std::string name_){
  7.   id=id_;
  8.   name=name_;
  9. }
  10. string Entry::GetValue{}{
  11.   return id << "-" << name;
  12. }


 
le message d'erreur du compilateur (g++) est  


/tmp/ccp9ApzV.o(.text+0x3c): In function `main':
: undefined reference to `Entry::Entry[in-charge]()'
/tmp/ccp9ApzV.o(.text+0x4e): In function `main':
: undefined reference to `Entry::GetValue()'
collect2: ld returned 1 exit status
zsh: exit 1     g++ -o test.exe test.cpp


 
Je ne comprends pas pourquoi la reference a Entry::Entry n'est pas definie. Et ce [in charge], il vient d'ou  :sweat:


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
mood
Publicité
Posté le 18-03-2004 à 17:37:44  profilanswer
 

n°677388
Taz
bisounours-codeur
Posté le 18-03-2004 à 18:01:44  profilanswer
 

c'est quoi ce .exe :o
 
g++ -W -Wall -std=c++98 -pedantic test.cpp locales.cpp -o test
./test

n°677392
Taz
bisounours-codeur
Posté le 18-03-2004 à 18:06:28  profilanswer
 

faisons un peu mieux au niveau du code
 

Code :
  1. // locales.h
  2. #ifndef CILER_LOCALES_H
  3. #define CILER_LOCALES_H
  4. #include <string>
  5.  
  6.   class Entry
  7.   {
  8.      private:
  9.         int id;
  10.         std::string name; 
  11.      public:
  12.         Entry(int id_ = 0, const std::string &name_ = "no name" );
  13.         std::string GetValue()const;
  14.   };
  15. #endif // CILER_LOCALES_H


 
 

Code :
  1. #include "locales.h"
  2. #include <sstream>
  3.  
  4.   Entry::Entry(){
  5.       id=0;
  6.       name="no name";
  7.   }
  8.  
  9.   Entry::Entry(int id_, const std::string &name_)
  10.     : id(_id), name(name_) {
  11.   }
  12.  
  13.   string Entry::GetValue{} const {
  14.     std::ostringstream ost;
  15.     ost << id << '-' << name;
  16.     return ost.str()
  17.   }

n°677401
Ciler
Posté le 18-03-2004 à 18:15:16  profilanswer
 

Taz a écrit :

c'est quoi ce .exe :o


C'est pour du multiplateforme  :whistle:  
 

Taz a écrit :


g++ -W -Wall -std=c++98 -pedantic test.cpp locales.cpp -o test
./test


 [:le velocypede de zed] Si je ne fais pas compiler locales.cpp en effet il pourrait y avoir un probleme  :D  
Quand au -W -Wall -std=c++98 -pedantic comme ca n'est certainement pas la pour faire joli, on va voir ce que man en pense.
 
Par contre pour tes modifications... Aurais-tu l'obligence de m'expliquer leurs objectif de facon plus detaille ? J'ai deja vu passer le coup des #ifndef #define qque part (en cherchant sur un autre sujet) mais ca ne m'a pas laisse un souvenir imperissable.
 
Enfin :

Code :
  1. Entry::Entry(int id_, const std::string &name_)
  2.    : id(_id), name(name_) {
  3. }


J'ai jamais vu ca nulle part comme presentation [:wam]. Ca sort d'ou ?
 
 
Ah euh ... et merci au fait :jap:


Message édité par Ciler le 18-03-2004 à 18:15:39

---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
n°677409
Taz
bisounours-codeur
Posté le 18-03-2004 à 18:28:55  profilanswer
 

quand l'accolade de ton constructeur s'ouvre, __tous__ les membres sont déjà construits.
 
donc on prends par exemple ton membre name.
 
ta version à toi elle équivaut à
 
std::string name;
name = "machin"
 
tu vois tout de suite que
 
 
std::string name("machin" ) ça serait mieux :D
 
donc la notation que tu vois, c'est pour controler la construction des membres. et ça te permet aussi d'initialiser des membres qui n'ont pas de constructeurs par défaut ou qui sont constants

n°677410
Ciler
Posté le 18-03-2004 à 18:31:06  profilanswer
 

Vu :jap:


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
n°677414
Taz
bisounours-codeur
Posté le 18-03-2004 à 18:35:05  profilanswer
 

et comme tu vois, ça t'évite de faire des opérations inutiles

n°677422
Ciler
Posté le 18-03-2004 à 18:39:27  profilanswer
 

Je vois je vois.


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
n°685667
Ciler
Posté le 27-03-2004 à 18:10:03  profilanswer
 

Taz a écrit :

faisons un peu mieux au niveau du code
 

Code :
  1. // locales.h
  2. #ifndef CILER_LOCALES_H
  3. #define CILER_LOCALES_H
  4. #include <string>
  5.  
  6.   class Entry
  7.   {
  8.      private:
  9.         int id;
  10.         std::string name; 
  11.      public:
  12.         Entry(int id_ = 0, const std::string &name_ = "no name" );
  13.         std::string GetValue()const;
  14.   };
  15. #endif // CILER_LOCALES_H


 


 
AU sujet de l'utilisation de #ifndef #define #endif, je pense avoir compris l'explication ( http://www.fredosaurus.com/notes-c [...] ifdef.html [:petrus75] ) par contre un detail me chagrine, le _H a la fin du nom, c'est necessaire ou juste une convention ?


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
n°685670
Taz
bisounours-codeur
Posté le 27-03-2004 à 19:05:54  profilanswer
 

tu peux mettre ce que tu veux : la seule chose c'est qu'il faut que le symbole soit suffisemment unique pour éviter des collisions (je crois que tous les programmeurs ont un jour écris un Stack.h alors va pas mettre STACK_H)
 
comme il peut pas y avoir de . on mets des _
un bon compromis est un mélange nomde fichier / date / nom de projet / etc
 
d'ou mon CILER_LOCALES_H

mood
Publicité
Posté le 27-03-2004 à 19:05:54  profilanswer
 

n°685682
Ciler
Posté le 27-03-2004 à 19:32:56  profilanswer
 

Taz a écrit :

tu peux mettre ce que tu veux : la seule chose c'est qu'il faut que le symbole soit suffisemment unique pour éviter des collisions (je crois que tous les programmeurs ont un jour écris un Stack.h alors va pas mettre STACK_H)
 
comme il peut pas y avoir de . on mets des _
un bon compromis est un mélange nomde fichier / date / nom de projet / etc
 
d'ou mon CILER_LOCALES_H


Compris  :)  
 
Une autre question (j'ai pas mon Stroustup sous la main :o)
La dedans :

Code :
  1. class Entry
  2. {
  3.     private:
  4.        int id;
  5.        std::string name; 
  6.     public:
  7.        Entry(int id_ = 0, const std::string &name_ = "no name" );
  8.        std::string GetValue()const;
  9. };


Si je veux remplacer la string par une map, il y a moyen de faire l'affectation directement ? (un equivalent de = "truc" pour les maps)


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
n°685685
Taz
bisounours-codeur
Posté le 27-03-2004 à 19:45:45  profilanswer
 

quoi ?

n°685687
Ciler
Posté le 27-03-2004 à 19:51:52  profilanswer
 


POur initialiser un string, on peut faire

Code :
  1. string foo="bar";


 
Peut-on faire quelque chose de comparable avec un map ?
genre

Code :
  1. map<int,string> foo=[1,"foo";2,"bar"];


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8
n°685690
Taz
bisounours-codeur
Posté le 27-03-2004 à 19:59:50  profilanswer
 

non, tu ne peux pas.
 
 
string foo="bar"; -> string foo("bar" );

n°685703
Ciler
Posté le 27-03-2004 à 20:16:57  profilanswer
 

Taz a écrit :

non, tu ne peux pas.


Dommage :'(
 

Taz a écrit :


string foo="bar"; -> string foo("bar" );


Sir Yes Sir ! (dur dur d'apprendre  :sweat: )


---------------
And I looked, and behold a pale horse: and his name that sat on him was Death, and Hell followed with him. Revelations 6:8

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

  [ C++ ] Un projet, 3 fichiers, #include et ou c'est que je me gourre ?

 

Sujets relatifs
URGENT MAJ cle primaire SQL et de tous les fichiers qui la contienneinclude variable
[Latex]Creation et insertion de fichiers .psPb include() et liens
Projet iut info[PHP] Include de page distance necessitant de se logguer (htaccess)
Projet sitePHP/SQL > fichiers SQL ou access ?
Shell - comparaison de fichiers de deux répertoires[Projet PHP5 WEB] Recherche d'une "team"
Plus de sujets relatifs à : [ C++ ] Un projet, 3 fichiers, #include et ou c'est que je me gourre ?


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