尝试使用Array类的模板构造一个整数数组时,错误:为什么数组类型'int [5]'是不可分配的,

时间:2019-08-19 04:16:59

标签: c++ arrays templates constructor

尝试使用模板构建数组时,出现错误 实现Array类模板的默认构造函数。

int main()
{
    Array<int,5> arrayOfFiveInts;
    return 0;
}

template<typename T, size_t SIZE>
class Array
{
public:
   Array<T,SIZE>::Array()
   {
      elements = new T [SIZE];
      for (int i = 0; i < SIZE; i++)
      {
         elements[i] = 0;
      } 
   }
private:
   T elements[SIZE];
};

我希望在Main运行时看到创建的数组。

2 个答案:

答案 0 :(得分:3)

您必须决定要在自动还是动态内存中存储阵列。

如果打算将其保存在自动内存中,则必须在构造函数中删除对new[]的调用,因为在声明elements时已经分配了它。

如果打算将其保存在动态内存中,则必须将elements的声明更改为

T* elements;

如果这样做,则还需要确保您的班级遵循Rule of 3/5/0。添加析构函数:

~Array()
{
    delete[] elements;
}

除了实现(或删除)复制/移动构造函数和复制/移动赋值运算符之外。

模板是仅标头的,您无需使用额外的限定条件:

Array<T,SIZE>::Array()

在示例中,您必须在main()函数之前定义类。

在中检查正确的格式 this Live demo

答案 1 :(得分:0)

只需删除此行

elements = new T [SIZE];

elements是一个数组,而不是一个指针,因此尝试分配一些内存并为其分配没有任何意义。