如何设置自定义对象的矢量大小
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
类定义一个默认构造函数:
in.h:
class EItem {
public:
EItem(); // constructor
// ...
};
in.cpp:
EItem::EItem() {}
或一体化(in.h):
class EItem {
public:
EItem() {} // constructor
// ...
};
这是最低限度的。您可以向类添加一些参数,并在构造函数中初始化类的一些属性。
在C++中,默认构造函数很重要,因为它们在某些情况下会自动调用:
- 当对象值声明时没有参数列表(例如
MyClass x;
),或者动态分配时没有参数表(例如new MyClass
或new 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
您的类需要有一个不带参数的默认构造函数,才能使用这样的向量。如果你不能有一个默认的构造函数,那么你需要制作一个指向你的类的指针向量。
相关文章:
- 自定义对象的dlib序列化在gcc中失败
- 如何将带有自定义对象的容器从C++传递到QML
- 将 exprtk 与自定义类的对象一起使用
- 将 RTOS 队列对象封装在仅具有静态分配的 IQueue 自定义接口中
- 如何实现自定义匹配器以检查 Catch2 中的对象相等性
- 如何使用Q_PROPERTY公开自定义对象列表
- Qt5 远程对象 + 自定义类型,但不在 POD 中
- 从自定义类获取对象向量中的 max 元素
- 如何将来自 Boost.Python 的map_indexing_suite与自定义而不是标准对象一起使用?
- 如何在自定义对象的<<运算符中添加自定义前缀
- 如何使用 STL 排序对具有模板专用化的自定义类对象进行排序?
- 如何从 cpp 中的函数返回自定义类对象?
- 如何为自定义模板对象创建专门的函数模板
- 带有自定义deleter的std::unique_ptr对象的大小(一个由ref捕获的lambda)
- 基于3个对象的自定义排序
- 如何键入用于const对象的自定义io操纵器
- 指向临时对象的自定义迭代器(延迟加载)
- 将自定义对象作为参数从目标 C 传递到 C++
- 从 Arduino 中的自定义C++库构造对象时出错
- 从链表访问对象(自定义实现)