gpt4 book ai didi

不使用范围运算符就无法访问 C++ 命名空间变量

转载 作者:太空狗 更新时间:2023-10-29 23:24:52 26 4
gpt4 key购买 nike

我无法理解 namespace 。 A.cpp:

#include <iostream>
namespace A { int pause = 8; }
int main() {
std::cout << A::pause << std::endl;
return 0;
}

然后打印 8。但是,现在我添加了 using namespace A 并将 A::pause 更改为 pause。 A.cpp:

#include <iostream>
namespace A { int pause = 8; }
using namespace A;
int main() {
std::cout << pause << std::endl;
return 0;
}

现在,我得到了编译错误:

A.cpp: In function ‘int main()’:
A.cpp:5: error: reference to ‘pause’ is ambiguous
/usr/include/unistd.h:507: error: candidates are: int pause()
A.cpp:2: error: int A::pause
A.cpp:5: error: reference to ‘pause’ is ambiguous
/usr/include/unistd.h:507: error: candidates are: int pause()
A.cpp:2: error: int A::pause

有人能解释一下哪里出了问题吗?我认为 using namespace A 允许我省略 A::,类似于 using namespace std 允许您省略 std: :。我尝试移动 main() 中的行,但我收到相同的错误消息。请注意,我特意选择了变量名 pause,因为它显然与 iostream 中声明的 pause() 冲突。任何反馈表示赞赏。谢谢!

最佳答案

编译器告诉你问题出在哪里。它有两条可能的路线来解决 pause - 一个是通过 A::pause另一个是通过函数 pause()<unistd.h> 中定义并且存在于任何命名空间之外。编译器无法决定使用哪个,因此您必须帮助它。

如果您在 A 中为您的变量选择了一个不太通用的名称命名空间,例如pause_val , 你可以在没有命名空间范围的情况下输出它

#include <iostream>
namespace A { int pause_val = 8; }
using namespace A;
int main() {
std::cout << pause_val << std::endl;
return 0;
}

关于不使用范围运算符就无法访问 C++ 命名空间变量,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14752795/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com