C++ 调用模板化超类的继承方法
C++ calling a inherited method of a templated superclass
我不明白为什么以下代码无法编译:
#include <iostream>
using namespace std;
template<typename T>
class Base {
public:
void printTuple(T tuple) {
std::cout << "Hello1!" << std::endl;
}
};
template<typename T>
class Derived : public Base<T> {
public:
void printTuple(std::string name, T tuple) {
std::cout << "Hello2!" << std::endl;
printTuple(tuple);
}
};
int main()
{
Derived<int> d1;
d1.printTuple("Test", 13);
return 0;
}
我收到以下错误:
main.cpp:19:25: 错误:没有匹配函数来调用 Derived::printTuple(int&)'
但是 Derived 不应该从 Base 继承具有这种签名的方法吗?
谢谢
只需将此添加到 class Derived
的 public
部分的顶部:
using Base<T>::printTuple;
这将公开函数的基本 class 重载,即防止它被 "shadowed."
您应该将行 printTuple(tuple)
更改为 Base<T>::printTuple(tuple)
,因为基数 class 的一个函数已被 隐藏。
我不明白为什么以下代码无法编译:
#include <iostream>
using namespace std;
template<typename T>
class Base {
public:
void printTuple(T tuple) {
std::cout << "Hello1!" << std::endl;
}
};
template<typename T>
class Derived : public Base<T> {
public:
void printTuple(std::string name, T tuple) {
std::cout << "Hello2!" << std::endl;
printTuple(tuple);
}
};
int main()
{
Derived<int> d1;
d1.printTuple("Test", 13);
return 0;
}
我收到以下错误:
main.cpp:19:25: 错误:没有匹配函数来调用 Derived::printTuple(int&)'
但是 Derived 不应该从 Base 继承具有这种签名的方法吗?
谢谢
只需将此添加到 class Derived
的 public
部分的顶部:
using Base<T>::printTuple;
这将公开函数的基本 class 重载,即防止它被 "shadowed."
您应该将行 printTuple(tuple)
更改为 Base<T>::printTuple(tuple)
,因为基数 class 的一个函数已被 隐藏。