c++声明另一个类类型的数组



我有一个类,在这个类中我想有另一个类的数组,声明,有什么建议吗?

但是当我执行以下操作时,我得到了一个错误。

 #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);
}

最新更新