1 名前:デフォルトの名無しさん mailto:sage [2009/05/04(月) 21:04:54 ] C++に関する質問やら話題やらはこちらへどうぞ。 ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。 前スレ C++相談室 part66 pc12.2ch.net/test/read.cgi/tech/1231640498/ ※part63, part66 が重複していたようですので part69 としました。
357 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 22:49:39 ] 初心者ではないと思っていたのですが、初心者からこんな質問を受けて 的確に答えられなかった自分が恥ずかしいです。どなたか、模範解答を教えてください。 「ヘッダファイルの用途と、使用によるメリットは理解できました。 ただ、cpp ファイルを分ける目的がわかりません。 また、cpp ファイルを複数持たせた場合、ビルド順はどうなるのですか?」 宜しくお願いします。
358 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:01:32 ] むしろcppファイルを分けないでどうやってまともに開発しているのか分からないぐらいだが。 分割コンパイルすることで仕様変更に伴う再コンパイル時間の短縮とかも見込めるけど、 それ以上にそもそも他人が作ったクラスとかを使いたい(再利用したい)場合とか cppファイルが分かれてなかったら再利用できないだろ。
359 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:06:45 ] >>358 その観点で考えると、うちのプロジェクトは基本的にほどんどがヘッダファイルで構成されていて、 クラスは基本的に .h で作って #include で取り込む、っていう方法を取っています。 なので、再利用には困りません。 ほとんどがヘッダっていう考え方がNG? あと、ビルド順序はどうなるものですか?やってみたんですが分かりませんでした。
360 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:07:48 ] いやまて。ヘッダファイルに直接定義を書き込んでいるのか? そんなことできないだろ。
361 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:10:52 ] 出来るだろ。じゃないとboostのビルド不要なライブラリは実現できないよ。
362 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:12:36 ] 「ビルド順はどうなるか」って、質問者はもちろん、>>357 自身も理解してない気配。 分割コンパイルやリンクについてわかってないまま脱初心者とは。 ちなみに、グローバルやclass-staticな変数の初期化順については 何も規定されていないことが規定されている。 ということは、リンク順についてそれが当てはまることを意味するが 規格に「リンク」という単語が出ているかは知らない。 cppの分割については>>358 と同じ。 classにわけたり、意味的なまとまりにわけたりして まともなものを作るのなら分割するのが当然。 >>359 Javaチックな書き方ってことかね。 別にそれならそれで良いんじゃないの。 .hに全部書く、ということは、「ビルド(コンパイル)時間の短縮」なんて 露ほどにも考えていないということだから、 再利用もできるし分割コンパイルなんて必要無いかもね。
363 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:13:20 ] 言い方がまずかったか。「できないものがある」。こうだな。 もしかして、全部 inline にしたり、あらかじめ obj にしたりしてあるのだろうか。
364 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:17:24 ] >>359 >クラスは基本的に .h で作って #include で取り込む、っていう方法を取っています。 >なので、再利用には困りません。 >ほとんどがヘッダっていう考え方がNG? マジ?? その会社 大丈夫??? 考えて見ればcppファイルが1つだけなら関数の定義とかを.hに書き込んでも バイナリの時点で重複は起らないが(hでインクルードガードしていること前提ね。) それにしても、、、ねぇ。。。
365 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:18:54 ] >>360 dllexport が必要な時と、main() 系、コールバック系以外はすべてヘッダファイルなんです。 クラスの定義や構造体など、ほとんど。 ヘッダファイルの考え方が違うのかな… >>362 規定が無い点について理解しました。 確かにうちのプロジェクトのソースはビルド時間かなりかかるんです… .cpp で書くと分割コンパイルされて速度が向上するということですね。 まったく知りませんでした。。 まさに java チックです。 なので、include 順序がかなり大事で問題も結構起きるんですよね。 でも私個人的には、c++ で開発しているので、c++ の基本を知りたいです。 >>363 全然、そんなことないんです>< おまけに、プリコンパイルヘッダもないので時間ばかりが掛かって…
366 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:21:28 ] >>365 ヘッダに定義を全部書いたら、クラスのインタフェースに全く影響を及ぼさない 変更であっても、そのヘッダに依存するソースファイルすべてが再コンパイル されるじゃないか。その程度も分かってない会社って一体・・・
367 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:22:39 ] >>364 インクルードガードしてもできないよ。 インクルードガードは同一翻訳単位内でしか有効ではないから。
368 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:25:16 ] >>364 そうなんですよ!! .cpp ファイルは main 用に1つだけあって、あとは .h の処理を呼び出したり、 クラスを生成してクラスに処理を任せたり、、、 グローバル関数までもが .h に居る始末です。 >>366 まさにその通りですね。 これでも一部上場なのですが、本当にお恥ずかしいです。
369 名前:364 mailto:sage [2009/05/23(土) 23:25:54 ] >>367 いやできるでしょ。 cppが1つしかないんだぜ? ってことは翻訳単位も(恐ろしいことだが)一つってことじゃん。
370 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:27:17 ] すでに拡張子の意味を逸脱した使い方なのはわかった
371 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:29:20 ] >>369 あぁ、そういうことか。理解したw すごいな。
372 名前:357 mailto:sage [2009/05/23(土) 23:33:35 ] 結論としては、>>370 がおっしゃっているように、 拡張子の意味を確実に逸脱しているのですね。 みなさんがおっしゃったように、リンクの意味を理解していなかったようです。 分割ビルドは十分理解できました。 今一度教えてください。みなさんは .h を基本的にどのような用途で利用されていますか? また、現状のように .cpp を1つだけもち、ほとんどすべてを .h に置くことで発生しうる 考えられる問題がありましたら教えてください。 >>369 すみません、私は理解できませんでした。 まだ初心者であることを思い知りました。 翻訳単位が1つだと、恐ろしいものですか?時間が掛かる、という観点でしょうか。
373 名前:369 mailto:sage [2009/05/23(土) 23:40:35 ] >>372 >翻訳単位が1つだと、恐ろしいものですか? そんな開発者見たことないから、恐ろしいと形容した。 >今一度教えてください。みなさんは .h を基本的にどのような用途で利用されていますか? あくまで宣言だけを書いておく。 MyClassを使う必要があればMyClass.hをインクルードする。 一方MyClass.cppにもMyClass.hをインクルードしておいて、別途コンパイルしておく。 こうすることで、MyClass.cppが変更されても他の大部分のcppは再コンパイルしないで済む。 あるいはMyClass.cppをコンパイルしてライブラリとして公開する場合、 他社には.hだけを見せるわけだから実装を隠せるとか。 >また、現状のように .cpp を1つだけもち、ほとんどすべてを .h に置くことで発生しうる >考えられる問題がありましたら教えてください。 他の会社や組織に公開する時に実装がだだ漏れになるとか
374 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:46:19 ] つか、どんな教科書で勉強したんだよ。 大概の教科書は分割の仕方書いてあるだろ^^
375 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:49:36 ] >>372 ビルドに時間が掛かって仕方がないだろう
376 名前:357 mailto:sage [2009/05/23(土) 23:54:38 ] >>323 なるほど、、、将来を見据えた設計をしながら開発してるんですね。 なんかもう、うちの会社が悩ましいです。 >>374 会社の研修では一切… ちなみにほとんどのプロジェクトがそんな感じです。 java と COBOL 人間ばかりなので、include = そこにそのファイル内容を挿入、っていう 意味合いだけしか着目していないんだと思います。 >>375 その通りですね。勉強になりました。 今日皆さんにご指導いただいた内容を以って、会社の開発体制の改善を 促して以降と思います。 ありがとうございました。
377 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:55:23 ] まて、>>357 は本当にC++を扱う一部上場企業に勤めているのか? 例えば、分割コンパイルには関係ないようなC++の問題だしても解けるか?
378 名前:357 mailto:sage [2009/05/23(土) 23:55:32 ] >>376 ○ >>323 × >>373
379 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:56:27 ] どうせ元ABCのあそこだろ?
380 名前:デフォルトの名無しさん mailto:sage [2009/05/23(土) 23:59:44 ] >>377 私も信じられなくなってきましたが、こんな開発者ばかりながらも、 一部上場です。 私はアセンブル系のドライバ開発あがりで、ウィザードを利用して ATL/WTL アプリケーションの 開発をやっているので、一から自分でファイルを作ってプロジェクトを構成したことがありませんでした。 20年弱もプログラミングをして来ましたが、初心者からはなかなか抜け出せませんね。 大変勉強になりました。
381 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 00:06:46 ] >>380 そうなのか。 じゃあもういっそC++やめて、各自が得意なCOBOLとかアセンブラやればいいのではないでしょうかね。。。 少なくとも一人、C++の知識がある人が居ないととんでもないことになるのでは。 まああなたがその一人になれば良いだけだが。 頑張ってください。
382 名前:デフォルトの名無しさん [2009/05/24(日) 00:07:00 ] >>380 大丈夫。そのやり方で会社が回っているならそれで正しい。 開発の仕方に正解なんてないんだし、そもそも他と同じことをやっていたらこのご時世生き残れない。 君の会社は君の会社なりのやり方を見つけたんだと思う。だから生き残っているんだろう。 もっと、堂々としていいよ。
383 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 00:16:10 ] >>381 なかなか COBOL やアセンブルの案件が見つからなくなってきたんですよね。。 でも、頑張ります!ありがとうございます。 >>382 ありがとうございます。 基本をしっかり抑えた上で、スタイルを大事にして行くことにします。
384 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 00:37:07 ] >>380 優秀であってもドカタ企業のドカタじゃどうしよもないよ 一部上場の正社員とドカタ企業のドカタじゃ霄壌の差
385 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 02:15:34 ] 言わなくてもわかってるからもうドカタに触れるのやめようよ 可哀想だろ俺が
386 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 02:27:32 ] 一部上場ならお給金もそれなりでしょ まともな本買いましょうよ
387 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 02:39:06 ] 初心者にまともな本買えって言っても、 どれがまともな本なのかわからんでしょ まともな本教えましょうよ
388 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 02:54:41 ] 学生の勉強じゃない仕事の事なんだから、休みの日にでも本屋に出向いて 中を見て初心者なりでも”自分”で選ぶべきだと、俺は思う で、幾つかの本を読破してこそ、まともな本かどうかの判断が付く脱初心者になって行くんだと思う その最初のステップを”初心者”と言う理屈で飛ばすような奴が プログラムの本を読んで技術力を上げていくなんて出来ないだろ そもそも、本人が教えてと言ってるならともかく 初心者なんだから教えるべき、と言って自分は教えてない奴は好きじゃないw
389 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 02:59:18 ] 兎にも角にも禿本は重要だよな。 特に後半の設計に関する部分を読んでない人は多いと思うけど、色々含蓄あるし。
390 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:02:13 ] 俺が書いたネタレスに入魂レスとは.... ネタと分かるように語尾を>>386 と同じにしたのに 釣られる奴居るんだな
391 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:05:39 ] >>388 長々と小言を言う暇があるなら、自分が薦める本を挙げればいいのに。 >>390 釣りならVIPでも行ってやれば?
392 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:15:54 ] だから最初の理解なんて人それぞれ 俺が良いと言ったって、合う合わないがある、だから教えないし、 自分でググるなり、本を手に取れって言ってるじゃん アンタゆとり?
393 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:25:13 ] 釣りに延々とマジレスしてきもいな
394 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 03:25:14 ] 以下のプログラムがうまく行かないのですが、 解決方法を教えて下さい。 5 class B; 6 7 class A{ 8 public: 9 int hoge; 10 A(int i){ i = hoge; } 11 12 B conv(){ return B(hoge); } 13 }; 14 15 class B{ 16 public: 17 int hoge; 18 B(int i){ i = hoge; } 19 20 A conv(){ return A(hoge); } 21 }; ------------------- エラー test.cpp: In member function ‘B A::conv()’: test.cpp:12: error: return type ‘struct B’ is incomplete test.cpp:12: error: invalid use of incomplete type ‘struct B’ test.cpp:5: error: forward declaration of ‘struct B’
395 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 04:39:09 ] Bの定義より後にA::convの定義を置けば上手くいく。 class B; class A { public: int hoge; A(int i) { i = hoge; } B conv(); }; class B { public: int hoge; B(int i) { i = hoge; } A conv() { return A(hoge); } }; B A::conv(){ return B(hoge); }
396 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 04:40:16 ] class B; class A { ... B conv(); ... }; class B { ... }; B A::conv() { return B(...); }
397 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 04:45:07 ] >>395 >>396 ありがとうございます。
398 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 05:36:49 ] complexは実数、虚数にreal()、imag()でアクセスするわけですが、 この関数って参照返すだけだから、 それだったら内部の実数、虚数変数に直接アクセスした方が関数呼び出し無い分早いだろうし、 ソースコードも見やすく(多分)なると思うのですが、 これには何か理由があるのでしょうか?
399 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 08:12:11 ] ja.wikipedia.org/wiki/%E3%83%87%E3%83%BC%E3%82%BF%E6%8A%BD%E8%B1%A1%E5%8C%96
400 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 10:53:54 ] >>398 基本的に内部の実装に触れられるようにしちゃうと いざインターフェースは変わらないが実装が変わるような仕様変更をするときに 悲劇がおこるからとか。
401 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:06:24 ] あと、関数呼出のオーバーヘッドなんてないと思っていいよ。 それくらいコンパイラの最適化でいともたやすく消え去るられる。
402 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:11:10 ] そんなことはない だったらなぜわざわざinlineなんて予約語が用意されてるんだ? 関数呼び出しを減らすのは高速化の基本のキだ ウソを教えるのはやめろ
403 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:15:36 ] >>402 の年齢が気になる
404 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:15:42 ] 現在は なんでもかんでもゲッタセッタ教 の勢が強いから 狂信者の戯言は聞き流して己が道を進めばいいと思うよ
405 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 14:20:59 ] 下駄雪駄教徒だって、下駄雪駄は基本的にインライン関数にするだろう アウトラインの下駄雪駄なんておぞましいものは狂信者でも書くわけがない 少なくとも長いループ内では、アウトライン関数を呼んではいけない これは今も重要なガイドラインだ
406 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:01:18 ] 少なくともC++でフィールド変数直接アクセスするのは 百害あって一利なしだな。 >>402 >>401 が言ってるのはreal/imagの話だろ。 言葉足らずならそう指摘すればいいのに。力抜けよ。
407 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:05:37 ] ja.wikipedia.org/wiki/%E3%83%A1%E3%82%BD%E3%83%83%E3%83%89_ (%E8%A8%88%E7%AE%97%E6%A9%9F%E7%A7%91%E5%AD%A6) 下の方のアクセサの項目
408 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:06:24 ] せったげったって言うけどさ hoge.hage.foo.bar.set_value(0); とかはあったとしても hoge.get_hage().get_foo().get_bar().set_value(0); なんてことはしないよね この辺みんなどうしてるんだろ。 hage や foo は public なメンバにするよね?でもそれだと統一感ないよね?
409 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:08:19 ] どっちもねーよ
410 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:12:41 ] データ主体なものは構造体にしている メンバ関数はコンストラクタ、コピー、シライライズ、ダンプ、アサートぐらいしか定義しない それと同じ目的の変数は構造体にまとめる class A
411 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:15:28 ] 途中で送ってしまったぜ 後ろの段落は class の中で struct xxx_param とか struct xxx_item, xxx_state とかを定義して まとめてあつかう
412 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:18:06 ] おなじくどっちもねーよ > hoge.hage.foo この辺までですでに内部状態の一貫性を壊していると思われ(setの場合)。 設計が悪いから作り直せ。
413 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:38:47 ] え?でもさ、よくしらないけど、フォームアプリなんて System.Form.SetValue() みたいにどんどん深くなっていってない? 実モデルでたとえても、例えば 部屋A.本棚B.本C.ページD.GetText(); みたいな例は十分にありえるんじゃないの?
414 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 15:39:02 ] >>402 は今でもregisterを使っているのだろうか。
415 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:02:00 ] せめてこうだろ void foo::set_bar_value(int n) { bar.set_value(n); } void hage::set_bar_value(int n) { foo.set_bar_value(n); } void hoge::set_bar_value(int n) { hage.set_bar_value(n); } hoge.set_bar_value(0); 俺はvector3やmatrix44みたいなのは公開してるなあ。 あとは、クラスとして独立させるほどでもないが、関連のあるメンバ変数をグループ化したいときに structを使ってる。
416 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:05:06 ] >>413 System.Form.SetValue() どこのC#? あとそれ名前空間と混ざってるから。
417 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:13:50 ] でも名前空間って要するに全メンバがpublic静的なクラスのことだろ
418 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:21:41 ] >>415 それはない
419 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 16:38:05 ] しょぼい設計でなければ 名前空間で内部状態を壊されることはないから問題ない。
420 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:11:46 ] class A{ B* get(); } というクラスで、get()メソッドをインライン関数にしたい テンプレートクラスと同様に同じヘッダファイルに実装を書く場合、 inline B* A::get(){ コード } の「inline」は意味があるのでしょうか?
421 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:15:11 ] ない というか意味があるかないかで言うなら、inlineは常に意味がない コンパイラは自由にインライン化要請を無視できるし、要請されてない関数をインライン化することが出来る
422 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:25:36 ] 規格上はそうだが、一応現実的には意味はあるから、意味なしと言い切ってしまうのは誤解を招くのでは。 例えば俺が使っているコンパイラは「inline指定に従う/無視する」「inline指定がなくても勝手にinline化する/しない」 などの指示を自分で出すことができる。
423 名前:422 mailto:sage [2009/05/24(日) 17:26:22 ] もちろん環境依存の話だから、詳しくは「自分が使ってるコンパイラについて調べてね」ってことだけど。
424 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:33:39 ] inlineは、コンパイラの最適化云々ではなく、 ヘッダに直接(= インラインで)定義するぞ、という意味だと思えばいい。
425 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 17:53:20 ] >>424 変な誤解を生むから詳しく知らないなら 黙ってるか断定的に書くな。
426 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:02:20 ] >>424 適当なこと書くなよ。 cppファイルにてもinlineは書けるわけだし もう何が何なのかw
427 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:05:30 ] >>424 インラインに”ヘッダに直接”という意味があったなんて白なkったおれはどうすればいい?
428 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:06:30 ] "C++" "ヘッダに直接" "インライン"の検索結果 5 件中 1 - 5 件目 (0.33 秒)
429 名前:426 mailto:sage [2009/05/24(日) 18:08:40 ] >>428 よくやったwww
430 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:35:56 ] ところで>>420 でinlineを付けなかったらリンカエラーにならない? そういう意味でinlineはいると思うんだけど。
431 名前:デフォルトの名無しさん [2009/05/24(日) 18:37:06 ] んなわけない。
432 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:38:13 ] >>430 よくわからないけどオブジェクトコードにクロージャっぽいのがつくられるきがするぅ
433 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:53:52 ] int DLLAPI (*mcOpenDevice ) (void) = NULL; あるDLLについてたヘッダ内の記載なんですがVCで「構文エラー : '('」が出ます カッコの数は合ってるし、関数ポインタの宣言としてもおかしくないように見えるのですが 詳しい方から見て何か違和感はありますでしょうか? ちなみに #define DLLAPI WINAPI されてます
434 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:55:29 ] ん、俺の環境(gcc 3.4.5)だと、ヘッダファイルのクラス定義内部じゃないところにinlineがついてない関数定義があって それを複数の翻訳単位でインクルードしてコンパイルしてリンクすると、多重定義エラーでるなぁ。
435 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:56:14 ] 問題ないと思う 多分その直前に何かおかしい所がありそう
436 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 18:58:40 ] WINAPIを関数名と勘違いしちゃったんだろうな。
437 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:02:20 ] >>435 ありがとうございます 自分の作ったのでも結構悩むのに、さらに人の作ったのだと難度高いです・・・ もうちょっと見直してきます
438 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:18:02 ] プリプロセスだけ通してみるとか
439 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:19:27 ] 先に<windows.h>をインクルードしたらいいと思う。
440 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:30:27 ] >>438 プリプロセッサ以外の記述を削除ってことですか? >>439 <windows.h>とかメジャー系はいくつか試したんですがダメでした・・・
441 名前:433 mailto:sage [2009/05/24(日) 19:35:13 ] >>433 のはMCRWwinというツールのです ttp://www.geocities.jp/altshibabou/win/image/mcrwwin110.LZH どなたかVC使いの方でビルド通るか実験して頂ける方はおりますでしょうか 最近入れなおしたので、私のVCの設定が悪いのかもしれない
442 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 19:37:14 ] とりあえず #define WINAPI か #define WINAPI __stdcall って書いとけ。
443 名前:433 mailto:sage [2009/05/24(日) 19:52:22 ] >>438 すんません、勘違いしてました /E /Pで.i吐かせて該当行見ましたら int __stdcall (*mcOpenDevice ) (void) = ((void *)0); と展開されてました、他の箇所も見た感じ悪くはなさげなのです
444 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 20:09:04 ] >>443 おお、それはエラーになる。 int (DLLAPI *mcOpenDevice)(void) = NULL;としてみるんだ。 msdn.microsoft.com/ja-jp/library/zxk0tw93.aspx 一番最後のExampleでもそうなっている。
445 名前:420 mailto:sage [2009/05/24(日) 20:19:30 ] >>421-434 VC++2003を使っていて、今のところ1つのcppファイルからしかインクルードしてないので inlineを付けても付けなくても問題はなかったのですが、 付けないとcppファイル毎に関数が定義されているとみなされる=>>430 や>>434 ということなんでしょうね。 どうもありがとうございました。
446 名前:433 mailto:sage [2009/05/24(日) 20:19:42 ] >>444 ありがとうございます、無事ビルド通りました >>436 さんも多分同じこと指摘してくれてたんですよね、分からなくて申し訳ないです みなさんのおかげで先に進めそうです 本当にありがとうございました。
447 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:06:14 ] 超初心者ですがコンパイラ何使ったらいでしょう?
448 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:06:41 ] gcc
449 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:09:35 ] 書き忘れました windowsで使えるものをお願いします
450 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:10:55 ] >>448 よくわからないのでとりあえずぐぐってみます ありがとうございます
451 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:13:22 ] >450 WinならMinGW まあgccなんだけどな
452 名前:デフォルトの名無しさん [2009/05/24(日) 21:13:37 ] >>447 Visual C++ Express 2008 www.microsoft.com/japan/msdn/vstudio/Express/
453 名前:デフォルトの名無しさん mailto:sage [2009/05/24(日) 21:15:33 ] >>451-452 レスありがとうございます
454 名前:デフォルトの名無しさん [2009/05/24(日) 21:35:25 ] Toubo C++
455 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:23:27 ] >>454 初めて聞いた。 そしてググってみてちょっと面白かった。
456 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 01:28:58 ] 7件しかヒットしないぞ? しかも全部中国。
457 名前:デフォルトの名無しさん mailto:sage [2009/05/25(月) 02:44:48 ] 昔はTurboCといえば、M$としのぎを削った人気コンパイラだったのだよ。