template <class T, class U, class Child>
class Parent {
public:
virtual T blah() {
return gaga;
}
protected:
T gaga;
};
class Child : public Parent<double, double, Child> {
virtual void blah(int overloaded) {
}
virtual void func() {
blah();
}
};
int main() {
Child* p = new Child();
}
上記のコードがコンパイルされないのはなぜですか?なぜ私はそのような仮想関数をオーバーロードできないのですか?仮想テンプレート関数のオーバーロード
私は取得していますエラー:Child
で
prog.cpp: In member function ‘virtual void Child::func()’:
prog.cpp:16: error: no matching function for call to ‘Child::blah()’
prog.cpp:12: note: candidates are: virtual void Child::blah(int)
prog.cpp: In function ‘int main()’:
prog.cpp:21: warning: unused variable ‘p’
ありがとうございました。問題が修正され、クラス内で使用できるようになりました...しかし、Parent :: blah()を外部で使用することはできません。例:p-> blah(); – user988098
これを行うには、 'using'文をpublicスコープに入れなければなりません。私は私の答えを更新しました。 –