Rep*_*kas 20 c++ polymorphism virtual inheritance class
代码如下.我的D类中有一个单独的函数f()和一个函数f(int),那么如果两个函数都有不同的参数,为什么该调用不明确?
struct A {
void f() {}
};
struct B: virtual A {
void f(int i) {}
};
struct C: virtual A {
void f() {}
};
struct D: B, C {
};
int main()
{
D d;
d.f(5); //ambiguous
}
Run Code Online (Sandbox Code Playgroud)
asc*_*ler 28
这里的问题是成员名称查找,它在评估哪些函数可行并应用重载解析之前发生.当名称查找从两个或多个不相关的基类中查找名称时,这被认为是不明确的查找,它立即无效.
有关更多详细信息,请阅读类成员定义中的非限定名称查找.(这实际上不是您在此处的上下文,但相同的规则适用于成员访问表达式.)
您可以通过使用qualified-id指定要在其中开始查找的基类来解决此问题:
d.B::f(5);
Run Code Online (Sandbox Code Playgroud)
或者,您可以直接在D以下位置明确显示这两个函数:
struct D: B, C {
using B::f;
using C::f;
};
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1762 次 |
| 最近记录: |