具有自定义构造函数 (C++) 的类型的动态数组分配
Dynamic Array allocation of a type with a custom constructor (C++)
我有以下类和结构(为简单起见进行了剥离(
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
,因此对于您所拥有的内容来说,这是一个更好的选择。
相关文章:
- 如果C++类在类方法中具有动态分配,但没有构造函数/析构函数或任何非静态成员,那么它仍然是POD类型吗
- 如何为 c++ 的不同变量类型的结构元素创建动态数组?
- 当我使用自定义类型创建动态数组时,即使使用字符串,它似乎也不起作用
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 具有自定义构造函数 (C++) 的类型的动态数组分配
- 创建类类型的动态分配数组,其中类不得具有默认构造函数
- 非类类型表达式的静态类型与动态类型之间的差异
- 指针类型类成员的动态强制转换的恒定性是什么?
- 如何使用类型级函数动态创建静态类型?
- C++ 将抽象类型的动态分配对象传递给函数并存储在向量中
- 复合类型的动态数组
- 根据动态选择类型C++模板使用情况
- 类型测试对象的动态数组的这两个声明之间的区别?
- 如何在一个属性中动态存储基元类型
- 动态调用具有不同返回类型的相同命名函数
- 如何在 Visual Studio 2015 中将项目的配置类型动态更改为静态库?
- C++基于子类型动态强制转换结构
- 基元类型动态分配数组的析构函数
- 如何根据要写入的数据类型动态选择文件句柄
- 如何从另一个实例的类型动态实例化新实例?C++