在C++中,我想要一个抽象类型Query的数组,该数组具有函数calcScore()
这是一个纯虚函数。
我有两个非抽象类:ConQuery和DisQuery,它们实现calcScore函数。

为了做到这一点,我定义了这样的数组:

vector<Query*> m;

我迭代并调用该函数,如下所示:
for (vector<Query*>::const_iterator it1 = index.begin() ;it1 != index.end() ; it1++)
{
     cout << (*it1)->CalcScore() << endl;
}

调用Query的纯虚函数时,出现错误。
如何通过多态类型调用ConQuery的功能或DisQuery的功能?
谢谢。

最佳答案

您确定CalcScore是在ConQuery和DisQuery中实现的吗?
我尝试了这个:

#include <iostream>
#include <vector>

class Query{
public:
    virtual int CalcScore() = 0;
};

class Query2 : public Query
{
public:
    virtual int CalcScore()
    {

        return 2;
    }
};

class Query3 : public Query
{
public:
    virtual int CalcScore()
    {

        return 3;
    }
};

int main(int argc, char* argv[])
{

    std::vector<Query*> m;
    m.push_back(new Query2());
        m.push_back(new Query3());
    for (std::vector<Query*>::const_iterator it1 =  m.begin() ;it1 !=  m.end() ; it1++)
    {
        std::cout  << (*it1)->CalcScore();
    }
}

在我的VS2012下运行良好。

我在某些项目中也用了无数次。

也许您尝试push_back一个查询项(而不是con/dis)?

09-06 04:59