我已经编写了一个Array结构(是的,我知道它们已经存在于其他地方,但我想创建自己的)。为什么我的代码要求我添加的项有一个无参数的构造函数?
template <typename T>
struct Array {
private:
unsigned int Capacity;
unsigned int Count;
public:
T *Items;
// ***********/
Array()
{
Count = 0;
Capacity = 0;
Items = 0;
}
void resize(const unsigned int capacity)
{
Capacity = capacity;
T *x = new T[Capacity]; //*** Error: invalid new-expression on class type SomeStruct ***//
for (unsigned int i = 0; i < Count; i++)
x[i] = Items[i];
delete[] Items;
Items = x;
}
void addItem(const T &item)
{
if(Count == Capacity)
resize();
Items[Count] = item;
Count++;
}
~Array() {
delete[] Items;
}
};如果我创建这样的数组..。
Array<SomeStruct> MyStructs;...and调用resize()像这样..。
MyStructs.resize(10);...it在显示的行上失败。
我以为我是在调用数组上的新函数,那么为什么要调用一个无参数的构造函数呢?
发布于 2014-08-17 16:29:02
指令T *x = new T[Capacity];创建T类型的Capacity新对象。T的默认构造函数在这里被调用。这就是为什么您的类T需要一个默认的(“无参数”)构造函数。
编辑:指令Items[Count] = item;需要赋值操作符或复制构造函数。如果两者都不是雪崩的,我想编译器可能会执行一个成员级克隆。
https://stackoverflow.com/questions/25351061
复制相似问题