gpt4 book ai didi

c++ - 内部命名空间名称与全局命名空间名称匹配时的歧义

转载 作者:太空宇宙 更新时间:2023-11-04 13:20:29 26 4
gpt4 key购买 nike

语言律师,注意!

我有以下代码:

namespace conflicting 
{
struct Foo {};
}

namespace outer
{
namespace conflicting
{
struct Bar {};
}
}

using namespace outer;

int main()
{
conflicting::Bar b;
return 0;
}

使用 g++ 4.8.2,我在尝试编译时遇到以下错误:

t.cpp: In function ‘int main()’:
t.cpp:18:5: error: reference to ‘conflicting’ is ambiguous
conflicting::Bar b;
^
t.cpp:2:1: note: candidates are: namespace conflicting { }
{
^
t.cpp:9:5: note: namespace outer::conflicting { }
{
^
t.cpp:18:5: error: reference to ‘conflicting’ is ambiguous
conflicting::Bar b;
^
t.cpp:2:1: note: candidates are: namespace conflicting { }
{
^
t.cpp:9:5: note: namespace outer::conflicting { }
{
^
t.cpp:18:22: error: expected ‘;’ before ‘b’
conflicting::Bar b;

有人可以向我解释为什么会发生此错误(可能引用标准的一部分)吗?

最佳答案

您使用 conflicting:: 限定了一个名称,因此编译器需要去寻找那个范围内的 Bar ...但是哪个范围?它可以指代两个不同的,::conflictingouter::conflicting 可以在没有 outer:: 前缀的情况下引用,因为使用指令。

关于c++ - 内部命名空间名称与全局命名空间名称匹配时的歧义,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/35511323/

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