我想用我的測試類與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
順便說一句,我使用Visual Studio 2010,但我已經試過相剋的Fedora 16 ++,得到了相同的結果!
有趣的問題,無法找到真正的答案爲止。看起來像流是錯的:1.因爲當它進入流操作符時,只有一個得到更新,b不是。我添加了另一個字符串來檢查空間是否被嚴重解釋,但即使字符串沒有更新。 2.當你離開操作員時它會拋出,它會檢查我不明白的東西然後決定拋出。 – Klaim
您應該使用默認構造函數的默認版本,複製構造函數和析構函數,而不是自己定義它們:編譯器會爲您生成它們(並且在複製構造函數時會更加正確)(請參閱[this faq ](http://stackoverflow.com/q/4172722/20984))。 –