2012-05-22 44 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”