这是基类:

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
}

在给定的错误是:

  

线29:智能感知:从“标准::对”到“长双”没有合适的转换函数存在

     

线29:智能感知:在函数调用的参数太少

显然,问题是,我不能访问在从派生的类的基类的方法中,即使它被定义公共

如何让这段代码的工作?

(我的IDE是视觉工作室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