C++ (C+;+;)从参数传递的类调用函数
我最近偶然发现了一个有趣的问题。问题是,在clas过滤器中,调用getKriterium().ohodnot()没有任何问题。 但是,当我想调用它时,例如Filter_FI(),它不起作用C++ (C+;+;)从参数传递的类调用函数,c++,function,polymorphism,abstract,C++,Function,Polymorphism,Abstract,我最近偶然发现了一个有趣的问题。问题是,在clas过滤器中,调用getKriterium().ohodnot()没有任何问题。 但是,当我想调用它时,例如Filter_FI(),它不起作用 class Filter { public: Filter() {}; SortedSequenceTable<H, O> vyfiltruj(SortedSequenceTable<H, O> pVstup) { for (TableItem&l
class Filter
{
public:
Filter() {};
SortedSequenceTable<H, O> vyfiltruj(SortedSequenceTable<H, O> pVstup) {
for (TableItem<H, O> *prem : pVstup) {
if (splnaKriterium(O)) {
table.insert(O);
}
}
return table;
}
virtual ~Filter() {};
void setKriterium(Kriterium<O, T>* pKriterium) { aKriterium = pKriterium; };
Kriterium<O, T>* getKriterium() { return aKriterium; };
protected:
virtual bool splnaFilter(const O& pObject, Kriterium<O, T>& pKrit) = 0;
private:
Kriterium<O, T>* aKriterium;
SortedSequenceTable<T, O>* table;
};
template<typename O, typename T, typename H>
class Filter_fi : public Filter<O, T, H>
{
public:
Filter_fi() {};
void setAlpha(T pAlpha) { alphaPARAM = pAlpha; };
T getAlpha() { return alphaPARAM; };
void test() {
getKriterium().ohodnot()// Here I want to call the function .ohodnot(), But it will not let me...
}
virtual ~Filter_fi() {};
protected:
virtual bool splnaFilter(const O& pObject) override { return (alphaPARAM); };
private:
T alphaPARAM;
};
类过滤器
{
公众:
过滤器(){};
分拣顺序表vyfiltruj(分拣顺序表pVstup){
用于(表项*prem:pVstup){
if(splnaKriterium(O)){
表.插入(O);
}
}
返回表;
}
虚拟~Filter(){};
void setKriterium(Kriterium*pKriterium){aKriterium=pKriterium;};
Kriterium*getKriterium(){return aKriterium;};
受保护的:
虚拟布尔滤波器(const O&pObject,Kriterium&pKrit)=0;
私人:
克里特里姆*aKriterium;
分拣顺序表*表格;
};
模板
类过滤器\u fi:公共过滤器
{
公众:
过滤器_fi(){};
void setAlpha(T pAlpha){alphaPARAM=pAlpha;};
T getAlpha(){return alphaPARAM;};
无效测试(){
getKriterium().ohodnot()//我想在这里调用函数.ohodnot(),但它不允许我。。。
}
虚~Filter_fi(){};
受保护的:
虚拟bool-splnaFilter(const-O&pObject)重写{return(alphaPARAM);};
私人:
Tα参数;
};
如果您能帮我解决这个问题,我将非常高兴。
getKriterium()
是过滤器
类的成员函数,因此您可以从内部这样调用它Filter\u fi
不知道什么是getKriterium()
函数。所以我尝试将getKriterium()
和setKriterium()
添加到Filter\u fi
中,但出现了另一个问题。因此,我尝试将aKriterium声明为受保护。但是编译器说它没有访问aKriterium的权限,所以我甚至在Filter\u fi中添加了属性aKriterium,它开始工作了。但我不知道这是否是一个最佳解决方案。getKriterium
返回一个指针。尝试getKriterium()->ohodnot()谢谢你的提示,但我已经试过了。不起作用..错误输出到底是什么?除此之外,有点牵强,但是试试this->getKriterium()->ohodnot()代码>。另外,是否包含Kriterium
的标题(有时使用向前声明)?