在项目中迭代枚举 class

Iteration over enum class in a project

我正在关注 this question 迭代枚举。

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);}

问题是在我的项目中,有很多cpphpp文件是分开编译的。编译器似乎需要直接访问 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*beginend

在您的 4 个函数前添加 inline 关键字将允许它们在 header 中定义,而不会出现多重定义错误。例如:

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

或者您可以只在 .h 文件中包含原型并在 1 个 .cpp 文件中定义函数。