0

std::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 VisualStudio2005を使用しています。

[編集].cppファイルのメソッド本体での使用を示しています(使用例として):

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

2 に答える 2

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&)
};

そしてコンパイラはあなたを犯人に向けるべきです。

于 2010-08-01T04:43:50.260 に答える
1

;行の欠落がタイプミスであると仮定すると、externalfunction正確なエラーメッセージを取得できませんでしたが、おそらくパラメータとしてexternalfunctionaを期待しているようです。std::string実際には、暗黙的に変換できないをmBufferStream.str()提供します。std::wstring

于 2010-07-20T16:55:14.937 に答える