C++ 模板继承是如何工作的? 模板 甲级{ 公众: A(康斯特T&T) { std::cout

C++ 模板继承是如何工作的? 模板 甲级{ 公众: A(康斯特T&T) { std::cout,c++,C++,C有两个基类-A和A。您已经指定了对基类A构造函数的显式调用,但没有为基类A指定任何内容。如果在初始值设定项列表中未显式使用构造函数,编译器将尝试调用默认cons卡车司机。因此 template<typename T> class A { public: A(const T &t ) { std::cout << t; } }; class C : public A<int>, public A&

C
有两个基类-
A
A
。您已经指定了对基类
A
构造函数的显式调用,但没有为基类
A
指定任何内容。如果在初始值设定项列表中未显式使用构造函数,编译器将尝试调用默认cons卡车司机。因此

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');

}

解决问题。

谁在乎编译器在内部做什么。你没有为一个基本子对象提供初始值设定项,这才是最重要的。为什么你要构造
C
A
部分,而不是
A
?编译器正告诉你问题所在。@Kerrek SB,,为什么我需要一个默认的Constructor。我从哪里调用A的默认构造函数?您能解释一下吗?@user966379您也继承了
A
,这就是错误消息告诉您的内容。A是一个包含普通旧数据的对象(POD)。为什么编译器不提供默认构造函数?@Gregg,当定义另一个用户定义的构造函数时,编译器会删除默认构造函数。这就是语言的定义方式。
C(char c) : A<char>(c) {}
C(char c) : A<char>(c), A<int>() {}
C(char c) : A<char>(c), A<int>(0) {}