主模板 class 初始化

Template class initialization in main

class Q
{

Q(const Q &obj) {} // copy constructor 
Q& operator= (const Q& a){} // equal op overload
}

template <class T>
class B{
   public : T x;
 B<T>(T t) {
      //  x = t; }
    
}
int main()
{
    Q a(2);
    a.init(1,0);
    a.init(2,1);
    B <Q> aa(a); // this line gives error
}

如何用复制构造函数初始化模板class? B aa(a); // 这一行报错 我想解决它,但我做不到。 错误:

没有匹配函数来调用 'Q::Q()'| 候选人:Q::Q(const Q&)|

候选人需要 1 个参数,但提供了 0 个| 候选人:Q::Q(int)|

候选人需要 1 个参数,但提供了 0 个参数|

解决提到的错误,只需在class Q中添加一个默认构造函数,如下所示

class Q
{
    Q() //default constructor
    {
      //some code here if needed
    }

    //other members as before
};

需要默认构造函数,因为当您写入时:

B <Q> aa(a);

然后模板参数 T 被推断为 Q 类型并且因为你有

T x;

在 class 模板 B 中,它尝试使用 T 类型的默认构造函数,在这种情况下它只是 Q,所以这就是原因您需要 Q.

的默认构造函数

其次注意你的复制构造函数应该有一个return语句,它目前没有。