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

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

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 файл, я столкнусь с ошибкой:

предупреждение компилятора: встроенная функция 'Color operator++(Color&)' используется, но никогда не определяется

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

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

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

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

1 ответ

Решение

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

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

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

Другие вопросы по тегам