以前にその基底クラスで定義された派生クラスでメソッドをオーバーロードして呼び出す方法?

StackOverflow https://stackoverflow.com/questions/4616462

質問

この基本クラスです。

template <class T>
class DataLogger
{
        // ...
    public:
        void AddData(T Data);
        // ...
}

これは派生クラスです。

#include "DataLogger.h"
#include <utility>

class Plotter : public DataLogger<std::pair<long double, long double>>
{
        // ...
    public:
        void AddData(long double x, long double y);
        // ...
}

// This method is supposed to wrap the original AddData() method
// which was defined in the base class
void Plotter::AddData(long double x, long double y)
{
    AddData(std::make_pair(x, y));  // LINE #29
}

特定のエラーがあります:

  

LINE 29:インテリセンス: "長いダブル" への無適した変換機能 "はstd ::ペアは、"

が存在します      

LINE 29:インテリセンス:関数呼び出しの引数の数が少なすぎる。

どうやら、問題は、それが公共に定義されていても、私は派生クラスから基底クラスのメソッドにアクセスすることができないということです。

私はこのコードを動作させる方法を教えてください。

(私のIDE Studio 2010のビジュアルである。)

役に立ちましたか?

解決

はベースからあなたのAddDataは、派生クラスからAddDataによって隠されています。明示的にコールDataLogger<std::pair<long double, long double>>::AddData(...)を修飾またはusing DataLogger<std::pair<long double, long double>>::AddData;とスコープにそれを持って来る。

他のヒント

派生クラスの皮であなたのAddData基底クラスの関数AddDataので、すべてのあなたがする必要がusingディレクティブを使用して再表示、後者であり、

class Plotter : public DataLogger<std::pair<long double, long double>>
{

public:
   //unhiding : bringing base class function into scope!
   using DataLogger<std::pair<long double, long double>>::AddData;

};

読むの項目33:避けて隠れ継承された名前実効からC ++スコット・マイヤーズするます。

のスーパーのクラスメソッド書き込み::AddData(x, y);を呼び出すために。新しいPlotter::AddData方法はDataLogger::AddDataになります。の見えない

問題は、「それは公衆に定義されていても、私は、派生クラスから基底クラスのメソッドにアクセスできないこと」ではありません。

は問題がプロッタ:: AddData関数が基本クラスに代わりAddData関数の(一対の)自分自身を呼び出すしようとしていることである。

あなたが書き込むことによって、明示的な呼び出しを行うことができます。

void Plotter::AddData(long double x, long double y)
{
    DataLogger<std::pair<long double, long double>>::AddData(std::make_pair(x, y));
}
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top