数组结构需要无参数构造函数
Array struct requires parameterless constructor
我已经写了一个数组结构(是的,我知道它们已经存在于其他地方,但我想创建我自己的)。为什么我的代码要求我添加的项具有无参数构造函数?
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;
…然后像这样调用resize()
MyStructs.resize(10);
…在显示的行中失败。
我以为我在数组上调用new,那么为什么它试图调用无参数构造函数?
指令T *x = new T[Capacity];
创建Capacity
类型为T的新对象,T的默认构造函数在此处被调用。这就是为什么你的类T需要一个默认的("无参数的")构造函数。
编辑:指令Items[Count] = item;
需要赋值操作符或复制构造函数。如果两者都不可用,我猜编译器可能会执行成员克隆。
相关文章:
- C++:使用运算符 = 调用多参数构造函数
- 通过零参数构造函数创建的 glm::mat4 应该包含哪些值?
- 好奇的混合与可变参数构造函数
- 具有默认值的单个参数构造函数是否与默认构造函数相同?
- 为什么我们需要创建一个单参数构造函数来使用临时的无名称对象
- 在可变参数构造函数中初始化常量数组
- C++ 显式多参数构造函数歧义
- 零一参数构造函数
- 可变参数构造函数中的 SFINAE
- 当没有显式关键字与单参数构造函数一起使用时,编译器可以发出警告
- 可变参数类模板和可变参数构造函数
- 确保模板参数类型与其可变参数构造函数的类型匹配
- C++默认参数构造函数与内联初始化优先级
- 如何在 c++ 中将包含复制构造函数的类的参数构造函数称为私有?
- 自动存储中没有无参数构造函数的类对象和异常
- 警告:用两个参数构造函数返回对象时,表达结果未使用
- 如何在C++中调用无参数构造函数
- 在 c++ 中具有多个参数构造函数的模板类存在问题
- 可变参数构造函数优先于用户提供的移动构造函数,除非默认
- 如何从可变参数构造函数参数构造任何对象?