ページ 11

POCOのビルドでC2664エラーが発生する。

Posted: 2009年4月15日(水) 00:59
by tk-xleader
POCO(ttp://pocoproject.org/)をダウンロードして、Foundationディレクトリ内のFoundation_vs80からビルドしようと思ったのですが、C2664エラーが発生してどうしてもうまくいきません。どうすればよいのでしょうか?

環境:VC2005
POCOバージョン:1.3.3
エラーメッセージ
FileStream.cpp
c:\program files\microsoft visual studio 8\vc\include\istream(910) : error C2664: 'std::basic_ostream<_Elem,_Traits>::basic_ostream(std::basic_streambuf<_Elem,_Traits> *,bool)' : 1 番目の引数を 'std::_Uninitialized' から 'std::basic_streambuf<_Elem,_Traits> *' に変換できません。(新しい機能 ; ヘルプを参照)
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        整数型からポインタ型への変換には reinterpret_cast、C スタイル キャストまたは関数スタイル キャストが必要です。
        c:\program files\microsoft visual studio 8\vc\include\istream(907): クラス テンプレート のメンバ関数 'std::basic_iostream<_Elem,_Traits>::basic_iostream(std::basic_streambuf<_Elem,_Traits> *)' のコンパイル中
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
        c:\program files\microsoft visual studio 8\vc\include\istream(920) : コンパイルされたクラスの テンプレート のインスタンス化 'std::basic_iostream<_Elem,_Traits>' の参照を確認してください
        with
        [
            _Elem=char,
            _Traits=std::char_traits<char>
        ]
………
ビルドログは "<ビルドログ出力ファイルのパス>" に保存されました。
Foundation - エラー 1、警告 3
========== ビルド: 0 正常終了、4 失敗、0 更新、0 スキップ ==========
よろしくお願いします。

Re:POCOのビルドでC2664エラーが発生する。

Posted: 2009年4月15日(水) 02:35
by Justy
 うちは MSVC9/Poco1.3.3p1のバージョンですが、そのファイルでエラーは出ませんでした。
 
 見た感じ、basic_iostreamのコンストラクタ内で実行される basic_ostreamのコンストラクタで、
本来は _Uninitialized版のコンストラクタとして判定されるはずが、
なぜか一致せず、もう一方の basic_streambuf<_Elem, _Traits> *版のコンストラクタとも
型が合わずエラーになっているように見えます。

 basic_ostreamの _Uninitialized版のコンストラクタは "ostream"ヘッダで定義されていますか?

Re:POCOのビルドでC2664エラーが発生する。

Posted: 2009年4月15日(水) 22:47
by tk-xleader
>basic_ostreamの _Uninitialized版のコンストラクタは "ostream"ヘッダで定義されていますか?

__CLR_OR_THIS_CALL basic_ostream(_Uninitialized)

のような関数が定義されていたので、これは大丈夫だと思います。
Pocoのバージョンも1.3.3p1です。

Re:POCOのビルドでC2664エラーが発生する。

Posted: 2009年4月16日(木) 02:02
by Justy
 一応、svn内の 1.3.4のそのファイルの差異とか、サポートページとかも見てみましたが、
特に該当する現象は見つかりませんでした。


 となると何でしょうね。
 
#MSVCや Pocoのヘッダ・ソースは書き換えてないですよね?


 ところで、FileStream.cppのビルド中、どの行でエラーが起きたのかが書かれていないのですが、
エラーメッセージはそれがすべてですか?

Re:POCOのビルドでC2664エラーが発生する。

Posted: 2009年4月16日(木) 21:54
by tk-xleader
他には、文字コード関連のC4819の警告がありました。MSVCのヘッダーは書き換えていませんし、POCOは解凍直後の状態でやっています。
一応コンパイラがはいたメッセージの全文を添付します。

Re:POCOのビルドでC2664エラーが発生する。

Posted: 2009年4月17日(金) 02:14
by Justy
 ネットで探すと少数ですが、似たような症状が出ている人がいるようです。

Compiler error with fstream - PopCap Developer Program Forums
ttp://developer.popcap.com/forums/showthread.php?t=3720

win_tech_off_topic : Message: Re: [OT] Chrome/V8
ttp://tech.groups.yahoo.com/group/win_tech_off_topic/message/58481

 どちらも VisualStudioのパッチを当てた後発生しているらしいです。
 ただ明確な解決方法はなく、あっても「_Uninitialized版のコンストラクタを追加する」
という方法なのですでにある以上この方法は使えません。



>C4819の警告がありました

 こっちは 2005特有のものなので、あまり気にしなくてもいいのかも。
(2008では出ませんでした)


 うーん、原因を特定するのは難しいですね。
 今できることといえば
・ basic_iostreamを使ったサンプルを書いてみて、ビルドが通るか確認してみる
・ VisualStudio2005を再インストールするか、2008をインストールしてそちらで試す
 あたりでしょうか。

Re:POCOのビルドでC2664エラーが発生する。

Posted: 2009年4月17日(金) 22:36
by tk-xleader
VC2008を使って試してみましたら、うまくいきました、ありがとうございます。

しかし、VC2008はExpressEditionですので、2005のATLを使えないのがちょっと難点です(コンパイルはできるとしても、ライセンス的にはどうなのでしょうか…)