Что нужно поправить в конструкторе, ошибка: отсутствуют экземпляры конструктора Image::Pixel::Pixel , соответствующие списку
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г студия
Ответы (2 шт):
У вас нет конструктора по умолчанию. Либо его сделайте в классе 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;
}
Подправить? Дать значения по умолчанию, например.
Типа,
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){}