c++ - C++ 中的多重虚拟继承提示特定函数调用

标签 c++ inheritance virtual ambiguous

在 C++ 中,带有虚基的多重继承 我明白为什么这段代码可能不明确,但为什么当我专门调用派生类方法时它仍然会提示?

class A {
public:
    virtual void f() { cout << 1 ;}
};
class B :virtual public A {
public:
    virtual void f() { cout << 2; }
};
class C :virtual public A {
public:
    virtual void f() { cout << 3; }
};
class D : public B, public C {};

void main(){
    D* d = new D();
    d->B::f();
    getch();
}

我希望它会运行 B:f() 方法,但我得到: “‘void A::f(void)’的继承不明确

最佳答案

问题是你的函数是虚拟的,这意味着它会覆盖 vtable 中的地址。您不能用两个函数覆盖一个地址。 如果没有 virtual 限定符,调用期间就会出现歧义,这可以避免,就像指定基类 B::f()

关于c++ - C++ 中的多重虚拟继承提示特定函数调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21202884/

相关文章:

c++ - 重新分配虚函数是否合法

c++ - 在C++中查找和比较Unicode字符

c++ - 有没有办法在c++03中模拟c++11 'override'说明符的效果?

c++ - CMake生成的程序无法在Windows上链接: tries to link to non-existent file

c++ - C++中继承时的方法重载

C++ 继承的模板类无权访问基类

C++ 静态库和共享库

c++ - SFINAE 给出 "Inheriting constructor does not inherit ellipsis"警告

windows - 我需要为 Windows 创建一个虚拟打印机驱动程序,它将通过另一个程序重定向请求

c++ - C++中的继承构造函数