我正在尝试编写一个没有默认构造函数的模板类
对于A<int>
工作正常,但A<A<int>>
我不知道如何让它工作。
1 #include <iostream>
2 using namespace std;
3
4 template <typename T>
5 class A {
6 T x;
7
8 public:
9 A(T y) { x = y; }
10 };
11
12 int main() {
13 A<int> a(0);
14 A<A<int> > b(A<int>(0));
15
16 return 0;
17 }
来自clang的错误列表
test.cpp:9:5: error: constructor for 'A<A<int> >' must explicitly initialize the member 'x' which does not have a default constructor
A(T y) { x = y; }
^
test.cpp:14:16: note: in instantiation of member function 'A<A<int> >::A' requested here
A<A<int> > b(A<int>(0));
^
test.cpp:6:7: note: member is declared here
T x;
^
test.cpp:5:9: note: 'A<int>' declared here
class A {
^
答案 0 :(得分:3)
您未在构造函数的初始值设定项列表中正确构造x
,因此A(T y)
必须默认构造x
,然后才能调用operator=
来复制赋值y
它。
int
提供了一个默认构造函数,它只是让值未初始化,但A<int>
没有。
你的构造函数应该是
A(T y) : x(y) { }