模板继承如何工作?

时间:2016-09-12 15:12:19

标签: c++

template<typename T>
class A {
public:
    A(const T &t )
    {
        std::cout << t;
    }
};
class C :
    public A<int>,
    public A<char>
{

public:
    C(char c) : A<char>(c) {}

};

void main()
{
    C obj('c');

}

编译以下程序时,编译器发出以下错误。 类&#34; A&lt; int&gt;&#34;

不存在默认构造函数

内部编译器做什么?

1 个答案:

答案 0 :(得分:4)

C有两个基类 - A<int>A<char>。您已指定对基类A<char>构造函数的显式调用,但您尚未为基类A<int>指定任何内容。如果未在初始化列表中显式使用构造函数,则编译器会尝试调用默认构造函数。因此,

C(char c) : A<char>(c) {}

相当于:

C(char c) : A<char>(c), A<int>() {}

这是一个问题,因为A没有定义默认构造函数。你可以使用

C(char c) : A<char>(c), A<int>(0) {}

解决问题。