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;
不存在默认构造函数内部编译器做什么?
答案 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) {}
解决问题。