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名前空間があるようです。の代わりに使ってみてください。LCDControlstd::std::mapstd::map

using namespace std名前空間内のどこかに があるか、名前空間内で定義されている STL ヘッダーがあるLCDControl可能性があります。#includestdLCDControl

例えば:

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

「マップ」クラスは std 名前空間に存在するため、どこかで修飾する必要があります。マップ オブジェクトをどのように修飾していますか? これを行うのに問題はないはずです:

std::map<foo> myMap;

毎回明示的に修飾したくないが、グローバル名前空間を汚染したくない場合は、次のようにすることもできます。

using std::map;
于 2009-10-20T00:55:47.353 に答える