我有一个类,在这个类中我想有另一个类的数组,声明,有什么建议吗?
但是当我执行以下操作时,我得到了一个错误。
#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);
}