2011-11-15 20 views
0

我得到越來越錯誤碼出下面的錯誤是採取周(非常兼職)後略有改善:任何人都會提示爲什麼我的代碼在basic_ios和sstream中創建錯誤?

1>C:\Program Files\Microsoft Visual Studio 9.0\VC\include\sstream(451) : error C2248: 'std::basic_ios<_Elem,_Traits>::basic_ios' : cannot access private member declared in class 'std::basic_ios<_Elem,_Traits>' 
1>  with 
1>  [ 
1>   _Elem=char, 
1>   _Traits=std::char_traits<char> 
1>  ] 
1>  C:\Program Files\Microsoft Visual Studio 9.0\VC\include\ios(151) : see declaration of 'std::basic_ios<_Elem,_Traits>::basic_ios' 
1>  with 
1>  [ 
1>   _Elem=char, 
1>   _Traits=std::char_traits<char> 
1>  ] 
1>  This diagnostic occurred in the compiler generated function 'std::basic_ostringstream<_Elem,_Traits,_Alloc>::basic_ostringstream(const std::basic_ostringstream<_Elem,_Traits,_Alloc> &)' 
1>  with 
1>  [ 
1>   _Elem=char, 
1>   _Traits=std::char_traits<char>, 
1>   _Alloc=std::allocator<char> 
1>  ] 

我從CLI遷移到std::類其我甚至沒有經驗。

我認爲它在說「這個診斷髮生在編譯器生成的函數中」被引用的函數是我的std::ostringstream os;

我用os類似如下:

 os << "Level: " << levelName << ", contains unexpected header at line " << (numMatched + 1) 
      << "\nExpected:\n" << longStringHeader; 
     addToErrorSTDstring(os); 

因爲std::string串聯了一個排隊,每次加。

我用ostringstream的唯一方法是

bool LevelParser::addToErrorSTDstring(std::ostringstream os){ 

我相信ildjarn只是perspicaciously確定爲我的問題。

+7

沒有看到您的代碼是不可能的。 –

回答

4

的錯誤指示您正試圖複製的std::ostringstream的實例,但所有標準流是不可複製對象(在C++ 11它們,但是,移動)。

這是問題的根源,但沒有看到你的實際代碼,我們不能給你如何解決它的具體建議


編輯(響應OP的編輯):

addToErrorSTDstring無疑需要std::ostringstream的值,即有一個簽名,如:

T addToErrorSTDstring(std::ostringstream os); 

相反,你需要將它傳遞作爲參考,即將簽名更改爲類似:

T addToErrorSTDstring(std::ostringstream const& os); 

或:

T addToErrorSTDstring(std::ostringstream& os); 

(這取決於你如何使用它)。

如果您不熟悉C++,那麼您需要停止正在處理的內容,並在語言基礎知識(例如引用和常量正確性)上進行修改。

+0

你修好了!很長一段時間沒有看到這個項目'成功',謝謝。 – John

+0

@John:與你的學習項目玩得開心。 : - ] – ildjarn

相關問題