Я использую конечный автомат для изучения C++, и я хочу предоставить перегруженный operator <<
, чтобы вернуть соответствующую строку вместо int. Извините, направьте комментарий ...Как перегрузить << правильно из отображаемого перечисления?
#ifndef STATEMACHINE_H
#define STATEMACHINE_H
#include <map>
#include <string>
namespace statemachine{
using namespace std;
enum State { ON, RESTING, SLEEPING, LOCKED, OFF };
struct StateMap : map<unsigned int, string>
{
StateMap()
{
this->operator[](ON) = "ON";
this->operator[](RESTING) = "RESTING";
this->operator[](SLEEPING) = "SLEEPING";
this->operator[](LOCKED) = "LOCKED";
this->operator[](OFF) = "OFF";
};
~StateMap(){};
};
struct Machine {
Machine(State state) : statemap() {
m_currentstate = state;
}
// trying to overload the operator -- :(
// Error 1 error C2676: binary '<<' : 'std::ostream' does not define this operator or a
// conversion to a type acceptable to the predefined operator **file** 38 1 statemachine_01
ostream& operator << (ostream& stream){
stream << statemap[m_currentstate];
return stream;
}
State state() const {
return m_currentstate;
}
void set_state(State state){
m_currentstate = state;
}
private:
State m_currentstate;
StateMap statemap;
};
}
#endif
Что я делаю неправильно?
@OliCharlesworth: Я посмотрел на этот вопрос, и это не совсем то же самое - мы получили две разные ошибки компиляции. – IAbstract
Но этот вопрос (вместе с ответами) показывает фрагменты кода о том, как правильно перегрузить 'operator <<'. –
@OliCharlesworth: Я читал дальше и узнал, что работает (http://stackoverflow.com/a/9230853/210709). – IAbstract