2

我正在关注这个问题以迭代枚举。

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++. 如果我在 a 中声明hpp然后在cpp文件中实现,我将面临错误:

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

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

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

多重定义...

对于operator*, begin, 和end在链接器中。

4

1 回答 1

2

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

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

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

于 2015-09-06T04:04:25.563 回答