首页 > 解决方案 > 为什么我得到一个“没有构造函数实例匹配 MyArray::MyArray”参数列表?

问题描述

#include <iostream>
#include <initializer_list>

class MyArray {
    int* array;
public:
    MyArray(){}
    MyArray(std::initializer_list<int>& v) {
        array = new int[v.size()];
        int index = 0;
        for (auto element : v) {
            array[index] = element;
            index++;
        }
    }

    ~MyArray()
    {
        delete[] array;
    }
};

int main() {
    MyArray object{ 2,4,2,2 };
}

这是我第一次使用 std::initializer 进行对象列表初始化。我创建了一个使用 MyArray 构造函数初始化的数组。我不知道我哪里错了。我创建了一个与参数列表匹配的对象,即一个采用初始化列表的构造函数。

标签: c++

解决方案


我创建了一个与参数列表匹配的对象,即一个采用初始化列表的构造函数。

你没有;不完全的。

您创建了一个构造函数,该构造函数引用std::initializer_list.

但是以这种方式创建的 [可能] 是一个临时的,不能绑定到这样的引用。

通常,您只想std::initializer_list按价值取 s 。即:删除&.

在cppreference 的文章中std::initializer_list有一些例子。


推荐阅读