我有一个基类,它包含两个同名的函数,一个带有vector<int>
作为参数,另一个带有int
。这个想法是,子类将定义自己的方法来处理一个int,基类将能够处理任一选项。但目前它不能编译。抽象基类中的覆盖函数
class base {
public:
virtual void toBeCalled(int i) const = 0;
virtual void toBeCalled(std::vector<int> iVec) const
{
std::cout << "base::toBeCalled(vec<int>)" << std::endl;
}
};
class derived : public base {
public:
virtual void toBeCalled(int i) const
{
std::cout << "derived::toBeCalled(int)" << std::endl;
}
};
int main(int argc, char* argv[])
{
derived d;
std::vector<int> iVec;
int i = 0;
d.toBeCalled (i);
d.toBeCalled (iVec); //<< Compile error: Cannot convert from std::vector<int> to int
return 0;
}
我可以得到它通过在main()base *d = new derived()
使用基类对象工作,但我宁愿如果可能的话没有做到这一点,因为我想访问一些派生类的功能。
在派生类中使用基名的使用。或者对冲突的功能使用其他名称。 – qPCR4vir 2013-03-07 11:15:22
@WhozCraig我希望这是在复制/粘贴到SO:时出现错字:-)。 – qPCR4vir 2013-03-07 11:19:46
你说得对,它确实存在,我现在已经纠正了这个问题。同样的错误仍然存在,虽然... – Chris 2013-03-07 11:22:22