如何设置自定义对象的矢量大小

How to set size for vector of self-defined object?

本文关键字:对象 自定义 何设置 设置      更新时间:2023-10-16

我试图在使用矢量之前设置大小,但得到了错误信息:

错误c2512:"EItem:EItem":没有合适的默认构造函数可用

// file.h
vector<EItem > *eL;
// file.cpp
eL = new vector<EItem>(100);

我需要在自己定义的对象EItem中提供什么?

正如编译器所说的,您必须为EItem类定义一个默认构造函数:

in.h:

class EItem {
public:
    EItem(); // constructor
    // ...
};

in.cpp:

EItem::EItem() {}

或一体化(in.h):

class EItem {
public:
    EItem() {} // constructor
    // ...
};

这是最低限度的。您可以向类添加一些参数,并在构造函数中初始化类的一些属性。

在C++中,默认构造函数很重要,因为它们在某些情况下会自动调用:

  • 当对象值声明时没有参数列表(例如MyClass x;),或者动态分配时没有参数表(例如new MyClassnew MyClass();),则使用默认构造函数初始化对象
  • 当对象数组被声明(例如MyClass x[10];)或动态分配(例如new MyClass [10];)时,默认构造函数用于初始化所有元素
  • 当派生类构造函数未显式调用其初始值设定项列表中的基类构造函数时,将调用基类的默认构造函数
  • 当类构造函数没有显式调用其初始值设定项列表中某个对象值字段的构造函数时,将调用该字段类的默认构造函数
  • 在标准库中,当未显式给定值时(例如:vector<MyClass>(10);),某些容器使用默认构造函数"填充"值,用10个元素初始化向量,这些元素用我们类型的默认构造值填充

在上述情况下,如果类没有默认构造函数,则是一个错误

这个线程上也有一些很好的答案:我们什么时候需要一个默认的构造函数?

向量需要知道EItem占用的大小,因为向量使用数组。如果EItem类中不存在其他构造函数,则将提供默认构造函数。请确保已经定义了类,并且构造函数是公共的。

class EItem
{
 public:
   EItem();
};

编译器为您指明了正确的方向:您的类EItem没有默认构造函数,因此您应该提供一个。

引用自:

如果我们不声明默认构造函数,然后实例化我们的类?答案是C++将为我们的类实例,但不会初始化该类的成员(类似于当您声明int、double或other基本数据类型)。

在不知道EItem类的定义的情况下,实现默认构造函数的一个最小示例是:

class EItem {
...
public:
    ...
    //this is a minimal default constructor
    EItem() {
        ...
        //initialize and set the values for any data members of the class here
        ...
    }
...
}

有关这方面的更多阅读,以及更重要的为什么你应该在课堂上提供一个,请参阅以下内容:

http://en.wikipedia.org/wiki/Default_constructor

您的类需要有一个不带参数的默认构造函数,才能使用这样的向量。如果你不能有一个默认的构造函数,那么你需要制作一个指向你的类的指针向量。