如何重载并调用在以前在它的基类中定义的派生类的方法?
-
26-09-2019 - |
题
这是基类:
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));
}
不隶属于 StackOverflow