Я следую этот вопрос для перебора по перечислению.
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
в компоновщике.
Добавление inline
Ключевое слово перед вашими 4 функциями позволит их определить в заголовке без множественных ошибок определения. Например:
inline COLOR operator*(COLOR c) {return c;}
Или вы можете включить только прототип в .h файл и определить функции в 1 .cpp файле.