Chcę użyć mojej klasy Test z boost::lexical_cast
. Mam przeciążony operator<<
i operator>>
, ale daje mi błąd wykonania.
Oto mój kod:
C++ Korzystanie z klas z doładowaniem :: 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;
}
wyjściowa:
bad lexical cast: source type value could not be interpreted as target
Btw używam Visual Studio 2010, ale próbowałem Fedorę 16 z g ++ i mam ten sam wynik!
Ciekawe pytanie, nie może znaleźć prawdziwą odpowiedź do tej pory. Wygląda na to, że coś jest nie tak ze strumieniem: 1. ponieważ kiedy dostanie się do operatora strumienia, tylko otrzymasz aktualizację, b nie jest. Dodałem kolejny ciąg znaków, aby sprawdzić, czy przestrzeń została źle zinterpretowana, ale nawet ciąg znaków nie został zaktualizowany. 2. Rzuca się, gdy opuszczasz operatora, sprawdza coś, czego nie rozumiem, a następnie decyduje się rzucić. – Klaim
Powinieneś prawdopodobnie użyć domyślnych wersji domyślnego konstruktora, skopiować konstruktora i destruktora, zamiast samemu je zdefiniować: kompilator wygeneruje je dla ciebie (i zrobi to bardziej poprawnie w przypadku kopiowania konstruktora (zobacz [to jest ] (http://stackoverflow.com/q/4172722/20984)). –