この例では、クラス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 ambiguous
2つの関数シグネチャが完全に異なるため、私には偽のコンパイルエラーが表示されます。do_stuff
非仮想の場合はBar::do_stuff
、それを明確にするために呼び出すことができますが、そうすると多態性が失われ、リンカーエラーが発生します。
名前を変更せずfunc
にバーチャルdo_stuff
を呼び出すことはできますか?