大佬教程收集整理的这篇文章主要介绍了c – 使用命名空间重新定义错误,大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。
// main.cpp const double MAX = 3.5; namespace ns { const int MAX = 3; } int main() { }
这会导致重新定义错误吗?
我指的是this MSDN page,它在备注部分说这是一个错误.
using ns::MAX;
事实上,你可以@L_403_1@.
该MSDN页面正在讨论using
directive上下文中的名称冲突:
Here’s an example本地变量隐藏了一个由using指令引入范围的命名空间变量:
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带入范围,@L_356_20@mAX也在范围内.
当我在main()中使用名为MAX的变量时,编译器报告错误,因为@L_549_14@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
以上是大佬教程为你收集整理的c – 使用命名空间重新定义错误全部内容,希望文章能够帮你解决c – 使用命名空间重新定义错误所遇到的程序开发问题。
如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。
本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。