当多个基类具有同名成员函数时,如何解决函数调用歧义?

发布于 2024-11-26 17:45:29 字数 567 浏览 3 评论 0原文

我有一个与 C++ 多重继承相关的基本问题。如果我有如下所示的代码:

struct base1 {
   void start() { cout << "Inside base1"; }
};

struct base2 {
   void start() { cout << "Inside base2"; }
};

struct derived : base1, base2 { };

int main() {
  derived a;
  a.start();
}

会出现以下编译错误:

1>c:\mytest.cpp(41): error C2385: ambiguous access of 'start'
1>      could be the 'start' in base 'base1'
1>      or could be the 'start' in base 'base2'

是否无法使用派生类对象从特定基类调用函数 start()

我现在不知道用例但是..仍然!

I have a basic question related to multiple inheritance in C++. If I have a code as shown below:

struct base1 {
   void start() { cout << "Inside base1"; }
};

struct base2 {
   void start() { cout << "Inside base2"; }
};

struct derived : base1, base2 { };

int main() {
  derived a;
  a.start();
}

which gives the following compilation error:

1>c:\mytest.cpp(41): error C2385: ambiguous access of 'start'
1>      could be the 'start' in base 'base1'
1>      or could be the 'start' in base 'base2'

Is there no way to be able to call function start() from a specific base class using a derived class object?

I don't know the use-case right now but.. still!

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

你丑哭了我 2024-12-03 17:45:29
a.base1::start();

a.base2::start();

或者如果你想专门使用一个

class derived:public base1,public base2
{
public:
    using base1::start;
};
a.base1::start();

a.base2::start();

or if you want to use one specifically

class derived:public base1,public base2
{
public:
    using base1::start;
};
清秋悲枫 2024-12-03 17:45:29

当然!

a.base1::start();

或者

a.base2::start();

Sure!

a.base1::start();

or

a.base2::start();
情泪▽动烟 2024-12-03 17:45:29

除了上面的答案之外,如果我们处于非虚拟继承的情况:

您可以:

  1. 使用 static_cast(a).start()

  1. 在派生中重写 start()

顺便说一句 - 请注意可能出现的钻石问题。在这种情况下,您可能需要使用虚拟。

In addition to the answers above, if we are in the case of NON-VIRTUAL inheritance:

you can:

  1. use static_cast<base1*>(a).start()

or

  1. override start() in derived

Btw - please note the diamond problem that can appear. In this case you might want to use virtual.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文