Конструктор с параметрами массива - PullRequest
1 голос
/ 05 июля 2019

Я хочу создать конструктор с массивом и размером массива, чтобы я мог вызывать объект, используя это: Multime m1 = Multime({1, 2, 3}, 3); Или я должен использовать std :: vector вместо?

class Multime
{
private:
    int elemente[100];
    int size;
public:
    Multime(){}
    Multime(int el[50], int s){
        this -> size = s;
        for(int i = 0; i < this -> size; i++)
            this -> elemente[i] = el[i];
    }
};

int main()
{
    Multime m1 = Multime({1, 2, 3}, 3);
    return 0;
}

И я получаю Нет подходящего конструктора для инициализации 'Multime'

Ответы [ 2 ]

2 голосов
/ 05 июля 2019

Или вместо этого использовать std :: vector?

Это отличная идея.

class Multime
{
private:
    std::vector<int> elemente;
public:
    Multime() {}
    Multime(std::vector<int> el) : elemente(std::move(el)) {}
};

int main()
{
    Multime m1 = Multime({ 1, 2, 3 });
    return 0;
}
0 голосов
/ 05 июля 2019

Если вы хотите, чтобы ваш класс мог содержать различное количество элементов (определено во время компиляции), вы можете попробовать:

#include <array>

template <size_t _Size>
class Multime
{
private:
    int elemente[_Size];
public:
    Multime() {}

    Multime(const std::array<int, _Size>& p_elements)
    {
        for (int i = 0; i < _Size; ++i)
            this->elemente[i] = p_elements[i];
    }
};

int main()
{
    Multime<3> m1({1, 2, 3});
    return 0;
}

Вы также можете напрямую сохранить массив std :::класс, поэтому конструкция чище

#include <array>

template <size_t _Size>
class Multime
{
private:
    std::array<int, _Size> elemente;
public:
    Multime() {}
    Multime(const std::array<int, _Size>& p_elements) : elemente(p_elements) {}
};

int main()
{
    Multime<3> m1({1, 2, 3});
    return 0;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...