[英]How to set size for vector of self-defined object?
我试图在使用矢量之前设置大小,但收到错误信息:
错误c2512:“ EItem:EItem”:没有适当的默认构造函数
// file.h
vector<EItem > *eL;
// file.cpp
eL = new vector<EItem>(100);
我需要在自己定义的对象EItem
什么?
就像您的编译器所说的那样 ,您必须为EItem
类定义一个默认的构造函数:
在.h中:
class EItem {
public:
EItem(); // constructor
// ...
};
在.cpp中:
EItem::EItem() {}
或合而为一(在.h中):
class EItem {
public:
EItem() {} // constructor
// ...
};
这是最低要求。 您可以在类中添加一些参数,并在构造函数中初始化类的某些属性。
在C ++中,默认构造函数很重要,因为在某些情况下会自动调用它们:
- 当声明的对象值没有参数列表时,例如
MyClass x;
或动态分配而没有参数列表,例如new MyClass
或new MyClass();
默认构造函数用于初始化对象- 当声明对象数组时,例如
MyClass x[10];
或动态分配,例如new MyClass [10];
默认构造函数用于初始化所有元素- 当派生类构造函数未在其初始化程序列表中显式调用基类构造函数时,将调用基类的默认构造函数
- 当类构造函数未在其初始值设定项列表中显式调用其对象值字段之一的构造函数时,将调用该字段的类的默认构造函数
- 在标准库中,某些容器在未明确给出值的情况下使用默认构造函数“填充”值(例如:
vector<MyClass>(10);
),用10个元素初始化矢量,并用默认值填充-我们类型的构造值。在上述情况下,如果该类没有默认构造函数,则会出错。
这个线程上也有一些很好的答案: 什么时候我们需要一个默认的构造函数?
编译器为您指明了正确的方向:您的EItem类没有默认的构造函数 -因此您应该提供一个。
从这里引用:
如果不声明默认构造函数然后实例化我们的类,会发生什么? 答案是C ++会为我们的类实例分配空间,但不会初始化类的成员(类似于声明int,double或其他基本数据类型时发生的情况)。
在不知道您的EItem
类的定义的情况下,实现默认构造函数的一个最小示例是:
class EItem {
...
public:
...
//this is a minimal default constructor
EItem() {
...
//initialize and set the values for any data members of the class here
...
}
...
}
有关此内容的更多阅读,更重要的是为什么在课堂上总是要提供一个,请参阅以下内容:
向量需要知道EItem占用的大小,因为向量使用数组。 如果EItem类中不存在其他构造函数,则将提供默认构造函数。 确保您已定义类,并且构造函数是公共的。
class EItem
{
public:
EItem();
};
您的类需要具有不带参数的默认构造函数,才能使用这样的向量。 如果没有默认的构造函数,则需要创建指向类的指针向量。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.