使用命名空间问题

时间:2009-10-20 00:53:50

标签: c++ namespaces using-statement

当我使用以下

#include <map>

using namespace LCDControl;

对std名称空间的任何引用最终都与LCDControl名称空间相关联。

例如:

Generic.h:249: error: 'map' is not a member of 'LCDControl::std'

我如何解决这个问题?在我查看的任何文档中,我都没有看到任何特定内容。他们中的大多数人都说不使用:using namespace std;。

这是第249行:

for(std::map<std::string,Widget *>::iterator w = widgets_.begin();

2 个答案:

答案 0 :(得分:4)

std中的LCDControl命名空间似乎隐藏了全局std命名空间。尝试使用::std::map代替std::map

我会说在using namespace std命名空间内某处有一个LCDControl,或者可能有一个#include的STL标头在{{1}内定义std命名空间。

e.g:

LCDControl

namespace LCDControl { #include <map> } 中的所有符号定义为<map>的一部分,这反过来会隐藏全局LCDControl::std,或者至少隐藏内部命名空间中定义的任何符号,I'我不确定。

当我在VS2008下尝试这个时,我收到了一个错误:

std

答案 1 :(得分:1)

'map'类存在于std命名空间中,因此您必须在某处获得限定。你是如何限定地图对象的?你应该没有问题:

std::map<foo> myMap;

如果你不想每次都明确限定它,你也可以这样做,但也不想污染你的全局命名空间:

using std::map;