首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >数组结构需要无参数构造函数。

数组结构需要无参数构造函数。
EN

Stack Overflow用户
提问于 2014-08-17 16:12:56
回答 1查看 132关注 0票数 0

我已经编写了一个Array结构(是的,我知道它们已经存在于其他地方,但我想创建自己的)。为什么我的代码要求我添加的项有一个无参数的构造函数?

代码语言:javascript
复制
template <typename T>
struct Array {

private:
    unsigned int Capacity;
    unsigned int Count;

public:
    T *Items;

    // ***********/

    Array()
    {
        Count = 0;
        Capacity = 0;
        Items = 0;
    }

    void resize(const unsigned int capacity)
    {
        Capacity = capacity;
        T *x = new T[Capacity];  //*** Error: invalid new-expression on class type SomeStruct ***//
        for (unsigned int i = 0; i < Count; i++)
            x[i] = Items[i];
        delete[] Items;
        Items = x;
    }

    void addItem(const T &item)
    {
        if(Count == Capacity)
            resize();
        Items[Count] = item;
        Count++;
    }

    ~Array() {
        delete[] Items;
    }
};

如果我创建这样的数组..。

代码语言:javascript
复制
Array<SomeStruct> MyStructs;

...and调用resize()像这样..。

代码语言:javascript
复制
MyStructs.resize(10);

...it在显示的行上失败。

我以为我是在调用数组上的新函数,那么为什么要调用一个无参数的构造函数呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-08-17 16:29:02

指令T *x = new T[Capacity];创建T类型的Capacity新对象。T的默认构造函数在这里被调用。这就是为什么您的类T需要一个默认的(“无参数”)构造函数。

编辑:指令Items[Count] = item;需要赋值操作符或复制构造函数。如果两者都不是雪崩的,我想编译器可能会执行一个成员级克隆。

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25351061

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档