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 :

Multiple definition


Sujet :

C++

  1. #1
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut Multiple definition
    Bonjour, j'ai un problème de "multiple definition" et je ne comprend pas trop pourquoi.

    J'ai une classe Util qui a 4 fonctions, et il y en a seulement 1 d'entre elles qui posent problème (la fonction Ecrire)..


    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
     
    class Util 
    {
    public:
    Util();
    ~Util();
     
    template <class T>
    static std::string ToStr(const T &); // Convertir en string 
     
    template <class T> 
    static int ToInt(const T &); // Convertir en entier
     
    template <class T>
    static bool FromStrToAny(const std::string&, T&); // Recoit un string et le converti en un type donné
     
    static void Ecrire(const std::string &, const char*); // Écrit fichier
     
    }; 
     
     
     
    template <class T>
    std::string Util::ToStr(const T & value) 
    {
    std::ostringstream oss;
    oss << value;
    return oss.str(); 
    }
     
    template <class T>
    int Util::ToInt(const T & value)
    {
    std::istringstream iss(value);
    int integer;
    if (!(iss >> integer)) throw ConversionFailure();
     
    return integer;
    }
     
    template<class T>
    bool Util::FromStrToAny(const std::string & str, T & out )
    {
    std::istringstream iss( str ); 
    // tenter output
    return iss >> out != 0;
    }
     
    void Util::Ecrire(const std::string& text, const char* filename) 
    {
    std::ofstream myfile;
    myfile.open(filename, std::ios::out | std::ios::app );
    myfile << text << "\n";
    myfile.close();
    }

    C'est certainement pas mes include qui se croisent car les autres fonctions sont OK....

    Une idée?

  2. #2
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Elle n'est pas template, donc il lui faut un petit "inline" devant si elle se trouve dans un en-tête.

    Sinon, pas mal la fonction qui prend à la fois un std::string et un const char*

  3. #3
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    C'est quoi l'ennui avec la fonction qui recoit un string et un const char*?
    C'est dans le but de pouvoir faire Ecrire(string, "log.txt"); par exemple


    EDIT: C'étais bel et bien le inline qui manquait. Merci.

  4. #4
    Rédacteur
    Avatar de Laurent Gomila
    Profil pro
    Développeur informatique
    Inscrit en
    Avril 2003
    Messages
    10 651
    Détails du profil
    Informations personnelles :
    Âge : 39
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Points : 15 920
    Points
    15 920
    Par défaut
    Un const std:string& peut très bien recevoir un temporaire non nommé du style "log.txt", puisqu'il possède le constructeur approprié. Donc aucune nécessité d'utiliser les const char* si ce n'était que pour ça

  5. #5
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Merci !

  6. #6
    Rédacteur

    Avatar de Matthieu Brucher
    Profil pro
    Développeur HPC
    Inscrit en
    Juillet 2005
    Messages
    9 810
    Détails du profil
    Informations personnelles :
    Âge : 42
    Localisation : France, Pyrénées Atlantiques (Aquitaine)

    Informations professionnelles :
    Activité : Développeur HPC
    Secteur : Industrie

    Informations forums :
    Inscription : Juillet 2005
    Messages : 9 810
    Points : 20 970
    Points
    20 970
    Par défaut
    Citation Envoyé par vdumont
    C'est quoi l'ennui avec la fonction qui recoit un string et un const char*?
    C'est dans le but de pouvoir faire Ecrire(string, "log.txt"); par exemple


    EDIT: C'étais bel et bien le inline qui manquait. Merci.
    En ganéral, on met le corps des fonctions classiques dans un .cpp ausis
    ?

  7. #7
    Membre averti Avatar de vdumont
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    510
    Détails du profil
    Informations personnelles :
    Âge : 38
    Localisation : Canada

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 510
    Points : 369
    Points
    369
    Par défaut
    Voici la fonction si ca peut aider quelqu'un d'autre!


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    inline void Util::Ecrire(const std::string& text, const std::string& filename) 
    {
      std::ofstream myfile;
      myfile.open(filename.c_str(), std::ios::out | std::ios::app ); // .c_str() à cause que c'est maintenant un std::string
      myfile << text << "\n";
      myfile.close();
    }

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

Discussions similaires

  1. problême de compilation: multiple definition
    Par Plomeg dans le forum C++
    Réponses: 2
    Dernier message: 22/11/2006, 09h17
  2. Réponses: 8
    Dernier message: 19/09/2006, 15h42
  3. multiple definition of operator<<...
    Par kleenex dans le forum C++
    Réponses: 3
    Dernier message: 05/05/2006, 02h56
  4. [LG]Interfaces et multiples définitions
    Par fatt dans le forum Langage
    Réponses: 2
    Dernier message: 15/04/2004, 22h41
  5. multiple definition
    Par scorbo dans le forum C
    Réponses: 5
    Dernier message: 10/09/2003, 13h16

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