J'ai un espace de noms avec une tonne de symboles que j'utilise, mais je veux remplacer l'un d'eux:Résoudre les conflits namespace
external_library.h
namespace LottaStuff
{
class LotsOfClasses {};
class OneMoreClass {};
};
my_file.h
using namespace LottaStuff;
namespace MyCustomizations
{
class OneMoreClass {};
};
using MyCustomizations::OneMoreClass;
my_file.cpp
int main()
{
OneMoreClass foo; // error: reference to 'OneMoreClass' is ambiguous
return 0;
}
Comment résoudre l'erreur "ambiguë" sans avoir à remplacer "using namespace LottaStuff" par un millier "using xxx;" déclarations? Editer: Aussi, disons que je ne peux pas éditer my_file.cpp, seulement mon_fichier.h. Donc, remplacer OneMoreClass par MyCustomizations :: OneMoreClass partout comme suggéré ci-dessous ne serait pas possible.
Voici un conseil - N'utilisez PAS le mot-clé "using" mais faites plutôt référence aux classes avec leurs noms complets: vector <> -> :: std :: vector <>! – Poni
C++ 11 aura une bonne fonctionnalité pour la gestion des espaces de noms (en-ligne) qui permettra à l'utilisateur d'obtenir exactement ceci ... alors encore une fois, vous devrez attendre plus que vous voulez que la fonctionnalité soit dans votre compilateur sauf si vous utilisez gcc> 4.4) http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm –
Voir aussi [Comment utiliser correctement les espaces de noms en C++?] (https://stackoverflow.com/questions/41590/how-do-you-properly-use-namespaces-in-c) – Vadzim