迭代项目中的枚举类

时间:2015-09-06 03:02:58

标签: c++ c++11 iterator code-separation

我正在关注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文件中实施,我将面临错误:

  

编译器警告:内联函数'Color operator ++(Color&)'使用但从未定义

     

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

的引用

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

  

......的多重定义。

表示链接器中的operator*beginend

1 个答案:

答案 0 :(得分:2)

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

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

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