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