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 classique : multiple definition


Sujet :

C++

  1. #1
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut Probleme classique : multiple definition
    Probleme classique mais j'arrive pas a m'en sortir

    Les fameux:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    .objs\cfdfilewriter.o:cfdfilewriter.cpp:(.text+0x100): 
    multiple definition of Vector::Vector(Vector const&)
    .objs\cfdfileparser.o:cfdfileparser.cpp:(.text+0x100): 
    first defined here
    .......
    Pourtant, le #include qui est la cause de tout mes maux n'apparait que dans un seul fichier, il suffit que je l'enleve pour que ca marche a nouveau.

    Et bien sur tous mes fichiers d'entetes sont munis des directives #ifndef and #define et c'est cense prevenir ce type d'erreurs.

    Une idee pour pouvoir reperer d'ou vient le probleme??? Je travaille sous code::blocks mais j'ai eu le mm pb sous VC++

  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 : 41
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2003
    Messages : 10 651
    Par défaut
    On peut voir le fichier en question ?

  3. #3
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut
    C'est pas un seul fichier mais plusieurs puisque dans celui la il ya d'autres include

    Mais cet ensemble de fichiers marchaient a la prefection parce que je les developpes en premier lieu dans un projet a part (package pour algebre lineaire). Apres je l'ai ai juste ajoute dans le projet principal et je n'ai cite le fameux include qu'une seule fois.

    Par contre, les fameux "multiple define" viennent de fichiers ou je n'ai pas inclus directement ce fichier mais via un autre include. Et voila un listing de ces fichiers d'entete

    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
     
    //fichier cfdterminal.h
    #ifndef TERMINALH
    #define TERMINALH
    #include <fstream>
    #include <iostream>
    #include <iomanip>
    #include <cstdlib>
    #include "cfdcommand.h"
    class Terminal
    {...};
    #endif
     
    //fichier cfdcommand.h
    #ifndef COMMANDH
    #define COMMANDH
    #include <cstring>
    #include <ctime>
    #include "cfdfileparser.h"
    #include "cfdfilewriter.h"
    class Command
    {...};
    #endif
     
    //fichier cfdfileparser.h
    #ifndef FILEPARSERH
    #define FILEPARSERH
    #include <fstream>
    #include <iostream>
    #include <ctype.h>
    #include <string.h>
    #include <stdlib.h>
    #include "cfdmathinterpret.h"
    #include "cfdpack/cfdpoisson.h"
    #include "cfdpack/cfdstokes.h"
    class FileParser
    {...};
    #endif
     
    //fichier cfdfilewriter.h
    #ifndef FILEWRITERH
    #define FILEWRITERH
    #include <fstream>
    #include <iostream>
    #include <ctime>
    #include "cfdpack\cfdproblem.h"
    class FileWriter
    {...};
    #endif
     
    //fichier cfdmathinterpret.h
    #ifndef MATHINTERPRETH
    #define MATHINTERPRETH
    #include <cmath>
    #include <cstring>
    class MathInterpret
    {...};
    #endif
     
    //fichier /cfdpack/cfdproblem.h
    #ifndef PROBLEMH
    #define PROBLEMH
    #include <iomanip>
    #include "cfdvariable.h"
    #include "cfdfluid.h"
    #include "cfddomain.h"
    #include "cfdmeshlist.h"
    #include "cfdconditionlist.h"
    #include "cfdforcelist.h"
    #include "cfdsolutionlist.h"
    #include  "../lapack/lacg.h"           //<---Header qui me cause tous ces soucis
    class Problem
    {...};
    #endif
    Bon, j'ai essaye de resumer le max possible (c'est un projet de 15000 lignes )

  4. #4
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut
    N'y a t'il personne pour m'aider a resoudre ce probleme
    J'ai beau lire et relire le code je trouve pas l'origine du probleme.

  5. #5
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    multiple definition of Vector::Vector(Vector const&)
    Tu as définit plusieurs fois la fonction, ou alors tu as deux fonctions qui ont le même prototype, ou encore tu as inclus le .cpp au lieu du .h ...

    Ce sont des pistes, ça peut à priori beaucoup de choses...

  6. #6
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut
    Grace a VC++, j'ai peut etre trouve l'origine du probleme mais sans trop comprendre exactement de koi il s'agit

    Voici le message :

    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
    d:\programming - new\cfdproject\vc\lapack\lavector.h(41) : fatal error C1001: INTERNAL COMPILER ERROR
            (compiler file 'msc1.cpp', line 1786) 
             Please choose the Technical Support command on the Visual C++ 
             Help menu, or open the Technical Support help file for more information
    cfdfileparser.cpp
    d:\programming - new\cfdproject\vc\lapack\lavector.h(41) : fatal error C1001: INTERNAL COMPILER ERROR
            (compiler file 'msc1.cpp', line 1786) 
             Please choose the Technical Support command on the Visual C++ 
             Help menu, or open the Technical Support help file for more information
    cfdfilewriter.cpp
    d:\programming - new\cfdproject\vc\lapack\lavector.h(41) : fatal error C1001: INTERNAL COMPILER ERROR
            (compiler file 'msc1.cpp', line 1786) 
             Please choose the Technical Support command on the Visual C++ 
             Help menu, or open the Technical Support help file for more information
    cfdproject.cpp
    d:\programming - new\cfdproject\vc\lapack\lavector.h(41) : fatal error C1001: INTERNAL COMPILER ERROR
            (compiler file 'msc1.cpp', line 1786) 
             Please choose the Technical Support command on the Visual C++ 
             Help menu, or open the Technical Support help file for more information
    cfdterminal.cpp
    d:\programming - new\cfdproject\vc\lapack\lavector.h(41) : fatal error C1001: INTERNAL COMPILER ERROR
            (compiler file 'msc1.cpp', line 1786) 
             Please choose the Technical Support command on the Visual C++ 
             Help menu, or open the Technical Support help file for more information
    Error executing cl.exe.
     
    cfdproject.exe - 5 error(s), 0 warning(s)
    Et voici le fichier en question : "lavector.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
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
    #ifndef VECTORH
    #define VECTORH
    #include <iostream>
    #include <cmath>
    #include "laarray.h"
     
    class Vector : public Array <T>
    {
        public:
            Vector() : Array<T>() {}
            Vector(int n) : Array<T>(n) {}
            Vector(const Vector& v);
     
            ~Vector()
            {
                rows = 0;
                delete [] a;
                a = 0;
            }
     
            const Vector& operator =(const Vector& v);
            const Vector& operator =(const float x);
     
            T & operator [](int i) const
            {
                return a[i];
            }
     
            float norm () const;
            Vector& operator /=(const float x);
            Vector& operator +=(const Vector& x);
            Vector& operator -=(const Vector& x);
            friend Vector operator *(const T,const Vector& );
            friend float operator *(const Vector& ,const Vector& );
            friend Vector operator -(const Vector& ,const Vector& );  <---La ligne 41
            friend Vector operator +(const Vector& ,const Vector& );
            friend ostream& operator <<(ostream& ,Vector& );
    };
    #endif
    Je dois presenter ce projet demain matin
    Alors si vous avez une idee...

  7. #7
    Membre Expert
    Avatar de Patriarch24
    Homme Profil pro
    Ingénieur développement logiciels
    Inscrit en
    Septembre 2003
    Messages
    1 047
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 41
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur développement logiciels
    Secteur : Industrie

    Informations forums :
    Inscription : Septembre 2003
    Messages : 1 047
    Par défaut
    Quel compilateur utilises-tu ? (vc++ 2003 ?)

    Si tu utilises Visual C++ 2003, il est possible que surviennent des erreurs d'accès mémoires internes au compilo (bug sur des versions anciennes). Mets ta version à jour et ça devrait aller.

  8. #8
    Membre confirmé Avatar de inddzen
    Inscrit en
    Avril 2004
    Messages
    133
    Détails du profil
    Informations personnelles :
    Âge : 45

    Informations forums :
    Inscription : Avril 2004
    Messages : 133
    Par défaut
    Citation Envoyé par Patriarch24
    Tu as définit plusieurs fois la fonction, ou alors tu as deux fonctions qui ont le même prototype, ou encore tu as inclus le .cpp au lieu du .h ...
    Ce sont des pistes, ça peut à priori beaucoup de choses...
    Ca m'a fait reflechir un peu et finalement j'ai trouve.
    C'est bete et con, j'ai oublie de mettre les inline puisque les fonctions sont declarees dans le header Je sais pas ce qui m'a pris pour l'oublier dans ce fichier en particulier
    Et ca marche maintenant

    Merci

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

Discussions similaires

  1. multiple definition of operator<<...
    Par kleenex dans le forum C++
    Réponses: 3
    Dernier message: 05/05/2006, 02h56
  2. Problème de mémoire (définitions)
    Par aline dans le forum Administration système
    Réponses: 1
    Dernier message: 13/03/2006, 23h38
  3. Réponses: 8
    Dernier message: 09/08/2005, 10h27
  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