C++ (C+;+;)从参数传递的类调用函数

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

我最近偶然发现了一个有趣的问题。问题是,在clas过滤器中,调用getKriterium().ohodnot()没有任何问题。 但是,当我想调用它时,例如Filter_FI(),它不起作用

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
的标题(有时使用向前声明)?