派生クラスのメソッドと同じ名前の基本クラスからメソッドを呼び出そうとしています。簡単な例を次に示します。
#include <iostream>
using namespace std;
class Base
{
public:
void print() {
cout << "Printing from base" << endl;
}
void print(int num) {
cout << "Printing number from base: " << num << endl;
}
};
class Derived : public Base
{
using Base::print;
public:
void print() {
cout << "Printing from derived" << endl;
}
};
int main()
{
Derived x;
x.print();
x.Base::print(1);
//x.print(1); // Gives a compilation error
return 0;
}
基本的には、 x.print(1) を呼び出して "Printing number from base: 1" を取得できるようにしたいと考えています。つまり、基本クラスに存在するにもかかわらず、署名に一致するメソッドを自動的に呼び出すことができます。
がなければ、using Base::print;
名前error: no matching function for call to 'Derived::print(int)'
が隠されているため完全に理にかなっています。
したがって、その行を追加しましたが、エラーは次のとおりですerror: 'void Base::print(int)' is inaccessible
これはなぜですか?私はパブリック継承を使用しているので、すぐに利用できると思っていたでしょうか?
例に示されているように、手動で を呼び出すと問題なく動作x.Base::print(1);
しますが、より透過的に実行したいと考えています。もちろん、派生クラスの関数にラッパーを再実装することもできますが、それもあまりエレガントではないようです。
これが以前の質問でカバーされていた場合は申し訳ありません。私はそれらの束を読み、多くの同様のケースを見つけましたが、何も助けにはなりませんでした。