// menu.h
struct MenuParameter {
String textBefore;
unsigned int &value;
String (&valueFormatter)(unsigned int value);
String textAfter;
};
// menu.cpp
void MenuParameterController::add(
String textBefore,
unsigned int &value,
String (&valueFormatter)(unsigned int value),
String textAfter
) {
items[itemsCount] = {textBefore, value, valueFormatter, textAfter};
}
Лог компилятора
use of deleted function 'MenuParameter& MenuParameter::operator=(MenuParameter&&)'
'MenuParameter& MenuParameter::operator=(MenuParameter&&)' is implicitly deleted because the default definition would be ill-formed: struct MenuParameter {
Почему это возникает и как избежать?
Причина состоит в том, что структура имеет в качестве члена данных объект ссылочного типа
unsigned int &value;
Объекты ссылочного типа должны инициализироваться при создании объекта класса или структуры. Вы не можете переназначить ссылку. Поэтому неявный копирующий оператор присваивания объявляется компилятором как удаленный.
Из стандарта C++ (12.8 Copying and moving class object)
23 A defaulted copy/move assignment operator for class X is defined as deleted if X has:
...
Вам следует в явном виде определить копирующий оператор присваивания, если это возможно.
В вашем случае вы могли бы вместо ссылки объявить указатель. Например,
struct MenuParameter {
String textBefore;
unsigned int *value;
^^^^^^
String (&valueFormatter)(unsigned int value);
String textAfter;
};
и соответствующим образом определить копирующий оператор присваивания.
Допустим есть два обычных одномерных массива и есть функция принимающая один массивНеобходимо объединить эти два массива в один и передать...
link: default null, но значение notNULLСтруктура таблиц, значение по умолчанию