在项目中迭代枚举 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);}
问题是在我的项目中,有很多cpp
和hpp
文件是分开编译的。编译器似乎需要直接访问 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*
、begin
和 end
。
在您的 4 个函数前添加 inline
关键字将允许它们在 header 中定义,而不会出现多重定义错误。例如:
inline COLOR operator*(COLOR c) {return c;}
或者您可以只在 .h 文件中包含原型并在 1 个 .cpp 文件中定义函数。
我正在关注 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
文件中实现,我将面临错误:
compiler warning: inline function ‘Color operator++(Color&)’ used but never defined
linker error: undefined reference to `operator++(instruction_type&)'
如果我直接在hpp
中定义它,我将面临另一个错误
multiple definition of ...
对于链接器中的 operator*
、begin
和 end
。
在您的 4 个函数前添加 inline
关键字将允许它们在 header 中定义,而不会出现多重定义错误。例如:
inline COLOR operator*(COLOR c) {return c;}
或者您可以只在 .h 文件中包含原型并在 1 个 .cpp 文件中定义函数。