• ベストアンサー

C++からCに直したい

下のソースを用いようと思ったのですが、C++で書かれているため、Cで使えるようにしたいです。 iostreamを消すと表示が真っ白になりますし、良く分かりません。 どこをどのように変えたら動くのでしょうか。 分かる方、よろしくお願いします。 http://wiki.livedoor.jp/mikk_ni3_92/d/OpenCV%a4%c8%a5%c6%a5%af%a5%b9%a5%c1%a5%e3%ba%ee%c0%ae

質問者が選んだベストアンサー

  • ベストアンサー
回答No.4

お疲れ様です。 まず断っておきますが、私にはOpenCVの環境がないため確認出来ていません。 推測で答えますので、よろしくお願い致します。 まず、C言語にはbool型が標準では無いようです。 (参照URLを参考にして下さい。) よって、自作でbool型を作るなどして下さい。 (以下は例) #define bool char #define false (0) #define true(!0) その次に、C++では引数の省略は暗黙的にvoidですが、C言語では引数が何も無い時はvoidを指定しなければいけません。 よって、「display」関数はプロトタイプ宣言および実体の引数宣言にvoidを指定する必要があります。 これでも駄目な時は、またお知らせ下さい。 以上 よろしくお願い致します。

参考URL:
http://seclan.dll.jp/c99d/c99d05.htm
negative-X
質問者

補足

ご回答ありがとうございます。 #define true(!0) の!0がエラーになったため#defineで別に!0を定義したところ、正しい動作を確認できました。 ありがとうございます。 次の警告が出たのですが .c(60) : warning C4113: 'void (__cdecl *)()' はパラメータ リストが 'void (__cdecl *)(void)' と異なります。 これを直す方法はありますか。(きちんと動くので無視しても良いのかもしれませんが) お時間が宜しければ、教えていただけませんか。

その他の回答 (4)

回答No.5

>> 次の警告が出たのですが >> .c(60) : warning C4113: 'void (__cdecl *)()' はパラメータ >> リストが 'void (__cdecl *)(void)' と異なります。 >> これを直す方法はありますか。(きちんと動くので無視しても >> 良いのかもしれませんが) 前にも記載していますが、宣言文を変更すれば良いかと。 void display(); ↓ void display(void) 関数の実体も同じように修正 以上 よろしくお願い致します。

negative-X
質問者

お礼

ご回答ありがとうございます。 確かに警告がなくなりました。 解決できました。 説明不足等でご迷惑をお掛けしたと思いますが、何度もありがとうございました。 No.4のご回答を良回答とさせていただきます。 ありがとうございました。

回答No.3

お疲れ様です。 失礼ですが貴方の文章からは、どこまでがうまくいって、どこからがうまくいかないのか判断に苦しみます。 結局、テクスチャに画像は貼り付けられたのでしょうか? 前にも記載しましたが、参照先のURLのソースコードを見る限りは、「iostream」と「std::cerr」以外はC++でないとコンパイルされないコードは無いように見えます。 Cでコンパイルした場合に、どんなエラーになるのでしょうか?

negative-X
質問者

補足

ご回答ありがとうございます。 説明不足で申し訳ありませんでした。 C++では画像を貼れましたが、Cでは出来ていません。 Cでiostreamとstd::cerrをコメントアウトして実行した場合、次のエラーがでます。 .c(17) : error C2061: 構文エラー : 識別子 'LoadGLTextures' .c(17) : error C2059: 構文エラー : ';' .c(17) : error C2059: 構文エラー : ')' .c(53) : warning C4113: 'void (__cdecl *)()' はパラメータ リストが 'void (__cdecl *)(void)' と異なります。 .c(61) : warning C4013: 関数 'LoadGLTextures' は定義されていません。int 型の値を返す外部関数と見なします。 .c(61) : error C2065: 'false' : 定義されていない識別子です。 何度もすみませんが、よろしくお願いします。

回答No.2

そもそも、「コンパイルエラーが出るからC++からCに変えたい」というのが間違いなような気がします。 参照先のURLでcstdioやcstdlibを使用している箇所はありませんでした。 もう少し詳細なエラー内容の提示をお願いします。(どのソースのどの行など) そもそも、"test.jpg"は実行ファイルと同じフォルダに置いてあるのでしょうか? また、"test.jpg"が真っ白な画像である可能性はないでしょうか? 以上 よろしくお願い致します。

negative-X
質問者

補足

ご回答ありがとうございます。 >「コンパイルエラーが出るからC++からCに変えたい」 わけではなく、Cで組んでいるプログラムに組み込みたいため変換にしたいのです。 >もう少し詳細なエラー内容の提示をお願いします。 申し訳ありません。初歩的なミスで、現在C++での動作を確認しました。やはり、読み込んだ画像が回転している四角形に貼り付けられる内容でした。 前述のように、Cに組み込みたいのですが、どこをどう変えたら良いのでしょうか。 ご回答よろしくお願いします。

回答No.1

お疲れ様です。 OpenCVが手元に無いため分かりませんが、パッと見た限りC++に依存したコードは「std::cerr」しかありませんでした。 そもそも、リンク先のホームページのソースコードを実行するとどんな画面が表示されて、それがどう表示されないのか記載されるべきだと思うのですが。。。 その前に、OSやコンパイラが分かりませんし。。。

negative-X
質問者

補足

ご指摘ありがとうございます。 OSはXPでVisual C++ 2008 Express Editionを使用しています。 ソースを実行しようとするとcstdioとcstdlib(iostreamで使用?)で  構文エラー : '{' が ':' の前にありません。  構文エラー : ':' となり(原因不明)、結果は確かめられていませんが読む限りでは 「読み込んだ画像をテクスチャとして、(回転している)四角形に貼り付けている」はずです。 エラー元と思われるiostreamを消して実行すると、画像が貼り付けられることなく、白いままの四角形が回転している状態です。 宜しければ、ご回答お願いします。