class A
{
A() {};
virtual ~A() {};
virtual void Start() {};
virtual void Start(float a) {};
};
class B : public A
{ };
class C : public A
{
virtual void Start(float a) {};
}
...
B BObj;
BObj.Start(); // -> fine, no complain from g++
...
...
C CObj;
CObj.Start(); // -> not fine -> error: no matching function for call to ‘C::Start()’
...
私は、両方の仮想関数が同じ名前だがパラメータの署名が異なるということから問題が発生していると考えます。私が知りたいのは、これはg ++固有のエラーメッセージ、vtableの実装方法、またはC++標準に基づくエラーです。同じ名前の仮想メンバ関数の継承
上記に何かがあります。クラスルーチンはすべてデフォルトでプライベートなので、あなたが上に書いたコードはあなたが投稿しているものとは異なるエラーを出します... – fbrereto
@fbreretoは、あなたのメソッドの可視性がクラスAにもBにも限定されていると指摘していますCもそれらを継承しません。 – josefx
著者はちょうどすぐにいくつかのコードを一緒に投げたと思います。現在の場所に...コンパイラエラーが発生する –