2013-03-12 123 views
0

我問這個問題,因爲我有點無奈:這個錯誤只發生在Visual Studio,GCC編譯它沒有錯誤,甚至警告。由於這是一些可移植的代碼,我正在尋找一種適用於這兩種編譯器的解決方案(並且在沒有平臺相關的最佳情況下ifdefs)。錯誤C2512:'std :: basic_ostream <_Elem,_Traits>':沒有合適的默認構造函數只適用於Visual Studio

錯誤C2512: '的std :: basic_ostream < _Elem,_Traits>':在構造類型的MyObject的目的被定義爲

class MyObject : public Socket, public std::ostream 
沒有可用的適當 默認的構造

發生

VS在這裏有什麼特別的ostream參數?

回答

4

std::ostreamstd::basic_ostream<char>的類型別名。 std::basic_ostream<char>的構造函數需要一個指向輸出流關聯的流緩衝區的指針。你必須提供一個。

的構造方法的簽名是以下之一:

explicit basic_ostream(std::basic_streambuf<CharT, Traits>* sb); 

類構造函數應該是這個樣子:

class MyObject : public Socket, public std::ostream 
{ 
    MyObject(/* ... */) 
     : 
     std::ostream(/* provide a ptr to a stream buffer here /*) 
    // ... 
    { 
     // ... 
    } 
}; 

也看到this的參考。

+0

很好的答案。我正在從VS2008(和更舊版本)遷移到VS2012,然後就出現了。 – EJA 2013-08-21 20:11:15

+0

@EJA:很高興幫助你:) – 2013-08-22 09:59:16

相關問題