Je suis en train de préparer une petite présentation concenant les namespace's et pour illustrer mon propos j'ai préparé les fichiers suivants :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10 // Fichier : tstMod.cpp #include <iostream> using namespace std ; #include "modA.h" #include "modB.h" int main( ) { procedure() ; return 0 ; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Fichier : modA.h #ifndef MODA_H #define MODA_H #include <iostream> using namespace std ; void procedure() ; #endif
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // Fichier : modA.cpp #include "modA.h" void procedure() { cout << "ModulA" << endl ; }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7 // Fichier : modB.h #ifndef MODB_H #define MODB_H #include <iostream> using namespace std ; void procedure() ; #endifCeci a pour but de mettre en évidence un clash de nom. Les deux modules exportent deux fonctions de même signature.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6 // Fichier : modB.cpp #include "modB.h" void procedure() { cout << "ModulB" << endl ; }
Malheureusement le linker (ilink32) de Borland ne râle pas... Il prend simplement la procédure qui se trouve dans le premier module donné sur la ligne de compilation.
J'ai testé ce code avec VC et GPP et tous deux envoient une erreur.
J'ai compilé avec l'instruction suivante :
bcc32 tstmod.cpp moda.cpp modb.cpp
Aurais-je oublié une option ou est-ce un bug ?
Merci
PS.
J'ai le même problème avec Builder 5
Partager