2012-05-22 43 views
1

我有一個擴展ostringstream類的類。ostringstream操作符[]嘗試讀取緩衝區時發生編譯錯誤

Class A: public ostringstream 
{ 

} 

我想從該對象讀取指定大小和特定偏移的數據。所以嘗試:

A a_; 
a_ << data1 << data2; 
string datax(a_[offset], size); 

但在字符串datax語句獲取編譯錯誤。

error: no match for operator[] in ... 

如何從指定的偏移量和大小的對象a_中複製數據?我不想從對象a_中刪除數據。

備註:該課程由別人設計,無法修改。

回答

1

我相信,你的代碼有你可以做:

a_ << data1 << data2; 
string datax(&a_.str()[offset], size); 

這看起來有點醜給我。爲什麼不用簡單的std::stringstream來替代? (除非你有一個強有力的理由從std::ostringstream繼承

+0

謝謝我使用。 A類已經由別人設計,我不能改變,所以我不得不這樣做。 – Romonov

+0

然後上面的方式獲取數據使用偏移量應該工作。 –

1

首先,標準中沒有任何內容可以保證您從std::ostringstream派生出來的工作。你最好不要這樣做。

二,std::ostringstream沒有operator []那麼爲什麼要有一個A

最後,您可以撥str(),並獲得std::string與緩衝區的內容。我不確定這是否會對你有所幫助,你想要做的事情並不完全清楚。

0

你需要調用STR()方法:

ostringstream oss (ostringstream::out); 
oss << "abcdef"; 
string s = oss.str(); 
cout << s.substr(1, 3) << endl; 

這個例子將輸出「BCD」