質問する
2775 次
2 に答える
6
2つの関数の戻り型が同じではないため、コンパイラが文句を言っています。void
一方はaを返し、もう一方は。を返しますbool
。2つの関数のリターンタイプは同じである必要があります。
あなたが持っている必要があります
class A {
public:
virtual bool Show() {
std::cout<<"\n Class A Show\n";
return true; // You then ignore this return value
}
};
class B : public A {
public:
bool Show(int i) {
std::cout<<"\n Class B Show\n";
return true; // You then ignore this return value
}
};
A
クラスとを変更できない場合は、クラスをB
変更して、メソッドの代わりにメソッドを使用できます。C
D
void Show()
bool Show()
これらのいずれも実行できない場合は、継承よりも合成を使用できます。関数から継承する代わりにB
、関数内に型のメンバーを設定します。D
class D : public C {
public:
bool Show() {
std::cout<<"\n child Show\n";
return true;
}
void ShowB() {
b.Show();
}
private:
B b;
};
于 2012-11-07T08:08:17.313 に答える
1
仲買人を追加する必要があります。何かのようなもの:
class C1 : public C{
public:
virtual bool show(){ /* magic goes here */ }
};
class D: public C1, public B{
....
Showを呼び出すには、次のようなものが必要です。
static_cast<C&>(c).Show();
于 2012-11-07T08:15:36.500 に答える