この例では、クラスFooとBarはライブラリから提供されています。私のクラスBazは両方から継承します。
struct Foo
{
void do_stuff (int, int);
};
struct Bar
{
virtual void do_stuff (float) = 0;
};
struct Baz : public Foo, public Bar
{
void func ()
{
do_stuff (1.1f); // ERROR HERE
}
};
struct BazImpl : public Baz
{
void do_stuff (float) override {};
};
int main ()
{
BazImpl () .func ();
}
reference to ‘do_stuff’ is ambiguous2つの関数シグネチャが完全に異なるため、私には偽のコンパイルエラーが表示されます。do_stuff非仮想の場合はBar::do_stuff、それを明確にするために呼び出すことができますが、そうすると多態性が失われ、リンカーエラーが発生します。
名前を変更せずfuncにバーチャルdo_stuffを呼び出すことはできますか?