重载运算符<<用于成员函数中类的枚举成员
我如何超载<<作为类成员的枚举的运算符。具体来说,我有以下代码:
#include <iostream>
using namespace std;
namespace foo {
class bar {
public:
enum a { b, c, d};
static void print() {
cout << b << endl;
}
};
ostream& operator<< (ostream& os, bar::a var) {
switch (var) {
case bar::b:
return os << "b";
case bar::c:
return os << "c";
case bar::d:
return os << "d";
}
return os;
}
}
int main() {
foo::bar::print();
return 0;
}
如何让打印函数打印“b”而不是“1”?
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(3)
这是一个简单的解决方案:
[编辑] 正如 aschepler 先前所述,您只需确保
operator<<(ostream &, bar::a)
在栏::打印
。Here is a simple solution :
[EDIT] As previously stated by aschepler, you only need to ensure that
operator<<(ostream &, bar::a)
is visible before the definition ofbar::print
.问题是您使用
cout << bar::
出现在您的ostream<<之前 bar::
重载已声明,因此它不会调用您的重载。将定义下移。编辑:我在输入此内容时看到其他人发布了该内容。
The problem is that your use of
cout << bar::
comes before yourostream<< bar::
overload is declared, so it's not calling your overload. Move the definition down.EDIT: I see some else posted that while I was typing this.