2017-02-19 2 views
-4

私は、さまざまなサブクラスで実装されているいくつかの空の仮想メソッドを持つ基本クラスを持っていますso:修正方法:空の仮想メソッドのための警告:非返り値[-Wreturn-type]を返すreturn文なし

//base class (has no attribute A or B) 
virtual double getAttributeA(){} //implemented in subclass A 
virtual int getAttributeB(){} // implemented in subclass B 

私は基本クラスポインタでサブクラス関数を呼び出す必要があるので、空の関数が必要です。

これはうまくコンパイルされますが、明らかに戻り値の型(サブクラスが必要とするもの)は定義されていますが、何も返さないので警告が表示されます。

この警告はどうすれば解決できますか?

ありがとうございます!

+6

戻り何かを。 – juanchopanza

+0

中括弧はなぜですか? – user2357112

+2

これらのメソッドは、すべてではなく、いくつかのサブクラスでのみ実装されるはずですか?それは疑わしいデザインのようです。 – user2357112

答えて

0

基本クラスポインタでサブクラス関数を呼び出す必要があるため、空の関数が必要です。

あなたがそれらを純粋なvirtualsをを宣言した場合、これらは例えば、代わりに空である必要はありません。

virtual double getAttributeA() = 0; 
virtual int getAttributeB() = 0; 

これは、基本クラス自体は、すべての実装を必要としないことが、派生クラスはそれらを実装する必要があります。

私は明らかに戻り値の型(サブクラスが必要とするもの)を定義していますが、何も返さないので警告が表示されます。

あなたがvoid以外の戻り値の型を宣言した場合、あなたは何かを返す必要があります。

virtual double getAttributeA() { return 0.0; } 
virtual int getAttributeB() { return 0; } 
+0

あなたのご意見ありがとうございます!私はすでにあなたの最初の解決策を試しましたが、**すべての**サブクラスで関数を実装する必要があるため、コンパイルされません。すべてのサブクラスがすべて同じ属性を持つとは限りません。私は0を返して行くかもしれない。 – hsvar

+0

@hsvar属性は、基本クラスに属していないすべてのサブクラスには適用されません。 –

関連する問題