繁体   English   中英

迭代项目中的枚举类

[英]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);}

问题是在我的项目中,有很多单独编译的cpphpp文件。 似乎编译器需要直接访问operator++实现。 如果我在hpp声明然后在cpp文件中实现,我将面临错误:

编译器警告:使用内联函数“颜色运算符++(颜色&)”但从未定义

链接器错误:未定义对`operator++(instruction_type&)'的引用

如果我直接在hpp定义它,我将面临另一个错误

...的多重定义

对于operator*beginend在链接器中。

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM