【发布时间】:2015-07-16 20:24:48
【问题描述】:
我有这四个类:
class BaseWrapper {
public:
virtual void Process(int i) = 0;
};
template<typename T>
class Wrapper : public BaseWrapper {
public :
Wrapper(T * arg): var(arg) {}
void Process(int i) {
this->var->Process(i);
}
private:
T * var;
};
class Base {
public :
void Process(int) {}
};
class Derived : public Base {
public:
Derived() {
BaseWrapper * wrap = new Wrapper<Derived>(this);
}
void Process(std::string) {}
};
所以基本上Derived类并没有重载Process方法,而这个方法是包装器需要的。当我编译这个时,我得到'没有匹配函数调用 Derived::Process(int)'。
难道 Process 方法还不能定义在 Derived 类中吗?我也尝试在 Base virtual 中声明 Process 方法,它没有改变任何东西。
我不是在寻找解决方法(我通过重载 Process 方法并在其中调用父方法找到了解决方法),但我试图理解为什么它不能编译。
[编辑]:如果我从 Derived 中删除 'void Process(std::string)',它会编译。因此,问题似乎来自存在同名的不同方法。
【问题讨论】:
标签: c++ templates overloading derived-class