Probleme de preprocesseur

Résolu
alphaone Messages postés 134 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 14 novembre 2009 - 1 mai 2008 à 22:41
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 - 1 mai 2008 à 23:34
Bonjour, j'ai un fichier d'en tête .h inclut partout ou il y as:

#ifndef INCLUDE_ENV_H
#define INCLUDE_ENV_H

//debug level, 0: no debug, 10 critical and internal error, 50 show main activity, 90 debug mode, more than 100 is useless.
#define DEBUG 100

#if (DEBUG>0)
    #define DEBUGCONSOLE(a,b) debug_console_fonction(a,b)
    #include
    using namespace std;
    #include <QString>
    void debug_console_fonction(int number,QString text)
    {
        if(number>=DEBUG)
            cout << qPrintable(text) << "\n";
    }
#else
    #define DEBUGCONSOLE(a,b) //a,b
#endif
//...
#endif

Et il me dit que je redéfini la fonctiondebug_console_fonction():

CopyThread.o: In function `debug_console_fonction(int, QString)':
CopyThread.cpp:(.text+0x710): multiple definition of `debug_console_fonction(int, QString)'
AddFolderThread.o:AddFolderThread.cpp:(.text+0xf20): first defined here
Ewindow.o: In function `debug_console_fonction(int, QString)':
Ewindow.cpp:(.text+0x130): multiple definition of `debug_console_fonction(int, QString)'
AddFolderThread.o:AddFolderThread.cpp:(.text+0xf20): first defined here
FEwindow.o: In function `debug_console_fonction(int, QString)':
FEwindow.cpp:(.text+0xaa0): multiple definition of `debug_console_fonction(int, QString)'
AddFolderThread.o:AddFolderThread.cpp:(.text+0xf20): first defined here
main.o: In function `debug_console_fonction(int, QString)':
main.cpp:(.text+0x120): multiple definition of `debug_console_fonction(int, QString)'
AddFolderThread.o:AddFolderThread.cpp:(.text+0xf20): first defined here
Mwindow.o: In function `debug_console_fonction(int, QString)':
Mwindow.cpp:(.text+0x16c0): multiple definition of `debug_console_fonction(int, QString)'
AddFolderThread.o:AddFolderThread.cpp:(.text+0xf20): first defined here

5 réponses

SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 mai 2008 à 23:34
Si tu veux utiliser printf dans 2 fichiers .c/.cpp, il faudra bien inclure stdio.h dans chacun d'eux. Même principe ici.
#ifndef ...
#define...
...
#endif
empêche seulement que le .h soit réinclus plusieurs fois dans un même fichier source (.c/.cpp).

C++ (@++)<!--
3
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 mai 2008 à 22:49
Normal. Partout ou tu inclus ton header, il redéfinit ta fonction.
2 solutions:
soit tu déclare cette fonction dans un .c puis tu ne met que son prototype dans le header
soit tu déclare cette fonction en inline:

inline void debug_console_fonction(int number,QString text)
    {
        if(number>=DEBUG)
            cout << qPrintable(text) << "\n";
    }

C++ (@++)<!--
0
alphaone Messages postés 134 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 14 novembre 2009
1 mai 2008 à 22:54
Pourtant j'ai mit
#ifndef INCLUDE_ENV_H
#define INCLUDE_ENV_H
#endif
qui enpéche le redefinition multiple.

Ca fait quoi inline?
0
SAKingdom Messages postés 3212 Date d'inscription lundi 7 novembre 2005 Statut Membre Dernière intervention 16 février 2009 15
1 mai 2008 à 23:07
Non apparemment, cette solution (inline) ne fonctionne pas avec gcc.

Prend l'autre solution dans ce cas.

C++ (@++)<!--
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
alphaone Messages postés 134 Date d'inscription vendredi 2 mai 2003 Statut Membre Dernière intervention 14 novembre 2009
1 mai 2008 à 23:13
Re, je veux comprendre:


Pourtant j'ai mit
#ifndef INCLUDE_ENV_H
#define INCLUDE_ENV_H
#endif
qui enpéche le redefinition multiple.
http://www.first-world.info/
0