2011-08-01 17 views
3
// main.cpp 
const double MAX = 3.5; 

namespace ns 
{ 
    const int MAX = 3; 
} 

int main() 
{ 
} 

これは再定義エラーの原因になりますか?名前空間を使用した再定義エラー

私はthis MSDN pageを参照していますが、これは「備考」セクションではこれがエラーであると言います。

更新:コードをコピーする際に重要な声明が一つもないかもしれないと思います。

using ns::MAX; 
+2

MSDNページへのリンクを提供できますか? – razlebe

+0

備考にあります.http://msdn.microsoft.com/en-us/library/aewtdfs3%28v=vs.80%29。aspx –

+0

それに応じて私の答えを更新しました - ありがとう。 – razlebe

答えて

5

いいえ - コードの再定義エラーの原因がわかりません。

そして実際にはcompile it and see for yourselfです。


EDIT:

...

MSDNページは using directiveのコンテキストで名前の衝突について話していることを今、あなたはあなたが言及したMSDNのページへのリンクを供給してきたことをフォローアップ

ローカル変数が名前空間変数と同じ名前を持つ場合、 名前空間変数は非表示になります。グローバル変数と同じ名前の変数 を持つことは誤りです。 usingディレクティブによってスコープ化されています名前空間の変数を隠すローカル変数の

Here's an example

namespace ns 
{ 
    const int MAX = 3; 
} 

using namespace ns; 

int main() 
{ 
    int MAX = 4; // local 
    int test = MAX; // test is 4, because the local variable is used 
        // as the namespace variable is hidden 
} 

usingディレクティブを含めることは、スコープにns名前空間内で宣言された名前のすべてをもたらします。しかし、MAXの値をtestに割り当てると、ローカル変数MAXが割り当てられます。これは、ネームスペース変数MAXが非表示になっているためです。ローカル変数が優先され、名前空間変数が非表示になります。

ここでは、名前空間変数とグローバル変数の間の衝突の例を示します。 このコードの改正部分を考えてみましょう(そして、あなたはそれがhereをコンパイル見ることができます):

再び
const double MAX = 3.5; 

namespace ns 
{ 
    const int MAX = 3; 
} 

using namespace ns; 

int main() 
{ 
    int test = MAX; 
} 

usingディレクティブは、スコープにns:MAXをもたらし、そしてグローバル変数MAXはスコープでもあります。名前MAXは今あいまいであるため、

私はmain()MAXと呼ばれる変数を使用することを行く、コンパイラはエラーを報告します。それがあるとして、我々はを参照しているMAXを知る方法がない二つの非ローカルMAXどちらから選択するか:どちらにも優先順位はありません。

prog.cpp: In function ‘int main()’: 
prog.cpp:13: error: reference to ‘MAX’ is ambiguous 
prog.cpp:2: error: candidates are: const double MAX 
prog.cpp:6: error:     const int ns::MAX 
prog.cpp:13: error: reference to ‘MAX’ is ambiguous 
prog.cpp:2: error: candidates are: const double MAX 
prog.cpp:6: error:     const int ns::MAX 
+0

あなたの説明をありがとう。当初、コンパイルエラーが予想されていましたが、コンパイラは名前空間のnsを使用して不平を言うでしょうが、私はそれを取得しませんでした。私はそこに困惑した。 –

+0

ようこそ。 – razlebe

2

ファイルスコープ内にあり、もう一方は名前空間スコープ内にあるためではありません。

関連する問題