尝试使用模板构建数组时,出现错误 实现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运行时看到创建的数组。
答案 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
是一个数组,而不是一个指针,因此尝试分配一些内存并为其分配没有任何意义。