没有默认构造函数的模板模板

时间:2016-02-08 01:59:05

标签: c++ templates

我正在尝试编写一个没有默认构造函数的模板类 对于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 {
            ^

1 个答案:

答案 0 :(得分:3)

您未在构造函数的初始值设定项列表中正确构造x,因此A(T y)必须默认构造x,然后才能调用operator=来复制赋值y它。

int提供了一个默认构造函数,它只是让值未初始化,但A<int>没有。

你的构造函数应该是

A(T y) : x(y) { }