Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2008/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 使用命名空间重新定义错误_C++_Namespaces - Fatal编程技术网

C++ 使用命名空间重新定义错误

C++ 使用命名空间重新定义错误,c++,namespaces,C++,Namespaces,这会导致重新定义错误吗 我指的是,在评论部分说这是一个错误 更新:我想在复制代码时可能会遗漏一条重要的语句 // main.cpp const double MAX = 3.5; namespace ns { const int MAX = 3; } int main() { } 不-我不知道该代码如何导致重新定义错误 事实上,你可以 编辑:现在您已经提供了指向您提到的MSDN页面的链接,请继续 该MSDN页面在以下情况下讨论名称冲突: 如果局部变量与命名空间变量具有相同的名称,则

这会导致重新定义错误吗

我指的是,在评论部分说这是一个错误

更新:我想在复制代码时可能会遗漏一条重要的语句

// main.cpp
const double MAX = 3.5;

namespace ns
{
   const int MAX = 3;
}

int main()
{
}

不-我不知道该代码如何导致重新定义错误

事实上,你可以


编辑:现在您已经提供了指向您提到的MSDN页面的链接,请继续

该MSDN页面在以下情况下讨论名称冲突:

如果局部变量与命名空间变量具有相同的名称,则 命名空间变量是隐藏的。使用名称空间是错误的 与全局变量同名的变量

一个局部变量隐藏一个命名空间变量,该命名空间变量是由
使用
指令引入作用域的:

using ns::MAX;
包含
using
指令将
ns
命名空间中声明的所有名称纳入范围。但是,当我将
MAX
的值赋值给
test
时,赋值中使用的是局部变量
MAX
,因为命名空间变量
MAX
是隐藏的。局部变量优先并隐藏名称空间变量

下面是一个名称空间变量和全局变量之间冲突的示例。 考虑这个修改后的代码(你可以看到它编译):

同样,
using
指令将
ns:MAX
引入范围,全局变量
MAX
也在范围内

当我在
main()
中使用名为
MAX
的变量时,编译器会报告一个错误,因为名称
MAX
现在不明确:它无法知道我们指的是哪个
MAX
,因为有两个非本地
MAX
可供选择:两者都没有任何优先级

const double MAX = 3.5;

namespace ns
{
   const int MAX = 3;
}

using namespace ns;

int main()
{
   int test = MAX;
}

他们不会这样做,因为一个在文件范围内,另一个在命名空间范围内。

只是出于兴趣,您可以提供指向MSDN页面的链接吗?它在备注中。相应地更新了我的答案-谢谢。谢谢您的解释。最初,我在使用它之前预期会出现编译错误,编译器会抱怨使用名称空间ns;,但我没有明白。我在那里感到困惑。
const double MAX = 3.5;

namespace ns
{
   const int MAX = 3;
}

using namespace ns;

int main()
{
   int test = 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