0

当我使用以下

#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();
4

2 回答 2

4

看起来里面有一个std名称空间LCDControl隐藏了全局std名称空间。尝试使用::std::map而不是std::map.

我会说命名空间using namespace std内有一个地方LCDControl,或者可能有一个在命名空间内#include定义的 STL 标头。stdLCDControl

例如:

namespace LCDControl
{
    #include <map>
}

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

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

namespace testns
{
    int x = 1;
}

namespace hider
{
    namespace testns
    {
        int x = 2;
    }
}

int y = testns::x;
using namespace hider;
int z = testns::x;    // <= error C2872: 'testns' : ambiguous symbol
于 2009-10-20T01:19:45.053 回答
1

'map' 类位于 std 命名空间中,因此您必须在某处对其进行限定。你如何限定你的地图对象?这样做应该没有问题:

std::map<foo> myMap;

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

using std::map;
于 2009-10-20T00:55:47.353 回答