
下のソースを用いようと思ったのですが、C++で書かれているため、Cで使えるようにしたいです。
iostreamを消すと表示が真っ白になりますし、良く分かりません。
どこをどのように変えたら動くのでしょうか。
分かる方、よろしくお願いします。
http://wiki.livedoor.jp/mikk_ni3_92/d/OpenCV%a4% …
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
この回答への補足
ご回答ありがとうございます。
#define true(!0)
の!0がエラーになったため#defineで別に!0を定義したところ、正しい動作を確認できました。
ありがとうございます。
次の警告が出たのですが
.c(60) : warning C4113: 'void (__cdecl *)()' はパラメータ リストが 'void (__cdecl *)(void)' と異なります。
これを直す方法はありますか。(きちんと動くので無視しても良いのかもしれませんが)
お時間が宜しければ、教えていただけませんか。
No.5
- 回答日時:
>> 次の警告が出たのですが
>> .c(60) : warning C4113: 'void (__cdecl *)()' はパラメータ
>> リストが 'void (__cdecl *)(void)' と異なります。
>> これを直す方法はありますか。(きちんと動くので無視しても
>> 良いのかもしれませんが)
前にも記載していますが、宣言文を変更すれば良いかと。
void display();
↓
void display(void)
関数の実体も同じように修正
以上 よろしくお願い致します。
ご回答ありがとうございます。
確かに警告がなくなりました。
解決できました。
説明不足等でご迷惑をお掛けしたと思いますが、何度もありがとうございました。
No.4のご回答を良回答とさせていただきます。
ありがとうございました。
No.3
- 回答日時:
お疲れ様です。
失礼ですが貴方の文章からは、どこまでがうまくいって、どこからがうまくいかないのか判断に苦しみます。
結局、テクスチャに画像は貼り付けられたのでしょうか?
前にも記載しましたが、参照先のURLのソースコードを見る限りは、「iostream」と「std::cerr」以外はC++でないとコンパイルされないコードは無いように見えます。
Cでコンパイルした場合に、どんなエラーになるのでしょうか?
この回答への補足
ご回答ありがとうございます。
説明不足で申し訳ありませんでした。
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"が真っ白な画像である可能性はないでしょうか?
以上 よろしくお願い致します。
この回答への補足
ご回答ありがとうございます。
>「コンパイルエラーが出るからC++からCに変えたい」
わけではなく、Cで組んでいるプログラムに組み込みたいため変換にしたいのです。
>もう少し詳細なエラー内容の提示をお願いします。
申し訳ありません。初歩的なミスで、現在C++での動作を確認しました。やはり、読み込んだ画像が回転している四角形に貼り付けられる内容でした。
前述のように、Cに組み込みたいのですが、どこをどう変えたら良いのでしょうか。
ご回答よろしくお願いします。
No.1
- 回答日時:
お疲れ様です。
OpenCVが手元に無いため分かりませんが、パッと見た限りC++に依存したコードは「std::cerr」しかありませんでした。
そもそも、リンク先のホームページのソースコードを実行するとどんな画面が表示されて、それがどう表示されないのか記載されるべきだと思うのですが。。。
その前に、OSやコンパイラが分かりませんし。。。
この回答への補足
ご指摘ありがとうございます。
OSはXPでVisual C++ 2008 Express Editionを使用しています。
ソースを実行しようとするとcstdioとcstdlib(iostreamで使用?)で
構文エラー : '{' が ':' の前にありません。
構文エラー : ':'
となり(原因不明)、結果は確かめられていませんが読む限りでは
「読み込んだ画像をテクスチャとして、(回転している)四角形に貼り付けている」はずです。
エラー元と思われるiostreamを消して実行すると、画像が貼り付けられることなく、白いままの四角形が回転している状態です。
宜しければ、ご回答お願いします。
お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!
関連するカテゴリからQ&Aを探す
おすすめ情報
デイリーランキングこのカテゴリの人気デイリーQ&Aランキング
-
CTabCtrl:TABインデックス単位...
-
多重定義が起きている?--lnk20...
-
typedef unsigned int UINT;が...
-
戻り値を返す関数の前に(void)...
-
【gcc・cygwin】multiple defin...
-
別ソースファイル、同クラス名...
-
C++にてtemplateで受け取った任...
-
_beginthread()の使用について
-
(void)0 はどんな意味ですか
-
構造体を宣言と共に初期化する方法
-
const_castのつかいどころを教...
-
void*型の配列について
-
静的でないメンバ関数の呼び出...
-
gcc: incompatible pointer type
-
GDI+の使用方法について
-
別のファイルの値を得るには?
-
最早開始時間と最遅完了時刻を...
-
20'(角度)の計算がわかりま...
-
信頼区間の1.96や1.65ってどこ...
-
Aの値からBの値を除するとは??
マンスリーランキングこのカテゴリの人気マンスリーQ&Aランキング
-
静的でないメンバ関数の呼び出...
-
既定のコンストラクタがありま...
-
戻り値を返す関数の前に(void)...
-
C++にてtemplateで受け取った任...
-
【gcc・cygwin】multiple defin...
-
const_castのつかいどころを教...
-
多重定義が起きている?--lnk20...
-
gcc: incompatible pointer type
-
(void)0 はどんな意味ですか
-
C# KeyDownイベントでショート...
-
pictureboxの画像を削除するには?
-
Notepad++の関数リスト表示の変...
-
C#でテンキーの操作は可能でし...
-
アドレスを指定して関数を呼び...
-
ウインドウの移動禁止
-
画面上をクリックするとクリッ...
-
C# Controls.Addで動的に配置し...
-
別ソースファイル、同クラス名...
-
DLLの関数呼び出しで引数がある...
-
プログラム作成教えてください...
おすすめ情報