1

現在のプロジェクトで画像処理にCImgライブラリを使用したいと考えています。Codegear C++ Builder 2009 を使用しています。CImg.hソース ファイルにインクルードし、次のコードを挿入します。

int rows =5;
int cols = 5;

CImg<double> img(rows,cols);

次のエラーが表示されます。

[BCC32 Error] CImg.h(39159): E2285 Could not find a match for 'CImg<unsigned char>::move_to<t>(const CImg<unsigned char>)'

Codegear C++ Builder 2009 でビルドするときに使用する必要があるかどうかを知っている人は#defineいますか?それとも単に互換性がないのでしょうか?

4

1 に答える 1

2

1 つのヘッダー ファイルに含まれる 40,000 行のライブラリ? それは悪い考えのようです...

いずれにせよ、残念なことに、C++Builder 2009 はあまり優れた C++ コンパイラではないため、正当な C++ 構造を処理できないことがよくあります。(C++ は非常に複雑な言語であるという理由だけで、C++ コンパイラが C++ 標準の何らかの側面を適切に処理できないことは珍しくありません。)

これが発生した場合、主な選択肢は、別のライブラリを見つけるか、別のコンパイラを見つけるか、C++Builder の新しくてできればより優れたバージョンを待つか、ライブラリを調整して機能させるかです。

この場合、ライブラリを機能させることにした場合は、次の変更を開始する必要があります。

  • `move_to` のテンプレート バージョン (CImg 1.3.4 の 9145 行) では、C++Builder は `move_to` パラメータへのテンプレート パラメータとして t を検出できません。関数宣言を現在のタイプ セーフ バージョンから変更します。
        template<typename t>
        CImg<t>& move_to(CImg<t>& img) {
    
    よりシンプルに
        template<typename t>
        t& move_to(t& 画像) {
    
  • C++Builder が 39163 行目の draw_text 呼び出しの適切なテンプレート パラメータを見つけられるようにdraw_text(...)draw_text<unsigned char,unsigned char>(...)ます。

これら 2 つだけでなく、多くのコンパイラ エラーがあります。これらの CImg ソース コードを同様に調整する必要があります。

すべてを機能させることができれば、完了したら、CImg プロジェクトが変更を組み込み、C++Builder サポートを公式リリースに追加することに関心があるかどうかを確認できます。

于 2010-05-27T12:29:43.350 に答える