Я следую за this question для повторения перечисления.Итерация над классом enum в проекте
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
файле, я буду сталкиваться с ошибкой:
compiler warning: inline function ‘Color operator++(Color&)’ used but never defined
linker error: undefined reference to `operator++(instruction_type&)'
Если я определяю его непосредственно в hpp
, я столкнусь с другой ошибкой
multiple definition of ...
для operator*
, begin
, и end
в компоновщике.