在C++的枚举中重载输出运算符

Adr*_*ian 3 c++

它可以使枚举中的输出操作符过载吗?我遇到了各种错误(如果我使用类,我没有得到任何错误):

   ../src/oop.cpp:18:2: error: expected identifier before 'friend'
    ../src/oop.cpp:18:2: error: expected '}' before 'friend'
    ../src/oop.cpp:18:2: error: 'friend' used outside of class
    ../src/oop.cpp:18:16: error: expected initializer before '&' token
    ../src/oop.cpp:22:1: error: expected declaration before '}' token
Run Code Online (Sandbox Code Playgroud)

我要实现这样的东西(java代码):

public enum Type { 

  ACOUSTIC, ELECTRIC;

  public String toString() {
    switch(this) {
      case ACOUSTIC: return "acoustic";
      case ELECTRIC: return "electric";
      default:       return "unspecified";
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

谢谢.

编辑:

enum Type {
    //ACOUSTIC, ELECTRIC;
    inline std::ostream& operator << (std::ostream& os, Type t) // error here
    {

    }
};
Run Code Online (Sandbox Code Playgroud)

Eri*_*rik 5

enum MyEnum {
  foo, bar
};

inline std::ostream & operator<<(std::ostream & Str, MyEnum V) {
  switch (V) {
  case foo: return Str << "foo";
  case bar: return Str << "bar";
  default: return Str << (int) V;
}
Run Code Online (Sandbox Code Playgroud)