Bonjour,

En compilant mon projet j'ai eu une erreur pour le moins surprenante :
UnixWindows.h:12: erreur : multiple definition of `LD::symboleDossier(std::string&)'
c:\qtsdk\mingw\bin\..\lib\gcc\mingw32\4.4.0\include\c++\bits\ios_base.h:129: erreur : first defined here
:-1: erreur : collect2: ld returned 1 exit status
Sortie de compilation :
debug/arborescance.o: UnixWindows.h:12: multiple definition of `LD::symboleDossier(std::string&)'
debug/versionfile.o:c:/qtsdk/mingw/bin/../lib/gcc/mingw32/4.4.0/include/c++/bits/ios_base.h:129: first defined here
collect2: ld returned 1 exit status
mingw32-make.exe[1]: *** [debug\Gestionnaire_maj.exe] Error 1
mingw32-make.exe: *** [debug] Error 2
16:31:01: Le processus "C:\QtSDK\mingw\bin\mingw32-make.exe" s'est terminé avec le code 2.
UnixWindows.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
#ifndef UNIXWINDOWS_H
#define UNIXWINDOWS_H
 
#include <string>
 
namespace LD
{
    /** @brief Ajoute au chemin passé en paramètre le symbole adéquat : '\' pour les Unix, '/' pour windows
        @param std::string & chemin : chemin auquel ajouté le symbole
        @return std::string & : chemin une fois le symbole ajouté */
    std::string & symboleDossier(std::string & chemin)
    {
        return chemin += '/'; // '\' pour Unix
    }
}
 
#endif // UNIXWINDOWS_H
ios_base :
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
 inline _Ios_Openmode
  operator&(_Ios_Openmode __a, _Ios_Openmode __b)
  { return _Ios_Openmode(static_cast<int>(__a) & static_cast<int>(__b)); }
 
  inline _Ios_Openmode
  operator|(_Ios_Openmode __a, _Ios_Openmode __b)
  { return _Ios_Openmode(static_cast<int>(__a) | static_cast<int>(__b)); } //c'est à cette ligne qu'il y a une erreur.
 
  inline _Ios_Openmode
  operator^(_Ios_Openmode __a, _Ios_Openmode __b)
  { return _Ios_Openmode(static_cast<int>(__a) ^ static_cast<int>(__b)); }
 
  inline _Ios_Openmode&
  operator|=(_Ios_Openmode& __a, _Ios_Openmode __b)
  { return __a = __a | __b; }
Si je comprend bien il me dit que la fonction symboleDossier est défini la première fois dans ios_base.

Par contre si je met la fonction symboleDossier en inline, je n'ai plus de problèmes.
Je suis un peu perplexe...

Auriez-vous une idée?