我有一噸我用符號的命名空間,但是我希望覆蓋其中的一個:解決命名空間衝突
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;
}
如何解決'模棱兩可'的錯誤,而不是訴諸'使用命名空間LottaStuff'替換千人個人使用xxx;「聲明?
編輯:另外,說我不能編輯my_file.cpp,只有my_file.h。因此,如下所示,將OneMoreClass替換爲MyCustomizations :: OneMoreClass無處不在。
這裏有一個提示 - 不要使用「using」關鍵字,而應該使用完全限定的名稱來引用類:vector <> - > :: std :: vector <>! – Poni 2010-03-25 19:54:36
C++ 11將具有用於版本控制命名空間(內聯命名空間)的很好功能,它將允許用戶完全實現此目標......然後,您可能需要等待超過您希望的功能在您的編譯器中除非你使用gcc> 4.4)http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2008/n2535.htm – 2010-03-25 23:43:37
另請參見[如何在C++中正確使用名稱空間?]( https://stackoverflow.com/questions/41590/how-do-you-properly-use-namespaces-in-c) – Vadzim 2017-12-20 11:08:57