1

初期化子リストを使用して、コンストラクターでプライベートstd::ofstream(たとえば、で開かれたファイル)を初期化したいと考えています。main次のコードがあります。

class MyClass{
    std::ofstream ofs;
public:
    MyClass(const std::ofstream &ofs): ofs(ofs) { }
};

次のコンパイルエラーが発生します。

error C2248: 'std::basic_ofstream<_Elem,_Traits>::basic_ofstream' : cannot access private member declared in class 'std::basic_ofstream<_Elem,_Traits>'
      with
      [
          _Elem=char,
          _Traits=std::char_traits<char>
      ]
      c:\program files (x86)\microsoft visual studio 11.0\vc\include\fstream(1034) : see declaration of 'std::basic_ofstream<_Elem,_Traits>::basic_ofstream'
      with
      [
          _Elem=char,
          _Traits=std::char_traits<char>
      ]

ここで何が起こっているのですか?

4

1 に答える 1

3

cppreferenceを見てください

basic_ofstream( const basic_ofstream& rhs) = delete;    (5)     (since C++11)

をコピーして構成することはできませんbasic_ofstream

おそらく、c++11 より前のコンパイラを使用していprivateて、ライブラリ内でマークされている可能性があります。

于 2013-08-20T01:01:14.817 に答える