19

LLVM 2.0を使用するXcodeusing namespace std;で、C ++コードに行を挿入すると、次の警告が表示されます。

セマンティックの問題
ディレクティブの使用は、暗黙的に定義された名前空間'std'を参照します

これを修正する方法はありますか?なぜそれはその警告を与えるのですか?

4

4 に答える 4

29

標準のヘッダーファイルをインクルードしましたか?それ以外の場合、コンパイラはについて知りませんnamespace std

明確にするために、より多くのコードを投稿してください。

于 2010-10-17T06:51:58.503 に答える
9

using名前空間stdを#includeの後に移動すると、この警告をなくすことができます。

于 2015-02-08T14:55:43.160 に答える
7

私はこのようにこの問題を解決しました

#include <iostream>

using namespace std;
/// This function is used to ensure that a floating point number is
/// not a NaN or infinity.
inline bool b2IsValid(float32 x)
{
    if (x != x)
    {
        // NaN.
        return false;
    }
    float32 infinity = std::numeric_limits <float32>::infinity();
    return -infinity < x && x < infinity;
    return true;

}
于 2011-03-29T06:29:42.580 に答える
-2

この質問はかなり古いようですが、将来これをチェックする人のために、議論の補足として、そしてより多くの情報を探している人々のために、LLVMドキュメントからこのリンクを追加したいと思いました。

LLVMコーディング標準:名前空間stdを使用しないでください。

タイトルは、この質問に役立つように共有した理由をかなり示していると思います。

LLVMでは、「using namespace std;」に依存するのではなく、標準の名前空間のすべての識別子に「std::」プレフィックスを明示的に付けることを好みます。

ヘッダーファイルで、「using namespace XXX」ディレクティブを追加すると、ヘッダーを#includeするソースファイルの名前空間が汚染されます。これは明らかに悪いことです。

編集:代わりに、「std名前空間を使用して」を使用する場合; 標準ライブラリを使用するすべての場合に、明示的にstd::と入力します。ソースファイルの名前空間との競合を回避します。これは、記事からの上記の引用がアドバイスしていることです。

于 2016-08-19T08:24:53.463 に答える