클래스를 boost::lexical_cast
으로 사용하고 싶습니다. operator<<
과 operator>>
을 오버로드했지만 런타임 오류가 발생합니다.
여기 내 코드입니다 :
C++ 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;
}
출력 :
bad lexical cast: source type value could not be interpreted as target
재미있는 질문은, 지금까지 진짜 대답을 찾을 수 없습니다. 스트림에 문제가있는 것처럼 보입니다. 1. 스트림 연산자에 들어갈 때만 업데이트됩니다. b는 그렇지 않습니다. 공백이 심하게 해석되었지만 문자열이 업데이트되지 않았는지 확인하기 위해 다른 문자열을 추가했습니다. 2. 당신이 통신 수에서 나올 때 던져서, 내가 이해하지 못하는 것을 검사 한 후 던지기로 결정합니다. – Klaim
아마도 기본 생성자, 복사 생성자 및 소멸자의 기본 버전을 스스로 정의하는 대신 사용해야합니다. 컴파일러가 대신 생성자를 생성합니다 (복사 생성자의 경우 더 정확하게 수행합니다 ([this faq ] (http://stackoverflow.com/q/4172722/20984). –