オープンソースのプログラム

解決


  2008-07-03 00:17:34  No: 68645

ttp://hp.vector.co.jp/authors/VA004073/rcsimu6.html

上記サイトのプログラムをVC++.net ver.2003でコンパイルすると以下のようなエラー、警告が発生しました。
これは公開されているソースがおかしいのでしょうか?
よろしくお願い致します。

rcsimu2.cpp(640): error C2086: 'int _export' : 再定義されました。
Midiout.h(42) : '_export' の宣言を確認してください。
Midiout.h(42): error C2146: 構文エラー : ';' が、識別子 'MidiOutCall' の前に必要です。
rcsimu2.cpp(640): error C2146: 構文エラー : ';' が、識別子 'MidiOutCall' の前に必要です。
Midiout.h(42): error C2182: '_export' : 'void' 型が不適切に使用されています。
rcsimu2.cpp(640): error C2182: '_export' : 'void' 型が不適切に使用されています。
Midiout.h(42): warning C4229: 旧形式が使用されています : データの修飾子は無視されます。
rcsimu2.cpp(640): warning C4229: 旧形式が使用されています : データの修飾子は無視されます。
rcsimu2.cpp(253): warning C4244: '=' : 'double' から 'int' に変換しました。データが失われているかもしれません。
rcsimu2.cpp(254): warning C4244: '=' : 'double' から 'int' に変換しました。データが失われているかもしれません。
rcsimu2.cpp(652): warning C4508: 'MidiOutCall' : 関数に戻り値の型が指定されていません。戻り値を void 型と見なします。


wclrp ( 'o')  2008-07-03 06:14:52  No: 68646

昔のソースだから問題出てしまうよ。
元はC++じゃなくてC言語かな。C++と一部異なるので直す必要あり。
実際に旧形式って指摘されているし。
直しても動くかどうかわからないよ。

以下推測です。元のプログラムを見ないで回答。

C言語ではグローバル変数などを再定義してもリンカは一つとしてくれるが
C++では宣言はありだが定義は複数あるとエラーになるとか。

昔のC言語はとりあえずint型でコンパイルするが
C++はちゃんと使う前に宣言ができてないとエラーになる。

適当で動いてしまうとバグの元なので型とか宣言とかちゃんとすべき。


  2008-07-06 22:03:40  No: 68647

ありがとうございました。
ご意見を参考にしてプログラムを直してみます。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加