いいえ - コードの再定義エラーの原因がわかりません。
そして実際には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
MSDNページへのリンクを提供できますか? – razlebe
備考にあります.http://msdn.microsoft.com/en-us/library/aewtdfs3%28v=vs.80%29。aspx –
それに応じて私の答えを更新しました - ありがとう。 – razlebe