Итерация по перечисляемому классу в проекте

Я следую этот вопрос для перебора по перечислению.

enum class COLOR
{
Blue,
Red,
Green,
Purple,
First=Blue,
Last=Purple
};

COLOR operator++( COLOR& x ) { return x = (COLOR)(((int)(x) + 1)); }

COLOR operator*(COLOR c) {return c;}

COLOR begin(COLOR r) {return COLOR::First;}
// end iterator needs to return one past the end!
COLOR end(COLOR r)   {return COLOR(int(COLOR::Last) + 1);}

Проблема в том, что в моем проекте есть много cpp а также hpp файлы, которые составляются отдельно. Кажется, компилятор должен иметь прямой доступ к реализации operator++, Если я объявлю в hpp а затем внедрить в cpp файл, я столкнусь с ошибкой:

Предупреждение компилятора: встроенная функция ‘Оператор цвета ++ (Цвет&) ‘Используется, но никогда не определяется

ошибка компоновщика: неопределенная ссылка на оператор `++ (инструкция_типа)&)»

Если я определю это непосредственно в hppЯ столкнусь с другой ошибкой

множественное определение …

за operator*, begin, а также end в компоновщике.

2

Решение

Добавление inline Ключевое слово перед вашими 4 функциями позволит их определить в заголовке без множественных ошибок определения. Например:

inline COLOR operator*(COLOR c) {return c;}

Или вы можете включить только прототип в .h файл и определить функции в 1 .cpp файле.

2

Другие решения