主模板 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
语句,它目前没有。
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
语句,它目前没有。