c++声明另一个类类型的数组
c++ declare an array that is of type of another class
我有一个类,在这个类中我想有另一个类的数组,声明,有什么建议吗?
但是当我执行以下操作时,我得到了一个错误。
#include "classB.h"
Class classA
{
public:
classA();
int intArray[20];
classB arrayOfClassB[20];
};
我:
错误C2512: 'classB':没有合适的默认构造函数。
我的classB
构造函数接受一个字符串
当您以这种方式定义数组classB arrayOfClassB[20];
时,arrayOfClassB
的每个元素将使用classB
的默认构造函数来构造。由于您在classB
中定义了一个以字符串作为参数的构造函数,编译器将NOT为您生成classB的默认构造函数。在这种情况下,您必须在classB
中定义默认构造函数classB()
,然后错误就会消失。然而,正如其他人所说,使用vector是更好的选择。
如果你想使用一个数组(并且你拥有一个数组的类有一个构造函数,它接受一个字符串,但没有默认构造函数),你必须在构造函数中使用初始化列表初始化它:
class classA
{
public:
classA();
int intArray[20];
classB arrayOfClassB[20];
};
classA::classA() : arrayOfClassB({"", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", "", ""}) { }
必须为每个实例编写实参,这是没有办法的。因此,如果你的数组有20个大,那么在初始化列表中就必须有20个字符串。
使用这样的向量可能会更省力:
class classA
{
public:
classA();
int intArray[20];
vector<classB> arrayOfClassB;
};
classA::classA() : arrayOfClassB(20, classB("")) { }
要初始化arrayOfClassB
数组,必须调用默认构造函数,但是编译器抱怨没有可用的默认构造函数。默认构造函数是不接受实参的构造函数。
正如其他人指出的,您可以使用std::vector<classB>
或提供默认构造函数并稍后初始化数组。
你应该考虑使用vector来达到同样的目的,并允许你创建自定义类的数组。
c++向量您可以始终将数组定义为指针类型并使用malloc
创建
classB **array;
static const int arrayElementLength = 50;
classA()
{
array = (classB **) malloc(sizeof(classB *) * arrayElementLength);
for (int i=0; i<arrayElementLength; i++)
array[i] = NULL; //or construct with something else
}
~classA()
{
if (array)
free(array);
}
相关文章:
- 声明C++具有动态大小的数组类型在 Linux 中工作正常,但不能在 Windows 中工作
- 数组类型 int[n][n] 不可赋值,因为表达式必须具有常量值
- 取消引用结束指针到数组类型的一个
- 结构化绑定初始值设定项表单 { 赋值表达式 } 对于 clang 上的数组类型失败
- 如何在数组类型的模板代码中计算std::size_t
- LLVM 无法将数组类型强制转换为常量数组
- 推荐的方法在不初始化值的情况下使数组类型为 std::unique_ptr?
- 特征:从数组类型中获取标量类型是否记录?
- T D[N] 总是声明数组类型的对象吗?
- 如何在模板中推断数组类型?
- 尝试使用 Array 类的模板构造整数数组时,错误:为什么数组类型"int [5]"不可分配,
- 如何将二维数组类型字符(字符串)作为函数参数传递?
- 如何为所有非数组类型专门化模板?
- 数组类型 (C++) 的初始化
- 我预测char数组类型值只能投射指针类型
- 将数组类型更改为 Int16 会节省存储空间吗?
- 采用通用数组类型的函数
- 数组类型 'int [8]'不可分配
- 数组类型 'float [size]'不可分配
- C++。候选模板被忽略 - 无法将数组类型与自身匹配