2012-01-24 4 views
0

大規模なVC++ 6.0アプリケーションをVS2010に変換していて、プロジェクトの:エラーテキストと、ここで求めた類似の質問に基づいてBoughunting tips for:エラーC2248: 'std :: basic_ios <_Elem、_Traits> :: basic_ios':クラス内で宣言されたプライベートメンバーにアクセスできない

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 (x86)\microsoft visual studio 10.0\vc\include\ios(176) : 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_ofstream<_Elem,_Traits>::basic_ofstream(const std::basic_ofstream<_Elem,_Traits> &)' 
1>   with 
1>   [ 
1>    _Elem=char, 
1>    _Traits=std::char_traits<char> 
1>   ] 

、私はエラーが代わりに参照渡しされるので、関数に直接渡さofstreamのインスタンスによって引き起こされていることを前提としています。

問題は、ofstreamが間違った方法で渡されるコード行を特定することです。エラーメッセージはVS2010に含まれているfstreamヘッダーにのみリンクし、私のプロジェクトでは数十万行のコードベースのどこにでもofstreamが使用されています(どれも私によって書かれていません)。

私は、このタイプのコンパイラエラーを見つけるためのヒント/ヒント/戦略を非常に詳しく説明します。このようなエラーの位置を突き止める問題にどのようにアプローチしますか?

+2

のようなもののためにあなたのソースファイルでgrep(正規表現検索)を行い、呼び出しラインを指摘し、そのエラーの下に多くの診断、ありませんか?それは通常そうです。もしそうでなければ、私は(a)非常に驚くばかりであり、(b)絶望的なことになるだろう。 –

+1

(ただし、フォールトがストリームオブジェクトをコピーしようとしたために発生したと判断された場合:D) –

+0

コンパイラが処理しているソースファイルの名前が表示され、そのエラーメッセージの前に表示されますソースファイル。これはあなたのために犯行者を絞り込むことはありませんか? – hmjd

答えて

1

このようなエラーの位置を突き止める方法はどうですか?

\(([^,]+,)*, (std::)?of?stream [^&] 
+0

さらに良い: 'sed-s/ofstream/ostream&/ g'とそれが本当に必要な場所を修正するのは 'ofstream'です。 Windows上で問題があると恥ずかしいです... –

+0

「ofstream」を検索すると、やっとトリックが行われました。 – lowglider

関連する問題