我正在关注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);}
问题是在我的项目中,有许多cpp
和hpp
文件是单独编译的。编译器似乎需要直接访问operator++
的实现。如果我在hpp
中声明然后在cpp
文件中实施,我将面临错误:
编译器警告:内联函数'Color operator ++(Color&)'使用但从未定义
链接器错误:未定义对`operator ++(instruction_type&)'
的引用
如果我直接在hpp
中定义,我将面临另一个错误
......的多重定义。
表示链接器中的operator*
,begin
和end
。
答案 0 :(得分:2)
在4个函数前添加inline
关键字将允许在标题中定义它们而不会出现多个定义错误。例如:
inline COLOR operator*(COLOR c) {return c;}
或者您可以只在.h文件中包含原型并在1 .cpp文件中定义函数。