仮想をオーバーライドしようとしていますが、キーワードoverride
,final
およびconst
を後続の戻り値の型で使用しています。問題は派生クラスにあるようですが、コンパイラエラー(末尾の戻り値の型を指定していないと言っています)はあまり役に立ちません。コードはここにあります:https://wandbox.org/permlink/zh3hD4Ukgrg6txyE最後の戻り値の型を持つfinal、override、constの構文
さらに貼り付けます。私はさまざまな順序で遊んできましたが、それでも正しいものに見えません。助けていただければ幸いです。ありがとうございます。
#include<iostream>
using std::cout; using std::endl; using std::ostream;
//////////////////////////////////////////////
//Base stuff
class Base
{
public:
Base(int i=2):bval(i){}
virtual ~Base()=default;
virtual auto debug(ostream& os=cout)const->ostream&;
private:
int bval=0;
};
auto Base::debug(ostream& os) const->ostream&
{
os << "bval: " << bval << endl;
return os;
}
///////////////////////////////////////////////
//Derived stuff
class Derived : public Base
{
public:
Derived(int i=2,int j=3):Base(i), dval(j){}
~Derived()=default;
auto debug(ostream& os=cout) const override final->ostream&; // error here
private:
int dval=0;
};
auto Derived::debug(ostream& os) const override final->ostream&
{
os << "dval: " << dval << endl;
return os;
}
///////////////////////////////////////////////
//Testing!
int main()
{
Base b(42);
b.debug()<<endl;
return 0;
}
小さなビットを、あなたは(〜派生する必要はありません)=デフォルト;右? – Sheen
実際、これは必須ではありません:) – pss