当我使用以下
时#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();
答案 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;