c++ - vector 无法初始化

标签 c++ pointers vector

我正在尝试初始化自定义类型的 vector dataCard:

vector<dataCard> dataSet;
dataSet.reserve(200);

但是编译器不允许我这样做,指示第二行出现错误(我尝试为容器保留空间):

required from here

但是当我将声明更改为以下内容时

vector<dataCard*> dataSet;

它开始工作。

编译器不允许我按原样使用我的类型,但允许我使用指向该类型的指针,这可能是什么原因?我实际上需要一个对象 vector ,而不是指向它们的指针。

编辑

dataCard的头文件

#include <card.h>


class dataCard {
    char* name; // name according to the filename
    char Class; // Classes: 2, 3, 4, 5, 6, 7, 8, 9, T, J, Q, K, A
    double distanceToQuery;
public:
    void resetDistance();
    int numBlackTotal (bitmap* bmp);
    bitmap image;
    int numOfBlackPixels;
    char* getName();
    void setName(char* n);
    void setClass (char* c);
    char* getClass();
    void setDistance(double distance);
    double getDistance ();
    dataCard(const char* fname);
    dataCard();
    virtual ~dataCard();
};

这是来自编译器的错误消息

/usr/include/c++/4.7/bits/stl_uninitialized.h:77:3:   required from ‘static _ForwardIterator std::__uninitialized_copy<_TrivialValueTypes>::__uninit_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = dataCard*; _ForwardIterator = dataCard*; bool _TrivialValueTypes = false]’
/usr/include/c++/4.7/bits/stl_uninitialized.h:119:41:   required from ‘_ForwardIterator std::uninitialized_copy(_InputIterator, _InputIterator, _ForwardIterator) [with _InputIterator = dataCard*; _ForwardIterator = dataCard*]’
/usr/include/c++/4.7/bits/stl_uninitialized.h:260:63:   required from ‘_ForwardIterator std::__uninitialized_copy_a(_InputIterator, _InputIterator, _ForwardIterator, std::allocator<_Tp>&) [with _InputIterator = dataCard*; _ForwardIterator = dataCard*; _Tp = dataCard]’
/usr/include/c++/4.7/bits/stl_vector.h:1112:8:   required from ‘std::vector<_Tp, _Alloc>::pointer std::vector<_Tp, _Alloc>::_M_allocate_and_copy(std::vector<_Tp, _Alloc>::size_type, _ForwardIterator, _ForwardIterator) [with _ForwardIterator = dataCard*; _Tp = dataCard; _Alloc = std::allocator<dataCard>; std::vector<_Tp, _Alloc>::pointer = dataCard*; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’
/usr/include/c++/4.7/bits/vector.tcc:76:70:   required from ‘void std::vector<_Tp, _Alloc>::reserve(std::vector<_Tp, _Alloc>::size_type) [with _Tp = dataCard; _Alloc = std::allocator<dataCard>; std::vector<_Tp, _Alloc>::size_type = long unsigned int]’
/home/ppsadm01/Documents/vgv/src/main.cc:145:22:   required from here
/usr/include/c++/4.7/bits/stl_construct.h:85:7: error: no matching function for call to ‘dataCard::dataCard(const dataCard&)’

最佳答案

正如错误消息所示,您需要实现复制构造函数 dataCard::dataCard(const dataCard&) 。您需要它,因为例如 vector<dataCard>::push_back()将复制dataCard实例。

当您编写复制构造函数时,请注意以正确的方式复制所有成员变量。因此,一个示例实现可能是

dataCard::dataCard(const dataCard &rhs)
{
    strcpy(name, rhs.name);
    Class = rhs.Class;
    distanceToQuery = rhs.distanceToQuery;
    image = rhs.image; // make sure that this is OK!
}

关于c++ - vector 无法初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26888746/

相关文章:

C++ vector 实现错误

c++ - 创建更好的哈希函数

c++ - 使用指针搜索值

c++ - 将 vector vector 结构的 vector 写入二进制文件

c - 如何在C程序中打印指针的地址值?

c - 使用 malloc 为 C 指针赋值,无需变量初始化

c++ - 按类属性(例如名称)搜索类对象的 std::vector

c++ - 编译器对 new 返回值的行为

c++ - 保存和加载 FlannBasedMatcher

c++ - C++ 中灵活的类行为