我正在关注这个问题以迭代枚举。
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++
. 如果我在 a 中声明hpp
然后在cpp
文件中实现,我将面临错误:
编译器警告:使用但从未定义的内联函数“Color operator++(Color&)”
链接器错误:未定义对 `operator++(instruction_type&)' 的引用
如果我直接在中定义它hpp
,我将面临另一个错误
多重定义...
对于operator*
, begin
, 和end
在链接器中。