Quiero usar mi clase Test con boost::lexical_cast
. He sobrecargado operator<<
y operator>>
pero me da error de tiempo de ejecución.
Aquí está mi código:
C++ Uso de clases con boost :: lexical_cast
#include <iostream>
#include <boost/lexical_cast.hpp>
using namespace std;
class Test {
int a, b;
public:
Test() { }
Test(const Test &test) {
a = test.a;
b = test.b;
}
~Test() { }
void print() {
cout << "A = " << a << endl;
cout << "B = " << b << endl;
}
friend istream& operator>> (istream &input, Test &test) {
input >> test.a >> test.b;
return input;
}
friend ostream& operator<< (ostream &output, const Test &test) {
output << test.a << test.b;
return output;
}
};
int main() {
try {
Test test = boost::lexical_cast<Test>("10 2");
} catch(std::exception &e) {
cout << e.what() << endl;
}
return 0;
}
Salida:
bad lexical cast: source type value could not be interpreted as target
Por cierto estoy usando Visual Studio 2010 pero he intentado Fedora 16 con g ++ y obtuvo el mismo resultado!
Interesante pregunta, no puede encontrar la verdadera respuesta hasta el momento. Parece que algo está mal con la transmisión: 1. porque cuando ingresa al operador de transmisión, solo se actualiza, b no lo es. Agregué otra cadena para verificar si el espacio fue mal interpretado, pero incluso la cadena no se actualizó. 2. Se lanza cuando sales del operador, comprueba algo que no entiendo y luego decide tirar. – Klaim
Probablemente deberías usar las versiones predeterminadas del constructor predeterminado, el constructor de copias y el destructor, en lugar de definirlas tú mismo: el compilador las generará (y lo hará de forma más correcta en el caso de que copies el constructor (ver [este faq ] (http://stackoverflow.com/q/4172722/20984)). –