2010-07-20 281 views
0

我有一個wstring流,我正在使用我的類中的一種緩衝區,它被這個類的很多方法使用。然而,當我嘗試做這樣的事情:如何使用類wstringstream變量?

#include <sstream> 

class foo 
{ 
    public: 
    void methodA(int x, int y); // Uses mBufferStream 
    void methodB(int x, int y); // Uses mBufferStream 

    private: 
    std::wstringstream mBufferStream; 
}; 

我得到以下錯誤:

錯誤C2248: '的std :: basic_ios < _Elem,_Traits> :: basic_ios':不能訪問私有成員在課堂上聲明'std :: basic_ios < _Elem,_Traits>'

這不是明確的類,但它是相同的設置。任何想法,我可能做錯了什麼?我使用Microsoft Visual Studio 2005

[編輯]顯示方法體使用.cpp文件(作爲它的一個例子是使用):

void foo::methodA(int x, int y) 
{ 
    mBufferStream << "From " << x << " To " << y; 
    externalfunction(mBufferStream.str()); // Prints to message service 
    mBufferStream.str(L""); 
} 
+0

你的代碼在g ++ 4.2上編譯得很好 - 這個確切的代碼是否無法在編譯器上編譯?它看起來很好。 – 2010-07-20 16:34:16

+0

任何關於如何在body中使用mBufferStream的例子? – cpx 2010-07-20 16:34:17

+0

這三行中的哪一行導致錯誤? – luiscubal 2010-07-20 17:05:48

回答

2

這是因爲編譯器隱式聲明類foo的複製構造函數。 std::wstringstream是不可複製的,因爲它繼承自ios_base

類改成這樣:

#include <sstream> 

class foo 
{ 
    public: 
    void methodA(int x, int y); // Uses mBufferStream 
    void methodB(int x, int y); // Uses mBufferStream 

    private: 
    std::wstringstream mBufferStream; 
    foo(const foo&); //noncopyable 
    void operator=(const foo&) 
}; 

和編譯器應該在元兇指向你。

1

externalfunction行假設缺少;是一個錯字,我無法得到確切的錯誤信息,但它看起來可能是externalfunction預計std::string作爲其參數。實際上,mBufferStream.str()提供了一個std::wstring,它不能被隱式轉換。

+0

是的,這是一個錯字,謝謝你的收穫。外部函數被重載以獲取wstring和const wstrings。我只有在標題中有wstring時纔會出現錯誤。如果我把它放在方法中,它可以正常工作。 – Fry 2010-07-20 17:01:53