2016-05-13 6 views
0

たとえば、OpenCVを使用する場合、 using namespace cv; と指定しますが、どこでC++が定義されているのかを調べるのはどこですか?C++は "using namespace ..."を使って指定された名前空間のどこを探すべきかを知っていますか?

+0

前処理後、同じファイル内のこのステートメントの前のどこかで定義されています。 – chris

+3

名前空間は現在の翻訳単位にあります。 – songyuanyao

+0

あなたが何を求めているのかはっきりしていませんが、おそらくそれは以下のものです:http://stackoverflow.com/questions/18914106/what-is-the-use-of-using-namespace-std – NathanOliver

答えて

2

using namespaceは、その名前空間で宣言されたものすべてを表示するわけではありません。翻訳ユニットが "見ているもの"だけを公開します。 次のコードを検討し

One.h

#pragma once 
namespace ns 
{ 
    void function1(); 
} 

Two.h

#pramga once 
namespace ns 
{ 
    void function2(); 
} 

main.cppに、ここで何が起こった

#include "Two.h" // <-- included only Two.h 
using namespace ns; 

int main() 
{ 
    function2(); // <-- is a ns::function2() located in Two.h 
    function1(); // <-- error compiler does not know where to search for the function 
    return 0; 
} 

は、すべてのプリプロセッサとコンパイラの作成翻訳単位でありますディレクティブが解決されました。それは次のようになります。using namespace …を使用して指定された名前空間を探しにどこ

namespace ns 
{ 
    void function2(); 
} 
using namespace ns; 

int main() 
{ 
    function2(); // <-- OK. Declaration is visible 
    function1(); // <-- Error. No declaration 
    return 0; 
} 
+0

私は簡単な質問をすることはできますか? http://pastebin.com/fUiDyzcB >>これはどうしますか? –

+0

@BillGates '関数()'のオーバーロード呼び出しはあいまいです。 [あなたはそれを自分で確認することができます](http://coliru.stacked-crooked.com/a/aeda1b74b4749bd2) – teivaz

+0

Ok! Btw答えはちょうど私が尋ねる_intended_のためにちょうどだった...ありがとう –

1

どのようにC++が知っていますか?

これはありません。

あなたが名前の

using namespace cv; 

検索の範囲を使用する場合(クラス、関数、変数、列挙型、などの)展開されています。名前は、通常検索される他のスコープに加えて、cv名前空間で検索されます。

関連する問題