我有一个班级,在这堂课中,我想要一个另一个班级的数组,声明,有关如何做的任何建议吗?
但是,当我执行以下操作时,我收到错误。
#include "classB.h"
Class classA
{
public:
classA();
int intArray[20];
classB arrayOfClassB[20];
};
我明白了:
错误C2512:'classB':没有合适的默认构造函数。
我的classB
构造函数接受一个字符串。
答案 0 :(得分:3)
以这种方式classB arrayOfClassB[20];
定义数组时,arrayOfClassB
的每个元素都将使用classB
的默认构造函数构造。由于您已在classB
中定义了一个构造函数,该构造函数将字符串作为参数,因此编译器将 NOT 为您生成classB的默认构造函数。在这种情况下,您必须在classB()
中定义默认构造函数classB
,然后错误就消失了。然而,正如其他人所说,使用矢量是一个更好的选择。
答案 1 :(得分:2)
如果要使用数组(并且您拥有数组的类具有接受字符串但没有默认构造函数的构造函数),则必须使用初始化列表在构造函数中初始化它:
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("")) { }
答案 2 :(得分:1)
要初始化arrayOfClassB
数组,必须调用默认构造函数,但编译器正在抱怨,因为没有默认构造函数可用。默认构造函数是不带参数的构造函数。
正如其他人所指出的那样,您可以使用std::vector<classB>
或提供默认构造函数并稍后初始化该数组。
答案 3 :(得分:0)
你应该考虑使用矢量来实现同样目的,并让你创建自定义类的数组。
答案 4 :(得分:-1)
您始终可以将数组定义为指针类型,并使用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);
}