C ++调用模板化超类的继承方法

时间:2015-01-22 04:42:59

标签: c++ templates inheritance

我不明白为什么以下代码无法编译:

#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&amp;)'

但Derived是否应该从Base继承一个带有这种签名的方法?

由于

2 个答案:

答案 0 :(得分:3)

您应该将行printTuple(tuple)更改为Base<T>::printTuple(tuple),因为基类的功能已隐藏

答案 1 :(得分:2)

只需将其添加到public的{​​{1}}部分的顶部:

class Derived

这将暴露函数的基类重载,即防止它被遮蔽。&#34;