[英]Iteration over enum class in a project
我正在关注这个问题以迭代枚举。
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
文件中实现,我将面临错误:
编译器警告:使用内联函数“颜色运算符++(颜色&)”但从未定义
链接器错误:未定义对`operator++(instruction_type&)'的引用
如果我直接在hpp
定义它,我将面临另一个错误
...的多重定义
对于operator*
、 begin
和end
在链接器中。
在您的 4 个函数前面添加inline
关键字将允许它们在标题中定义而不会出现多个定义错误。 例如:
inline COLOR operator*(COLOR c) {return c;}
或者,您可以仅在 .h 文件中包含原型并在 1 个 .cpp 文件中定义函数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.