我有一个基类,其中包含一个已实现的函数和一个共享名称但不共享参数的纯虚函数。我无法从派生类的实例调用在基类中实现的函数。
我已经尝试将函数添加到派生类而不是基类并且它可以工作,但这意味着我必须将函数添加到每个派生类而不是在基类中实现一次。我也尝试过更改函数名称并且它有效。似乎是由于两个重载函数之间发生了冲突。
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
}
Run Code Online (Sandbox Code Playgroud)
上面的代码没有编译,表明它没有找到函数:some_function(int)。
这个名字some_function在Derived皮名some_function来自继承Base。您必须通过using声明将其带回范围:
class Derived final: public Base<int> {
public:
using Base<int>::some_function;
int some_function() {
// some code
}
}
Run Code Online (Sandbox Code Playgroud)