在c中我想要一个抽象类型Query的数组,其中包含函数calcScore()
这是一个纯虚函数.
我有两个非抽象的类:实现calcScore函数的ConQuery和DisQuery.
为了做到这一点,我定义了这样的数组:
vector<Query*> m;
我迭代并调用这个函数:
for (vector<Query*>::const_iterator it1 = index.begin() ;it1 != index.end() ; it1++)
{
cout << (*it1)->CalcScore() << endl;
}
调用Query的纯虚函数时出错.
如何通过多态类型调用ConQuery函数或DisQuery函数?
谢谢.
解决方法:
你确定在ConQuery和DisQuery中实现了CalcScore吗?
我试过这个:
#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一个Query项(而不是con / dis)?