在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)?