Что нужно поправить в конструкторе, ошибка: отсутствуют экземпляры конструктора Image::Pixel::Pixel , соответствующие списку

Рейтинг: 0Ответов: 2Опубликовано: 11.01.2023
class Image
{
private:
    class Pixel
    {
    private:
        int red = 0;
        int green = 0;
        int blue = 0;

    public:
        Pixel(int red, int green, int blue) 
        {
            this->red = red;
            this->green = green;
            this->blue = blue;
        }

        int* GetPXInfo()
        {
            int arr[3] = { red, green, blue };
            return arr;
        }
    };

    Pixel pixels[5] 
    {
        Pixel(10, 10, 10),
        Pixel(12, 12, 12)
    };
};

У симплкода все работает, но у него кажется 2017г студия

Ответы

▲ 3

Подправить? Дать значения по умолчанию, например.

Типа,

public:
    Pixel(int red = 0, int green = 0, int blue = 0)
    {
        this->red = red;

У вас для массива из 5 элементов для трех значения не указаны; для них должен быть вызван конструктор по умолчанию (которого у вас нет)...

Еще у вас неприятность: в

    int* GetPXInfo()
    {
        int arr[3] = { red, green, blue };
        return arr;
    }

вы возвращаете указатель на локальный массив, что, очень мягко говоря, не есть хорошо...

Ну и сам конструктор я бы писал через инициализацию, а не через присваивание:

    Pixel(int red = 0, int green = 0, int blue = 0):red(red),green(green),blue(blue){}
▲ 0

У вас нет конструктора по умолчанию. Либо его сделайте в классе Pixel, либо в массиве сделайте не 2 объекта, а 5.

    Pixel pixels[5] 
    {
        Pixel(10, 10, 10),
        Pixel(12, 12, 12),
        Pixel(10, 10, 10),
        Pixel(12, 12, 12),
        Pixel(12, 12, 12)
    };

И ещё косяк - вы возвращаете указатель на локальный объект. Т.е. после завершения функции он будет указывать в никуда.

 int* GetPXInfo()
{
    int arr[3] = { red, green, blue };
    return arr;
}