具有自定义构造函数 (C++) 的类型的动态数组分配

Dynamic Array allocation of a type with a custom constructor (C++)

本文关键字:类型 动态 数组 分配 C++ 自定义 构造函数      更新时间:2023-10-16

我有以下类和结构(为简单起见进行了剥离(

A.H

class A {
B *myArray;
}

a.cc

A::A() {
myArray = new B[1];
}

B.H

struct B {
int number;
}

b.cc

B::B(int n): number(n)  {
}

如您所见,类B只有接受整数的构造函数,因此当我这样做时myArray = new B[1]它会抛出no matching constructor for initialization of 'B[1]'.

我该如何解决这个问题?我尝试使用指针数组而不是B类型的数组,但由于将信息输入程序的方式,它不起作用。

无法B添加新的构造函数。我只能添加私有变量和方法。我只能使用以下库:iostream,fstream,sstream,iomanip,string和utility。

由于您为B定义了构造函数,因此不再为您定义默认构造函数。

当你这样做myArray = new B[1];你试图在调用B的默认构造函数时构建一个大小为 1 的数组,但不存在这样的构造函数!

可以通过创建自己的默认构造函数B或调用分配时创建的构造函数来解决此问题。后者可以通过以下方式完成:

myArray = new B[1]{5};

在这里看到它的工作:IDEone。

问题是您没有要B的默认构造函数。您必须为唯一的参数提供一个或至少一个默认值(构造函数也应标记为explicit

另一种选择是使用vector.无论如何,您应该避免任何明确的delete,因此对于您所拥有的内容来说,这是一个更好的选择。