Что не так?
![](https://forum.arduino.ru/user_avatar/forum.arduino.ru/boom/48/349_2.png)
Что не так
дак ты нигде не проверяешь выход за границы перечисления.
А, ну это вопрос другой… ))
ну и старайся вместо тупого приведения типов использовать static_cast<>, тогда компилятор явно видит что во что ты хочешь преобразовать и выдаст ошибку или предупреждение, что это невозможно или приведет к потере данных. В случае же тупого приведения, компилятор приведет, канеш, как ему Б на душу положит, даже неприводимое, но принесёт ли это тебе радость, када ты будешь мудохацца, не понимая где ты ошыпса.
![](https://forum.arduino.ru/user_avatar/forum.arduino.ru/boom/48/349_2.png)
Что не так?
error: no match for 'operator+' (operand types are 'ActionList' and 'int')
AL = ActionList(AL + 1);
^
Тогда уж вот так:
AL = ActionList((int)AL + 1);
но это кривовато, почему - Дед выше написал
Добавка.
Кроме того, это у тебя постинкремент, а пост инкремент должен возвращать ссылку на старое значение, чего у тебя нет.
![](https://forum.arduino.ru/user_avatar/forum.arduino.ru/b707/48/354_2.png)
AL = ActionList((int)AL + 1);
тока не int а uint8_t
![](https://forum.arduino.ru/user_avatar/forum.arduino.ru/b707/48/354_2.png)
пост инкремент должен возвращать ссылку на старое значение
про это я тоже в #25 писал
![](https://forum.arduino.ru/letter_avatar_proxy/v4/letter/a/f4b2a3/48.png)
тока не int а uint8_t
ну как бы можно поспорить
При определении своего енума ты не указал явно тип элемента, поэтому по умолчанию он инт будет… Поэтому, имхо, не вполне логично, что ты его в uint8_t кастишь.
![](https://forum.arduino.ru/letter_avatar_proxy/v4/letter/a/f4b2a3/48.png)
enum class TAction { Zero = 0x00, One = 0x01, Two = 0x02, Three = 0x03 };
канешна же я ошибся. Правильно так
enum class TAction : uint8_t { Zero = 0x00, One = 0x01, Two = 0x02, Three = 0x03 };
Спасиба, счас поправлю
![](https://forum.arduino.ru/user_avatar/forum.arduino.ru/b707/48/354_2.png)
у тебя постинкремент, а пост инкремент должен возвращать ссылку на старое значение
Это же должен делать преинкремент?
uint8_t i = 0;
++i;
Преинкремент увеличивает на один и возвращает результат. А пост-инкремент инкрементирует, но возвращает прежнее значение. Это значит, что ты перед прибавлением единицы должен сохранить ссылку на прежнее значение енума во временной переменной, потом инкрементнуть основной енум и вернуть ссылку на временный.
Как-то так(определение а++ через ++а)
TAction operator++(TAction& a, int)
{
TAction tmp(a);
++a;
return tmp;
}
(исходим из того что опратор ++а определен ранее)
Кстати, пример выше является ответом на вопрос: “почему лучше пользоваться прединкрементом?”. Потому что постинкремент засирает память копиями.