我有一个带有实现函数和纯虚函数的基类,它们共享一个名称,但不共享参数。我无法从派生类的实例中调用在基类中实现的函数。
我尝试将函数添加到派生类而不是基类,并且它可以工作,但这意味着我必须将函数添加到每个派生类,而不是在基类中一次实现。 我也尝试过更改函数名称,并且它可以工作。这似乎是由于两个重载函数之间的冲突。
template <typename T>
class Base {
public:
virtual T some_function(int x) = 0;
T some_function() {
// some code
}
}
class Derived final: public Base<int> {
int some_function() {
// some code
}
}
int main() {
Derived var = Derived();
var.some_function(3);// Compilation error
}
上面的代码没有编译,表明它找不到该函数:some_function(int)。
答案 0 :(得分:4)
some_function
中的名称Derived
隐藏了从some_function
继承的名称Base
。您必须使用using
声明将其重新纳入范围:
class Derived final: public Base<int> {
public:
using Base<int>::some_function;
int some_function() {
// some code
}
}