我有以下代码:
namespace A {
struct Foo {
int a;
};
}
struct Foo {
int b;
};
struct Bar : public A::Foo {
Bar(Foo foo) {
c = foo.b;
}
int c;
};
C ++编译器抱怨“ c = foo.b”,因为A :: Foo没有名为b的成员。如果我用:: Foo更改Bar参数的类型,它将起作用。
我的问题是此行为背后的原因是什么(我想这与继承使Bar进入A名称空间这一事实有关,但是我找不到任何文档来支持该理论。
8
我认为这与参数依赖查找有关。我标记了“语言律师”,因为我认为您正在寻找引用语言标准的答案。这是一个很好的第一个问题!这一切都值得。
—
Bathsheba
它不会进入命名空间
—
n314159
A
,您可以看到是否允许Bar
从中继承另一个结构A
。那就没有歧义了。它更像是继承自加都A::Foo
到Bar
包括的分辨率Foo
来A::Foo
。抱歉,我无法真正准确地表达它。
@Bathsheba您是指用于查找函数名称(或函数模板名称)还是模板中的从属名称的参数类型从属名称查找吗?
—
curiousguy19年