1 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 20:07:25 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
15 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 14:01:24 ] >>13 ところが"C言語"では宣言しなくても printf が使えるんだな。 未宣言の関数コールは暗黙で int を返す引数チェックなしの関数とされるのな。 "C++言語"だと文法エラーではじかれるが... まぁあまりいい習慣でないことは確かだ。
16 名前:13 mailto:sage [2007/01/02(火) 15:13:33 ] >>15 ほんとだ。うちのgcc(cygwin)でも警告も出さずに通った。 これって処理系依存ではなく、Cの仕様? だとしたら、今まで全然知らんかった。
17 名前:デフォルトの名無しさん mailto:sage [2007/01/02(火) 18:53:45 ] >>10 教科書的にはどれもこれも手放しで const マンセーしてるけど 実用的には define のほうが都合がいい場面があるのは確か。 例えば #ifndef hoge #define hoge ... #endif みたいなことをしておけばソースコードを変更せずに コンパイル時にマクロを指定して動作を変更できる。
18 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 00:28:59 ] >>17 それは正当な #define ディレクティブの使い方じゃない? ・defineの定数は、コンパイル時にリソースが無駄になる可能性がある (たぶんないけど) ・constの方が厳密な定義ができる。 ってことだと思うけど。
19 名前:デフォルトの名無しさん [2007/01/03(水) 00:31:11 ] printfの書式に対するデータって数値でもアドレスでもどっちでもOK?
20 名前:デフォルトの名無しさん [2007/01/03(水) 00:51:16 ] 分かった %dは数値だな %Sはアドレス か?
21 名前:のいまんさん [2007/01/03(水) 01:30:05 ] MFCで画像をウインドウの右側に移動させたいんですけど、どういうコード書けば良いですかね?
22 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 04:05:02 ] char vp[sizeof(short)*10]; int i; for(i=2;i<12;++i){ ((short*)vp)[i-2]=i*i+i; } for(i=0;i<10;++i){ printf("((short*)vp)[%d] : %d\n",i,((short*)vp)[i]); ポインタの粘土細工 by 冬房
23 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 07:54:30 ] #define BUFFER_SIZE 256 static void Write(const char* comment, ...)const{ char buf[BUFFER_SIZE]; va_list ap; FILE* pFile; va_start(ap, comment); if(vsnprintf(buf, BUFFER_SIZE, comment, ap) < 0){ return; } va_end(ap); pFile = fopen(LOG_FILE_NAME, "at"); fprintf(pFile, "%s\n", buf); fclose(pFile); } こんなかんじのフォーマットを指定して書き込む関数があるのですが、 これをC++的に変更するとどうなるでしょう? ofstreamを使うのかと思うのですが、引数リストの扱いがわからず困っています
24 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 09:51:34 ] >>23 C++使うならファイルの書き込みと、コメント生成部分は別クラスにするべき
25 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 10:00:58 ] すいません、上のはあくまで適当な例という事で。。。 質問の意図は「fopenと引数リストを使ったファイルへの書き込みを C++チックに書くとどうなるのか?」ということなんです 曖昧な書き方をして申し訳ありません。
26 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 10:27:27 ] 可変長引数の部分はC++でも同じ。 ファイル出力部分をofstreamにすればよいと思います。
27 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 10:28:48 ] >>25 つ「壊れていないものを直すな(弄るな)」 別になんか困ってることでもなきゃ無理に修正せんでもそのままでいんじゃね?
28 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 12:57:28 ] そうですか…特に困ってはいないのでファイル出力部分だけ書き換えることにします >>26-27 ありがとうございました
29 名前:デフォルトの名無しさん mailto:sage [2007/01/03(水) 15:07:41 ] #include <fstream> class Hoge { public: static std::ofstream Write; }; static std::ofstream Hoge::Write(LOGFILE, std::ios::ate); ateは追加出力を意味し、"a"相当、binaryを指定しなければテキストモードになる。textなどといった指定は無い。 前: Hoge::Write("Hoge: %d\n", 1); 後: Hoge::Write << "Hoge: " << 1 << std::endl;
30 名前:15 mailto:sage [2007/01/04(木) 18:59:12 ] >>16 C言語の仕様。 ただ宣言はみんな明示的にしようということでC++では禁止になった。
31 名前:デフォルトの名無しさん [2007/01/05(金) 17:32:37 ] >>30 C++はCのスーパーセットだから、やっぱりOKなのですか?
32 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 17:43:37 ] 単に拡張しただけであってスーパーセットではない。
33 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 17:45:15 ] 31には30の3行目が見えないのだろうか。
34 名前:デフォルトの名無しさん [2007/01/05(金) 18:20:51 ] このまえC++のスレで15が嵐をしていたので、あぼーんせっていしてあります
35 名前:デフォルトの名無しさん [2007/01/05(金) 19:15:16 ] 質問です。大学の後期の授業の後半でいきなりC++の話題になって、 その課題を冬休み中に解かなければならなくなりました。(プログラム の知識ゼロ)それで、C++とSDKをインストして、設定後に とりあえず先生自作のサンプルを実行させようとしたら、下の画像の ような表示になってしまい、動きませんでした。 bebe.run.buttobi.net/up/src/be_1800.jpg.html また、先生の授業でのスライドでは、新しいプロジェクト作成時に win32プロジェクトと出るはずなのに、出ませんでした↓ bebe.run.buttobi.net/up/src/be_1801.jpg 何が原因かわからないのですが、どなたか教えて頂けませんでしょうか?
36 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 19:45:09 ] 先生に聞けばいいんじゃないかな
37 名前:デフォルトの名無しさん [2007/01/05(金) 20:02:45 ] >>36 冬休みは、あと三日です。 ちなみに、nwg.hというのは標準では入ってないんですよね?
38 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 20:17:36 ] 標準では無いと思うよ。 nwg.hって先生自作のファイルでしょ? 持ってないなら無理でしょ。 サンプルなんか放っておいて課題やれば?
39 名前:デフォルトの名無しさん [2007/01/05(金) 20:35:47 ] Cで√の入った計算式立てるときってどうしたらいいの?
40 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 20:37:19 ] >>39 √の中を計算してからsqrt()関数でその平方根を計算 www.bohyoh.com/CandCPP/C/Library/sqrt.html
41 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 20:46:05 ] >>40 √2 とかはどうやって扱ったらいいですか?
42 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 21:01:52 ] >>41 double sqr2 = sqrt( 2.0f );
43 名前:デフォルトの名無しさん [2007/01/05(金) 21:10:39 ] >>42 ありがとうございます。 それヒントにがんばってみます
44 名前:ただ [2007/01/05(金) 21:20:36 ] Visual C++6.0 でアクセスに接続する方法が載っているサイトを教えてください。お願いします。
45 名前:デフォルトの名無しさん mailto:sage [2007/01/05(金) 21:57:29 ] >>44 マルチはやめてください。お願いします。
46 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 09:45:14 ] >>42 ×2.0f ○2.0
47 名前:デフォルトの名無しさん [2007/01/06(土) 11:37:47 ] exp(ix)を取り扱いたいんだけど、虚数単位を定義して〜てのはできないの? いちいちsin,cosで書かなきゃ行けないの?
48 名前:デフォルトの名無しさん [2007/01/06(土) 11:41:18 ] 72.14.235.104/search?q=cache:4sY05eC7e78J:www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/c-cal.html+C%2B%2B+%E8%A4%87%E7%B4%A0%E6%95%B0&hl=ja&ct=clnk&cd=3&lr=lang_ja&inlang=ja 等を参考にして、別々に書きだしてやれば行けそうですが、冗長で好ましくないと思います。
49 名前:デフォルトの名無しさん [2007/01/06(土) 11:44:22 ] 連レスすまない。 最初の疑問はComplex環境下でexp(0,3)とすればexp3iになるのかな?
50 名前:デフォルトの名無しさん [2007/01/06(土) 13:40:43 ] >49 complex<double> A(0,3) exp(A) でおk。
51 名前:デフォルトの名無しさん [2007/01/06(土) 14:27:28 ] こんにちは。 フラグ処理のコードを書いています。 wire_ack_acquirememt_bus[object_numb][wire_wsr_num] はwire_wsr_num行の中で一つだけアサートすることになっています。 ack_sender = flag_pick(wire_ack_acquirememt_bus[object_numb][wire_wsr_num], 1, SEND_ON_BUS); で送信者がアサートさせているフラグを拾い、列番号object_numbをピックアップします。 後半コードでその列から若い列、古い列へフラグを埋めていきます(flag_fill(fill_data, fill_target, fill_width, fill_start_bit))。 VC++8でトレースして追ってみているのですが、挙動がおかしく、その問題点を探しているのですが、私には見つけることが出来ませんでした。 flag_pick()、flag_fill()も公開する必要があると思いますが、まずは下記のコードで分かることを教えていただけないでしょうか。 ff_event_check()はソースのアサートとネゲートイベントで1を返し続けます。
52 名前:デフォルトの名無しさん [2007/01/06(土) 14:28:37 ] >>51 /* ACKNOWLEDGE for ACQUIREMENT*/ i = 0; sender_no_ack_acq_bus[wire_wsr_num] = 0; for (wire_wsr_num=0; wire_wsr_num<WSRF_SIZE; wire_wsr_num++) { prev_sender_no_ack_acq_bus[wire_wsr_num] = sender_no_ack_acq_bus[wire_wsr_num]; for (object_numb=0; object_numb<SPACE_SIZE; object_numb++) { ack_sender = flag_pick(wire_ack_acquirememt_bus[object_numb][wire_wsr_num], 1, SEND_ON_BUS); if (ack_sender == ASSERT) { sender_no_ack_acq_bus[wire_wsr_num] = object_numb; i = i | ASSERT; } } if (object_numb == SPACE_SIZE && i == NEGATE) { wire_reset = NEGATE; sender_no_ack_acq_bus[wire_wsr_num] = prev_sender_no_ack_acq_bus[wire_wsr_num]; } else wire_reset = ASSERT;
53 名前:デフォルトの名無しさん [2007/01/06(土) 14:29:29 ] >>51 続き wire_temp_ack_acq_bus = flag_pick(wire_ack_acquirememt_bus[sender_no_ack_acq_bus[wire_wsr_num]][wire_wsr_num], 1, SEND_ON_BUS); wire_event_temp_ack_acq_bus = ff_event_check(&ff_event_temp_ack_acq_bus, 0, &ff_event_holder_temp_ack_acq_bus, 0, wire_temp_ack_acq_bus, 0); wire_event_temp_ack_bus_assert = wire_event_temp_ack_acq_bus & wire_temp_ack_acq_bus & 1; wire_event_temp_ack_bus_negate = wire_event_temp_ack_acq_bus & ~wire_temp_ack_acq_bus & 1; for (object_numb=sender_no_ack_acq_bus[wire_wsr_num]; object_numb>0; object_numb--) { wire_ack_acquirememt_bus[object_numb -1][wire_wsr_num] = flag_fill(wire_temp_ack_acq_bus & ~wire_event_temp_ack_bus_negate & wire_reset & 1, wire_ack_acquirememt_bus[object_numb][wire_wsr_num -1], 1, 0); } for (object_numb=sender_no_ack_acq_bus[wire_wsr_num]; object_numb<SPACE_SIZE-1; object_numb++) { wire_ack_acquirememt_bus[object_numb +1][wire_wsr_num] = flag_fill(wire_temp_ack_acq_bus & ~wire_event_temp_ack_bus_negate & wire_reset & 1, wire_ack_acquirememt_bus[object_numb][wire_wsr_num +1], 1, 0); } }
54 名前:デフォルトの名無しさん mailto:sage [2007/01/06(土) 15:10:15 ] >>49 exp(complex<double>(0, 3))
55 名前:49 [2007/01/06(土) 18:38:24 ] >50 あほかwそんな長ったらしい書き方するかよw >54 できた。ありがと。
56 名前:デフォルトの名無しさん [2007/01/08(月) 06:03:06 ] 【ネガティブ派遣根性チェック】 3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。 □偽装派遣先の社員の意見にはたとえ間違っていても反対しない □偽装派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい □自社に仕事を持ち帰れるように言われるとムカつく □自社で仕事なんてできるわけがない □派遣/受託の差異を指摘する人間はムカつく □偽装派遣先には仕事だけでなく自分のプライベートについても指示して欲しい □自分の月額金額を知らない □偽装派遣先社員より自分の生涯収入が低いのは当然だ □偽装派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ □今のプロジェクトが終わっても同じ偽装派遣先に常駐したい
57 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 06:46:39 ] はい、俺負け組決定!! きっと本当の人生は来世!! いや、人間じゃなくて鯨あたりになって、海を悠々自適にすごすのも良いな〜 ってことは、グリーンピース応援しなきゃ。 ビフィズス菌で、胃腸で大活躍ってのも悪くないな。 あー早くポックリいかねぇかな。 親が死んだ後、雷あたりにぶち当たっておっちぬのがベストなんだけどな〜・・・
58 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 12:07:01 ] なんで「偽装」なの?
59 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 12:29:15 ] >>58 派遣元は「うちはプロです」と言っておきながら現実には昨日今日入社したばかりの 偽装派遣先に常駐させ、派遣先社員の指示の下で働かせる実質アルバイト派遣業だから
60 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 12:41:10 ] >>59 あんた馬鹿でしょw
61 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 17:33:41 ] ワロタ
62 名前:デフォルトの名無しさん mailto:age [2007/01/08(月) 19:59:00 ] すれ立てるまでもない質問はここでスレが無いのでここで聞きますが オープンソースのSNSって何がありますかね? 開発言語別で教えて頂けませんでしょうか? でも、失礼なのでC++でのオープンソースSNSだけでも教えて頂ければと思います
63 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 20:01:56 ] webprog逝ったほうがいいよ
64 名前:デフォルトの名無しさん [2007/01/08(月) 21:15:49 ] 黄色い「独習C」って本やったことある人いますか? あの本をマスターするとどれくらいのソフトが作れるようになるんですか?
65 名前:デフォルトの名無しさん mailto:sage [2007/01/08(月) 21:20:54 ] >>64 3つくらい
66 名前:デフォルトの名無しさん [2007/01/09(火) 11:38:54 ] MAME32をジョイスティックで動かすことをしたいのですが keybd_eventをつかっても動きません メモ帳で試してみたら、動きました 何か他の方法があるのでしょうか
67 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 13:05:08 ] constとstatic constの違いを教えてください
68 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 13:23:27 ] >>67 staticがつくかつかないかです。
69 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 13:24:44 ] >>67 それが何を修飾しているかによって異なります。
70 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 13:25:27 ] >>67 Cですか? それともC++ですか?
71 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 13:31:14 ] C++です。修飾しているのはintやdoubleです。
72 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 13:41:45 ] 前者は定数で後者は静的な定数です。
73 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 16:40:21 ] 整数リテラル0が何故、8進リテラルになるのかが分かりません。教えて下さい。
74 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 16:51:00 ] スレタイがエロ過ぎると思います。どうにかしてください。
75 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 16:57:09 ] >>73 0で始まる数値は8進リテラルと決められているからです。 従って、10進リテラルで0を表現することは(事実上)できません。
76 名前:デフォルトの名無しさん mailto:sage [2007/01/09(火) 20:00:12 ] じゃ1-1で
77 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 04:38:30 ] >>73 0でも 00でも 0x0でも 意味は一緒だから気にすんな
78 名前:デフォルトの名無しさん [2007/01/10(水) 05:34:56 ] 0AUと0nmは同じ長さ
79 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 07:32:12 ] >>77 意味は違います。同じように使えるだけです。 >>78 工学屋から言わせれば、精度が違う。
80 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 17:57:07 ] int _tmain() { for(int n=0;n<=10;n++){ for(int i=0;i<=10;i++){ cout<<n<<" "<<i<<endl;} cout<<n<<" "<<i<<endl;} } とするとiが0から11まで出力されます。10じゃないのかな?なんでだろ。
81 名前:デフォルトの名無しさん [2007/01/10(水) 18:00:31 ] あげわすれました。よろしくお願いいたします。
82 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 18:02:24 ] >>80 <=以下 <未満
83 名前:デフォルトの名無しさん [2007/01/10(水) 18:09:20 ] それは大丈夫です。>80式を動かすとnについては0-10までなのですがiが0-11となってしまいます。 for構文だからi=10のときはi<=10を満たすので「cout<<n<<" "<<i<<endl;」を実行しこのときiは10となります。 その次にiを++するのでi=11となりi<=10を満たさなくなるので、i=11が出力されるはずがないと思ったのです。 なんでなんでしょうか。
84 名前:デフォルトの名無しさん [2007/01/10(水) 18:11:51 ] n i 0 1 0 2 ・・・ 0 9 0 10 0 11 ・・・ 10 1 ・・・ 10 10 10 11 となります。変だと思うのです。
85 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 18:19:16 ] >>84 2行目の >cout<<n<<" "<<i<<endl;} が余計だろう。ここのi は既に内側のforのスコープから外れてるぞ。
86 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 18:21:13 ] >>80式を動かすとnについては0-10までなのですがiが0-11となってしまいます。 >>84 の実行例はiは1-11になってるように見えるが? >>80 で書いたコードと>>84 で実行してるコードは違うだろ?
87 名前:デフォルトの名無しさん mailto:sage [2007/01/10(水) 18:31:57 ] [完成] int _tmain() { for(n=0;n<=10;n++){ for(i=0;i<=10;i++){ cout<<n<<" "<<i<<endl;} //cout<<n<<" "<<endl; } } [原因] 指摘をもとに2行目を削除したところ正しく出力されました。ありがとうございました。 [謝辞] >85 ご指摘の通りでした。2行目が必要だと思っていましたが、実際には不要なものだったのですね。 >86 申し訳ないです。慌てていて>84でiが0の場合が抜けています。 みなさま迅速なご指導ありがとうございました。これで数時間悩んでいてほとほと困っていましたが 解決することが出来ました。 [結果] n i 0 0 ・・・ 0 9 0 10 ・・・ 10 1 ・・・ 10 10
88 名前:デフォルトの名無しさん [2007/01/11(木) 19:05:47 ] Cのprintfにて文字色を変えて表示させたいのですが \033[31m のような指定では無く RGB指定で細かくして表示させたいのですが そのようなことは可能でしょうか?
89 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 19:38:08 ] 世の中そういうことができる環境があるかもしれない。 或いは自分で作ればそういうことだってできるだろう。
90 名前:よろおね [2007/01/11(木) 22:27:20 ] 知人からソースを貰いました。 コンパイルしようとしたら $ gcc main.c main.c:6:19: stdio.h: No such file or directory main.c:7:20: string.h: No such file or directory main.c:8:20: stdlib.h: No such file or directory となりました。 「stdio.h, string.h stdlib.h も寄越せ ゴルラ!」と言って一週間。 未だに貰えません。 どうしたらいいでしょう?
91 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:03:48 ] 明らかにあなたのビルド環境が異常です
92 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:07:36 ] >>90 stdio.h, string.h stdlib.hは知人から貰うようなものじゃない。 コンパイラをダウンロード・インストールすれば付いてくるもの。 環境さえまともに整えられないのか?
93 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:14:02 ] 知人も在る場所知らない希瓦斯
94 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:16:11 ] ワロス.なんでgccがあってstdio.hがねーんだよ(w ホラヨ(w つ ftp.gnu.org/gnu/glibc/glibc-2.5.tar.gz
95 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:18:11 ] どうせ #include "stdio.h" とか書いちゃってるオチだろ。
96 名前:デフォルトの名無しさん mailto:sage [2007/01/11(木) 23:20:47 ] >>95 その場合も、見付からなければ<stdio.h>と書いたのと同じ方法でヘッダを探すことになっており、 gccもそれに則っているから問題ない。
97 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 11:35:58 ] ↓このあと、>95 の「釣れた」宣言
98 名前:偽95 mailto:sage [2007/01/12(金) 15:21:42 ] Fish On!! かかったかかったーー!! ん?あっれぇ〜 根掛かりだ〜
99 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:08:14 ] わらたw
100 名前:デフォルトの名無しさん mailto:sage [2007/01/12(金) 16:58:50 ] >>98 =99 かわいそす
101 名前:デフォルトの名無しさん [2007/01/13(土) 14:28:22 ] Microsoft Visual C++ 2005 で.cppのファイル開いてもビルトがでない。 どーやってコンパイルすればいいの!!
102 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 16:07:57 ] ‖ ___ ‖ / `ヽ‖ ,:' 、ゑ ,' ; i 八、 |,! 、 ,! | ,' ,〃ヽ!;、 |!| l川 l リへ'==二二ト、 リ川 !| i′ ゙、 ', ', lルl ||,レ′ ヽ ,ノ ,〉 |川'、 ,,.,.r'" ,,ン゙ `T" ! ,/ '.ノ,/| / ,!´ !゙ヾ{ | / ,' i ゙ ! ,l゙ ,r‐'ヽ-、! ', l| { `ヽ ! 「゙フ ,>┬―/ ; i,`{ / /リ川' ', ゙、 / ,/ ゙、 ゙、 ノ / ', `、 \_/ ; ゙、ヽ、 l__ ! ___〕 ,、l  ̄`‐┬―r┬‐r'´ `'‐'′ | .! | | | | .| |
103 名前:偽95 mailto:sage [2007/01/13(土) 16:09:17 ] 新規作成→新しいプロジェクト→特にソリューションディレクトリが必要なければチェック消す →プロジェクト名(好きな名前で結構)[OKを押せば勝手に指定した場所の所にプロジェクトフォルダが出来る] →OKを押して次を押す→windowsアプリケーションじゃないならプリコンパイル済みヘッダーのチェックを消す →コンソールアプリケーションチェック、空のプロジェクトチェック、そんで完了押す →左のソースファイルフォルダ右クリック新しい項目追加 →C++ファイルを選んで名前を付けて追加(C言語なら拡張子を.cにする) →ソース書いてコンパイルしてビルドしてデバッグなしで開始(デバッグするならデバッグで)
104 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 21:06:16 ] C++で文字列の先頭から、途中までの文字列が一致するか否かを判定する関数は ありますか? EX: 比較文字列 2ch 比較対象文字列(一致) 2ch close 比較対象文字列(不一致) 3ch open こんな感じで判定できるような関数なのですが・・・・・? Windows2000 VS2005 SDK
105 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 22:03:36 ] string
106 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 22:52:02 ] 不可解なエラーに悩まされています。 原因はどの辺りにあるかわかりますか? たとえば、グローバルで定義したint a、int bがあるとして、 プログラム中でa++したときに、なぜかbも一緒に++されてしまう。 aをaaaに変更してみたりその他の関係のない変数の変数名を変更してみたり、 int a=0;と定義するとエラーが出なくなることもある。 しばらくコーディングを進めると今度は違う変数同士が干渉し始める。 どの辺りに起因して同じ領域に違う変数が割り当てられてしまうのか、見当もつきません。 WinXP gcc(cygwin)
107 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 23:27:22 ] >>106 gccなんてクソコンパイラ使ってるからだよ。m9(^Д^) プギャー
108 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 23:36:02 ] >>106 m9(^Д^) プギャー
109 名前:デフォルトの名無しさん mailto:sage [2007/01/13(土) 23:37:55 ] >>106 よくわからんで作ってることが原因だな
110 名前:106 mailto:sage [2007/01/13(土) 23:48:16 ] >>109 わかりました。基本から出直してきます。 ご返答ありがとうございました。
111 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 00:00:46 ] &b(a); とか?
112 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 13:25:42 ] doubleの要素型で、要素数が5の配列の全要素に0.0を代入して表示するプログラムが分かりません。教えて下さい。C++です。
113 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 14:06:06 ] #include <iostream> int main() { double d[5] = {0.0}; for(int i = 0; i < 5; i++) std::cout << i << " : " << d[i] << std::endl; return 0; }
114 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 15:00:16 ] >>113 ありがとうございます!けど実行すると、0が表示されてしまいます....
115 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 15:06:08 ] 確認のために0を表示するように書かれているからだ。
116 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 15:06:50 ] 0というより、0になった配列の各要素と言うべきだな。
117 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:12:23 ] 0 じゃなくて 0.0 を表示したいのではないかと esp
118 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:15:03 ] ほれ #include <stdio.h> int main() { double d[5] = {0.0}; for(int i = 0; i < 5; i++){ printf("%.1lf\n", d); } return 0; }
119 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:52:50 ] >>117 そうです。 >>118 すいません。それはC++の場合はどうすればいいんでしょうか?
120 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:57:39 ] #include <cstdio> int main() { double d[5] = {0.0}; for(int i = 0; i < 5; i++){ printf("%.1lf\n", d); } return 0; }
121 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 16:58:12 ] >>120 ありがとうございます。
122 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 17:08:17 ] d[i]
123 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 17:44:48 ] Cプラプラで0.0から1.0まで0.001おきに、その値と、その値の2乗を表示するプログラムって、どう作ればいいんですか?
124 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 17:48:56 ] >>123 まずはC++のコンパイラを入手し、お前が使ってるPCにインストールする。
125 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 20:08:02 ] C++なら_asmが使えるからアセンブリで書いてやろうと思ったけどやめた
126 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 22:47:07 ] int data[10]={0};//dataの中身を全部0で初期化 これをクラスで記述する方法ってあるんでしょうか struct a{ int data[10]; a():??{} };
127 名前:デフォルトの名無しさん mailto:sage [2007/01/14(日) 23:44:50 ] a() : data() {}でできない? できないならおとなしく、コンストラクタのブロックの中でstd::fillでもするしかないな。
128 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 00:37:06 ] >>127 出来ました!こんな書き方があったとは ありがとう
129 名前:デフォルトの名無しさん [2007/01/15(月) 04:20:32 ] 画像のピクセルサイズを取得したいのですが どうすれば取得できますか?
130 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 09:05:21 ] 画像ファイルの構造を知る
131 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 15:38:57 ] 男ならwaveだろうがbmpだろうが黙ってバイナリfstream
132 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 18:29:29 ] >>129 BITMAPINFOを足がかりに
133 名前:Cはできた(過去形)人 [2007/01/15(月) 18:29:34 ] BorandC++を使ってるんですが・・・ <iostream>ファイルをオープンできません とでてコンパイルできません・・・ いったいどうすれば・・・
134 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 18:34:02 ] >>133 お前じゃどうしようもないから諦めろ
135 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 18:46:29 ] >>133 普通にググったら見落としに気づくかもよ。
136 名前:デフォルトの名無しさん [2007/01/15(月) 18:54:30 ] 分割コンパイルしたオブジェクトファイルをmain.oも含めて静的ライブラリに まとめた場合、一般にそのライブラリのみで実行ファイルをビルドすることは できるのでしょうか? GCCだとできたのですがVCやBCCだとどうなんでしょう? libfoo.aがmain.o, hoge.oで構成されている場合、GCCの例だと gcc -o exefile libfoo.a でexefileという実行形式を作成できました。
137 名前:デフォルトの名無しさん [2007/01/15(月) 18:57:51 ] 256*256の二次元配列を作りたいのですが、実行するとStack overflowとでてしまいます。 どうにか回避する方法はないでしょうか?
138 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 19:06:23 ] >>137 ヒープに割り当てる
139 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 19:10:57 ] mainを含んだ静的ライブラリってのは、 Win32のスクリーンセーバライブラリがそんな感じだな。
140 名前:137 [2007/01/15(月) 19:36:29 ] >>138 すみません。 ヒープに割り当てる方法を教えてください。
141 名前:136 [2007/01/15(月) 19:39:26 ] 今vc8で試してみたのですができませんでした。 具体的には cl /EHsc /c main.cpp lib.cpp lib /out:library.lib main.obj lib.obj cl /Feout library.lib out.objが開けないとエラーがでてしまいます。
142 名前:デフォルトの名無しさん [2007/01/15(月) 19:46:55 ] >>140 ヒープに割り当てるというのはmalloc(Cの場合)やnew(C++)などで 動的にメモリを確保することです。 あとは調べればわかるかと思います。
143 名前:デフォルトの名無しさん mailto:sage [2007/01/15(月) 21:39:29 ] >>141 できたぞ。 cl /EHsc /Zl /c test.cpp lib /out:hoge.lib test.obj link /machine:x86 /entry:mainCRTStartup /out:HOGE.EXE msvcrt.lib hoge.lib /entryの代わりに/subsystem:consoleでもうまくいった。 またcl経由でリンカを呼び出してもできる。 cl /MD hoge.lib /link msvcrt.lib /machine:x86 /subsystem:console いずれにしてもLNK4001(オブジェクトファイルがない)という警告が出る。
144 名前:デフォルトの名無しさん [2007/01/16(火) 15:11:25 ] home.hiroshima-u.ac.jp/~m052291/sdk/index.cgi?event=view&num=246 どこでなにやってるか全然ワカランので、中盤以降に説明つけてください! あともう少し素人が作ったっぽくなりませんか?
145 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 16:04:06 ] >>144 それだけ素人丸出しなら充分だと思うが。
146 名前:デフォルトの名無しさん [2007/01/16(火) 22:33:51 ] Windows上で動くプログラムには仮想メモリが割り当てられてて プログラムからは仮想メモリしか見えないんだよね? じゃあメモリエディタってどうやってんの?
147 名前:デフォルトの名無しさん mailto:sage [2007/01/16(火) 22:50:39 ] 適切な権限さえあればよそのプロセスのメモリだって読み書きできる(真っ先に思い浮かぶのはデバッグ用途)。 大抵は権限の設定なんてやっていないから、同じユーザのプロセスならだいたい読み書きできると思っていい。
148 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 00:14:54 ] Windowsカーネルは全部の仮想メモリを知ってるから、 API叩いて教えてもらうんだよ。
149 名前:デフォルトの名無しさん mailto:sage [2007/01/17(水) 11:27:50 ] 実際に物理的なメモリを書き換えているとは限らない ひょっとするとあなたの書き換えた場所はディスク上の一部かも知れない
150 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 00:10:28 ] 質問なんですが、C++の問題集でお勧めなのはないでしょうか? 参考にしたいのでお願いします。
151 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 03:22:51 ] >>150 C/C++問題集スレ pc10.2ch.net/test/read.cgi/tech/1168663908/
152 名前:デフォルトの名無しさん mailto:sage [2007/01/21(日) 13:53:15 ] >>151 ワロタ
153 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 12:08:48 ] Cの経験が少しあってC++をはじめた者です。 憂鬱なプログラマのためのオブジェクト指向開発講座(第2部第5章p116)で、 「コンストラクタを使って、定数メンバの初期化を行うことができます」 と書いてありました。定数の初期化って、定数はあらかじめ 定義されているものだと思うんですけど、 どういうことでしょう?
154 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 12:21:08 ] 定数メンバと定数は違うだろ
155 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 15:25:31 ] static const double a=1; じゃだめなのですか?
156 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 16:04:03 ] 153は非静的メンバの話だと思う。
157 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 17:09:46 ] >>154 >定数メンバと定数は違うだろ 定数って const int a; とかですか?
158 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 17:29:36 ] 憂鬱本↓ メンバ初期化の方法はLIST6のように考えるのが普通でしょう. 確かにこのように書くことは可能です.・・・しかし,これは進められる書き方ではありません.なぜならば,これでは定数のデータメンバを初期化することができないからです. クラスのメンバデータには定数も使用することができます.その初期化を行うのも当然コンストラクタということになるでしょう.しかし,コンストラクタとはいえ,やはり関数です.その中で定数を書き換えることはやはりできません. さてそれでは,別の方法で定数メンバを初期化することは出来るのでしょうか.そのような特別な方法が用意されているのでしょうか. これはそのような方法が存在します.C++では,コンストラクタがメンバを初期化するために新しい構文が設けられています.メンバの初期化はLIST7のように行います.
159 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 17:31:59 ] LIST6:データメンバの初期化 Person :: Person () // コンストラクタの実装部 { age = 0 ; // 年齢の初期化 name = NULL ; // ポインタの初期化 } // しかしこの方法は薦められない! LIST7:コンストラクタでのメンバ初期化 Person :: Person () : age ( 0 ) , name ( NULL ) // 正しい方法 { // 何もしない }
160 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:25:26 ] _, ._ (;゚ Д゚) …?
161 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 18:38:24 ] 新版も出たことだし、Effective C++ くらい買いなさい。
162 名前:デフォルトの名無しさん mailto:sage [2007/01/22(月) 19:07:38 ] >>158 >これはそのような方法が存在します 日本語でおk
163 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 12:09:24 ] (これ、Visual C++のスレで質問するべきなのかもしれませんが) 標準C++というのでしょうか、windowsコンソールアプリケーションの 文法で、Visual C++のよなwindowsプログラミング(ファイル[メニュー]や ボタンを付けたいだけですが)をすることってできるでしょうか? やはりそれはVisual C++でしかできないのでしょうか? 環境はVisual C++ 2005 Express Edition使っています。
164 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 12:26:27 ] >>163 Visualという単語で勘違いしたのかな?VC++でコンソールアプリも書けます。 VC++でコンソールアプリを書いてもWindowsアプリを書いても、VC++の文法は同じです。 Windowsアプリの開発環境はVC++だけではありません。VB、Delphi等々色々あります。
165 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 12:53:02 ] >>164 返信感謝します。 (私があまり理解していないので、言葉がうまく見つかりません) 普通(?)のC++(コンソールアプリ)は、やったことがあるんですが、 windowsアプリケーションのソースを見たところ、 “ハンドル”という言葉が出てきたりして、 私が今まで勉強したC++と少し違うと思いました。 文字列に関しても、宣言が下のように違うようです。 string word @ ↓ string^ word; A winwosアプリをする場合は、新たにAのような文法を勉強しなければ ならないんですよね?
166 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 15:42:41 ] ないない
167 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 16:20:59 ] ルンゲ・クッタ法を用いてX-Y軸上に楕円運動の軌道を描く際の、各点においてのX軸Y軸方向への速度をV,Uとして時間T毎にファイルに書き込みたいのですが、どういった書き方ならば綺麗に描けますか?
168 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 16:28:14 ] >>166 どっちでしか?
169 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 17:54:33 ] >>165 「string^ word;」がエラーにならないとはちょっと思えない。 “ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。 それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。 まぁ、まずはWinアプリの入門書か解説ページを読んで。
170 名前:165 mailto:sage [2007/01/24(水) 18:11:36 ] 返信ありがとうございました。 >“ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。 >それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。 前者だと思います。 ↓のように使用されていて、 文字列型のハンドル、オブジェクト方のハンドルがあると書いてありました。 private: System::Void buttonAdd_Click(System::Object^ sender, System::EventArgs^ e) { Debug::WriteLine("追加ボタンをクリックしました"); // 品名、分類、金額を取得する String^ name = textName->Text; String^ kind = comboKind->Text; String^ money = textMoney->Text; String^ out; out = String::Format("品名:{0} 分類:{1} 金額:{2}", name, kind, money ); Debug::WriteLine( out ); } >まぁ、まずはWinアプリの入門書か解説ページを読んで。 普通のC++を知っているだけでは、windowsプログラミングは無理のようですね。 じっくりやってみようと思います。
171 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 19:03:37 ] >>170 あぁぁ、C++/CLIですね。だと文法も拡張されてるそうです。 新しいことをあまり知らないくせにレスつけました。すいません。 でもWinアプリを書くのにC++/CLIじゃないとダメってことはないですよ。
172 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 20:38:23 ] >>151 とりあえず、参考にしてみます。
173 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 22:12:01 ] >>170 そのハンドルは169の言っているものとは違う。 171も言っているが、それは.NET Frameworkを使って動くプログラムを書くために作られたC++/CLIという言語のプログラム。 普通のCもしくはC++を使ったWindowsプログラムはまた別物。
174 名前:デフォルトの名無しさん mailto:sage [2007/01/24(水) 22:38:23 ] >>171 ,173 指摘していただき感謝します。 C++/CLIは別なんですね。知りませんでした。 私はC++/CLIでない普通のWindowsプログラミングをしたいのですが、 その場合は、普通のC++と同じ文法でやれるのでしょうか? VC++2005Express使っているんですけど、 その場合、プロジェクトの作成の仕方は、 [ファイル]→[新規作成]→[プロジェクト] から、[新しいプロジェクト]ダイアログで、 [プロジェクトの種類]で、[win32]で選ぶのかと思うんですが、 この時[テンプレート]で選択できるのが[win32コンソールアプリケーション] だけになってしまいます。 やり方が違うと思うんですが、 教えていただけますか?
175 名前:デフォルトの名無しさん [2007/01/24(水) 23:13:41 ] >>174 VC++2005ExpressEditionでwin32アプリケーションを作るには www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/ ↑で環境をもうちょっと追加しなければならない。 ちなみに .NETアプリってのはCLRとか書いてるやつね win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、 window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。 www.kumei.ne.jp/c_lang/ ↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。 VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変 WindowsSDKでの開発がめんどくさいから MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。 .NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。
176 名前:174 mailto:sage [2007/01/24(水) 23:45:24 ] >>175 丁寧な説明ありがとうございます。 >VC++2005ExpressEditionでwin32アプリケーションを作るには >www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/ >↑で環境をもうちょっと追加しなければならない。 早速入れました。 >win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、 >window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。 >www.kumei.ne.jp/c_lang/ >↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。 >VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変 > やってみようと思います。 >WindowsSDKでの開発がめんどくさいから >MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。 >.NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。 > わかりました。 CLRも考えようかと思います。
177 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 00:46:29 ] 質問です、以下の構造体があったとします↓ struct Test{ int nMem; char strMem[20]; }; 上記の構造体に、関数をひとつ追加します。 struct Test{ int nMem; char strMem[20]; void Clear(){ nMem = 0; strcpy(strMem, ""); } }; そして両者のsizeofをとってみたのですが、両者とも24バイトとなりメンバ関数によるサイズの増大が見られません。 これは、コンパイラがTest::Clear()の呼び出しを該当するメモリアドレスに置換しているからなのでしょうか? 多分そうだと思うのですが、参考となるようなものが無く………詳しい方、宜しくお願い致します。
178 名前:177 mailto:sage [2007/01/25(木) 00:47:31 ] 追記です、実行環境はVS2003、VS2005、BCCです。
179 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 02:54:53 ] >>177 メンバ関数も、機械語のレベルにすれば単なる関数であることに変わりはない。 Cで擬似的に書けばこんな感じになる。 struct Test { int nMem; char strMem[20]; }; void Test_Clear(Test* this) { nMem = 0; strcpy(strMem, ""); }
180 名前:デフォルトの名無しさん mailto:sage [2007/01/25(木) 11:58:29 ] C++の例外の使い方を解説した参考書で、オススメのものを教えてください。 文法自体の解説ではなく、使いこなしのテクニックなどについてです。
181 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 01:00:56 ] >>180 例外の落とし穴的なことなら Exceptional C++ にあるよ。 # もし持ってないんだったら C++ 使いとして C++ in-Depth Series は # 揃えておくことをオススメするですよ。
182 名前:デフォルトの名無しさん mailto:sage [2007/01/26(金) 14:17:33 ] >>181 ありがとうございます。 洋書には、知っておくべきノウハウの本があるのに、 和書には、言語仕様の解説本しかないんですよね。 洋書で足りてるから書く必要がないのかもしれないけど。
183 名前:177 mailto:sage [2007/01/26(金) 15:34:18 ] 遅れてしまいました、179さんありがとうございます。
184 名前:デフォルトの名無しさん [2007/01/28(日) 03:25:47 ] メインで作ったポインタをオリジナル関数内で配列領域を宣言するときはどう関数を受け渡せばいいのでしょうか。 void o(int **mem) { int i; mem=(int **)calloc(10, sizeof(int)); for(i=0; i<10; i++) mem[i]=(int **)calloc(10, sizeof(int)); } int main() { int **mem; o( );//この部分 }
185 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 04:06:30 ] >>184 void o(int ***mem) { int i; *mem=(int **)calloc(10, sizeof(int)); for(i=0; i<10; i++) (*mem)[i]=(int **)calloc(10, sizeof(int)); } int main() { int **mem; o(&mem);//この部分 }
186 名前:デフォルトの名無しさん [2007/01/28(日) 04:11:30 ] >>185 それはやったのですが、 o内で数値を代入して、 メイン側でその数値を使おうとすると反映されていないみたいでエラーが・・・。
187 名前:デフォルトの名無しさん [2007/01/28(日) 04:15:23 ] >>185 後コンパイル時に引数が異なるというエラーが。 間接参照のレベルが 'int ***' と 'int ****__w64 ' で異なっています。 仮引数および実引数と異なります。
188 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 04:16:17 ] >>186 だったらここだろ void o(int ***mem) { int i; *mem=(int **)calloc(10, sizeof(int *)); for(i=0; i<10; i++) (*mem)[i]=(int *)calloc(10, sizeof(int)); } ちなみにどんなエラーが出たのか明記しないとわからん
189 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 04:17:31 ] >>187 メインで int ***mem; とやってるんじゃないか?
190 名前:デフォルトの名無しさん [2007/01/28(日) 04:22:36 ] >>188 完走しました。 ありがとうございました。 >>189 それはなかったです。
191 名前:デフォルトの名無しさん mailto:age [2007/01/28(日) 06:52:30 ] フリーウェアで、 クラス図を作れるものってありますか?
192 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 08:24:55 ] C/C++の質問しろよ umlmemo
193 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 08:29:20 ] doxygen
194 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 09:07:10 ] JUDE Community
195 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 11:33:04 ] >>192-194 ありがとうございました。 >C/C++の質問しろよ はい、すみません。
196 名前:デフォルトの名無しさん [2007/01/28(日) 17:09:42 ] void qsort ( void* base , size_t nmemb , size_t size, int(*compar)(const void *, const void *) ) ↑のを自作で作りたいのですが、誰かサンプルを作っていただけないでしょうか? 初心者でスマソorz
197 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 17:14:38 ] www.google.co.jp/search?q=qsort.c 好きなのを持ってけ
198 名前:デフォルトの名無しさん [2007/01/28(日) 17:20:36 ] C++でゲーム制作プログラミング勉強しようと思ってるのですが おススメの参考書を教えていただきたいです。 本屋に行ったのですが、何を買えばいいかわからずに退散してきましたorz 要望を挙げれば実際にゲーム制作しながら学べるような参考書。 RPGではなくアクションゲーに重きを置いた参考書を望んでいます。 プログラミング経験はJAVAを2年ほど、Perlを授業でかじった程度です。 よろしくお願いします
199 名前:デフォルトの名無しさん [2007/01/28(日) 17:21:54 ] >>197 どれが自作のやつかよく分かんないですorz ほんと無知でスマソ
200 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 17:40:28 ] ちみの云う「自作」の概念がよく分からないな。 チミが作ったわけじゃねーから、みんな他作だろう?
201 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 17:47:16 ] ワロタ
202 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 18:08:28 ] >>184 なんか見ていてクラクラしてくるコードだなぁ。 サイズが固定なら配列を使ったほうがいいんじゃないか。 >>196 正しい日本語で。 qsortの使用例 と qsortの実装例 のどっちが欲しいの? >>198 問題をしっかり切り分けよう。 ざっと乱暴に分けただけでも、 □ C++ □ OSのAPIのうち、ゲームで使うものについて □ ゲーム特有のアルゴリズム という3つに分けられる。 それぞれ独立した話なので、それぞれ別々に学んだほうがいい。 このスレで質問すべきなのは、 「Javaをある程度やった人にオススメのC++の教科書を教えてください」 ということだよ。 で、Javaを2年もやったのであれば、入門書的なのは無駄が多い。 まずは、↓のような簡単なものでいいので、CとC++の文法の概要を、軽く読む。 ttp://www5c.biglobe.ne.jp/~ecb/c/c00.html ttp://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html その上で、C++の有名な参考書群を読めば習得は速い。
203 名前:196 [2007/01/28(日) 18:21:24 ] >>202 すみません。実装例の方です
204 名前:198 [2007/01/28(日) 21:01:49 ] >>202 色々と詳しく教えていただきありがとうございます とりあえず教えていただいたサイトを見て基本的な所を理解してから 参考書を購入して勉強しようと思います。 ありがとうございました
205 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 21:02:45 ] >>203 GNUのglibcとか、 マイクロソフトならVC++に付属のCランタイムのソースコードとか。
206 名前:デフォルトの名無しさん [2007/01/28(日) 21:23:48 ] #include "DxLib.h" struct CharaData{ int x; int y; int mae,hidari,migi,tama; }; struct CharaData jikidata; int jikinomuki=0; int statusboard=LoadGraph("StatusBoard.png"); int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow ) { ChangeWindowMode(TRUE);// ウインドウモードに変更 SetGraphMode(600,480,16);//ウィンドウの大きさ if(DxLib_Init()==-1) return(-1);//DXライブラリ初期化 WaitKey(); DxLib_End();//DXライブラリ終了 return(0);//終了 } エラーがでてないのにウィンドウが表示されません。 PCの動作が重くなっているので実行はされてると思うのですが・・・ 誰かわかる人いましたら解決策を教えてください OTL
207 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 23:37:23 ] ChangeWindowMode(TRUE); SetGraphMode(600,480,16); はDXライブラリの関数だろ?だったら if(DxLib_Init()==-1) return(-1);//DXライブラリ初期化 の後に書くんじゃないか? 順序立てて考えて問題箇所を洗い出せ
208 名前:デフォルトの名無しさん mailto:sage [2007/01/28(日) 23:41:39 ] int statusboard=LoadGraph("StatusBoard.png"); これはヤバいんじゃないか? WinMainよりも前に実行されるぞ。
209 名前:デフォルトの名無しさん [2007/01/29(月) 08:50:37 ] Choge hoge = new Choge(); と Choge hoge; は何が違うんでしょうか? ヒープ領域とスタック領域の違いでしょうか? どう使い分けたらいいでしょうか?
210 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 10:55:12 ] >>209 前者はdeleteする必要がある。 そのクラスが巨大でないのなら、後者で充分。 巨大であるとかクラスの特性上必要があるとかで前者を使うのなら、auto_ptrの使用を検討したほうがよりよい。
211 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 12:10:01 ] Choge* hoge = new Choge(); ではなくて Choge hoge = new Choge(); なのであれば、それはメモリリークしている可能性があるよ。 Choge hoge ; Choge* p = new Choge() ; hoge = p ; ただし、Choge::operator=(const Choge* p) が存在する、気持ち悪いクラスの場合だが。
212 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 13:14:13 ] >>211 >Choge hoge = new Choge(); > >なのであれば、それはメモリリークしている可能性があるよ。 そもそもコンパイル通らないんじゃないか?
213 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 15:27:32 ] Cについて質問です。 double型変数をfprintfで小数点以下の有効数字全てを表示したいのですが、 どのようにすればよいでしょうか。 今は%.20leとか適当な数字で表示させています。 できれば%lfの形式で表示したいのですが。
214 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 16:30:09 ] >>213 %.20gじゃダメ? 値が適当な範囲ならf形式で出るけど。
215 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 17:53:53 ] #define isupper(c) ( (c) >= 'A' && (c) <= 'Z' ) ↑これ、パラメータが2箇所で評価しているんですけど、 問題ですか?普通に使えるような気がボクはするんですが...
216 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 18:05:21 ] >>215 ASCIIのようにアルファベットがリニアに並んでいる環境なら使えますね。 評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので ドキュメントに明示してあれば問題ないでしょう。
217 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 18:15:26 ] >>216 >ASCIIのようにアルファベットがリニアに並んでいる環境なら使えますね。 >評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので >ドキュメントに明示してあれば問題ないでしょう。 はい。ありがとうございます。 ついでで恐縮ですが、 副作用の起こる使い方ってどんな風な使い方ですか?
218 名前:215 mailto:sage [2007/01/29(月) 18:18:40 ] >>216-217 自己レスですみません。 isupper(c = getchar()) ↑こういうことですね?
219 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 18:25:15 ] >>218 こういうのもです。 isupper(c++);
220 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 19:21:07 ] >>219 そういうことですか。 ありがとうございました。
221 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 20:31:59 ] まったくどうでもいことだが、範囲比較は想定される数直線的に並べるべきだと思う。 具体的には 'A' <= (c) && (c) <='Z'
222 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 20:51:30 ] >>221 全くどうでもいいことだが、比較対象を左辺に置くのが一般的だと思う。 #いや、どちらでもいいけどさ。
223 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 21:00:33 ] >>216 > 評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので 違う! こういうのをマクロでやるのがアホ。 今時のコンパイラはインライン関数でも最適化されるので、副作用とか型チェックのないマクロを使う必要性はない。
224 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 21:26:36 ] >>223 ↓こういったのはどうですか? arrは配列のポインタを設定。 #define ARR_SIZE(arr) ( sizeof(arr) / sizeof(arr[0]) )
225 名前:213 mailto:sage [2007/01/29(月) 21:30:24 ] >>214 上手く表示できました。 ありがとうございます。
226 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 21:35:04 ] >224 それはポインタ突っ込んでドツボにはまる香具師が必ず出てくるので有名なマクロだな。 しかし、コンパイル可能な副作用のある式を突っ込むのは難しくないか? まー、おいらはstd::vector使うからいーけどさ。
227 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 21:54:10 ] >>223 違う! #define isupper('A'<=((c)%220%156%91)) こうするのが正しいやり方だ!
228 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 21:56:37 ] >>224 template でゴニョゴニョすれば代わりになるものが作れるけど、 これに関しては移植性の高いマクロのほうが好きだな。
229 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 21:58:56 ] >>227 ('A'<= 頬に突き刺さってて痛そうだよな
230 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:03:09 ] これじゃ、アッパーじゃなくてフックだな。
231 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:27:09 ] >>224 >>227 C++ならboost::sizeはだめか?<boost/range/size.hpp>
232 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:32:38 ] >>231 boost::size じゃ、>>227 の速度性能には及ばんだろ、多分。 # メンテナンス性は最悪だけど。
233 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:36:08 ] boost::sizeもO2あたりの最適化を書けてやれば定数に収束するんでねーの、たぶん。
234 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:46:13 ] >>233 一回しか比較を実施しないロジックに対し速度で対抗しようとしたら あとはもうテーブルでも用意するぐらいしかないぞ。
235 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 22:56:53 ] 比較と剰余のどちらのコストが高いかは議論たり得る。
236 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 23:03:11 ] じゃ、おいらは #define isupper(c) ((unsigned)((c)-'A')<26U)) で対抗しちゃる。
237 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 23:03:26 ] そうだな。一般的には剰余のほうが速いだろうけど、そうじゃない環境もあるかもね。
238 名前:デフォルトの名無しさん mailto:sage [2007/01/29(月) 23:06:15 ] >>236 お、これなら環境を問わずに最速なんじゃね?
239 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 00:53:05 ] fgetcで読み込んだファイル(c)の文字を判定して印刷可能文字ならそのまま出力 それ以外なら空白を表示するプログラムを作っていたのですが while((c = fgetc(fp)) != EOF){ if(isprint(c) != 0){ buf[n] = c; n++; } else{ buf[n] = ' '; n++; } if(n % 16 == 0){ puts(buf); for(n = 16;i >= 0;n--){ buf[n] = ' '; } n = 0; } } この状態で出力すると16文字目の後にバグのような文字がでてきてしまいます。 いろいろ考えてみたのですが原因がわかりませんでした。どうにかしてこのバグを消す方法はないでしょうか? Win XPでBorlandを使用しています。
240 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 00:55:43 ] 連投失礼します。 for(n = 16;i >= 0;n--)ではなく for(n = 16;n >= 0;n--) でした。よろしくお願いしますm(--)m
241 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 01:01:38 ] 文字列の終端はナル文字をうめましょう。●4点
242 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 07:34:48 ] ぬるぽ
243 名前:がっ mailto:sage [2007/01/30(火) 07:39:54 ] ちんぽ
244 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 09:00:18 ] _,ィ、 ,r、__ ,.ヘー'´ i `´/ `i_ /ヾ、 ヽ、 i / /ヽ _ィ、〉 > ´ ̄  ̄ ` く ,ゝ、 }、 ,>'´ 、 ヽ./`ヽ ┌! / / i 「`i ヽヽ ヽ } Y ! | | l i i l i ',__,.ゝ ,' | | | !l l | l l ! i ! | | | | j___j | |i i! |i! l ,.|‐T丁i! ハlj, --!`トlノ、|| | ! ! レ'i´ミj "i´ミ iヽ, i || _ | l |i iバ__ソ L__ソ /.ノ |! _ヽ) | | |l |、//// ' ///// |! |i ヽ) !ハ |! |,ゝ' ´ ̄ ̄ ` く レy'|! __,ノ レ'ヽiハ / \}'´ ̄ `ヽ、 ィ´ ̄/ ,べY Y`i__ \ 〉/ / , 、ヽ /_`ヽ\ \ ,ィ'ん、 / ! '´__ ヽ /´__,.` ', \ ァ'` `ヽ、/ー' /! __`ヾ! レ'´ _,. ! \ i /ー-ィ、 ィ__! ___`フ / ヽ二 /7 _i弋 / 辷j ! ヽ / / / / } j´ 〉 ヽ、 冫 ヽ__ュ_y\ / / /ヽヘ/え´ /
245 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 12:19:11 ] >>239 ・putsの仕様を確認すべし。 ・下手な小細工しないでputcharとかfputcを使ったほうがいいぞ。 ・そのコードだと16文字に満たない分が出力されないぞ
246 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 16:13:41 ] >>239 > for(n = 16;n >= 0;n--) 17 回実行されるよね。
247 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 16:31:01 ] >>221-222 そのような「べき」も「一般的」もありません。 >>230 感服しました。
248 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 17:09:56 ] 数直線を意識しない奴は、素養がない。
249 名前:239 mailto:sage [2007/01/30(火) 19:23:13 ] >>241 ,245,246 助言ありがとうございます。 いろいろと試してみたらどうにか動きました。 お手数かけました。
250 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 19:23:52 ] なんか不安w
251 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 19:34:31 ] 適当に試行錯誤して動いたらOKという人は、C言語を使うべきではないね。 たまたま偶然、自分が見た範囲内で問題なく動いているように見えるだけ、というのは勘弁して欲しい。
252 名前:デフォルトの名無しさん mailto:sage [2007/01/30(火) 21:58:00 ] >>248 自然言語で読みやすいように書かない香具師はカス。 Ex. if (NULL = fp) ...
253 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 07:54:30 ] >>252 それはコンパイルエラーだろ…常識で考えて。 if(NULL == fp)って書きたかったんだろうけどさ。 俺はいっつも右辺にリテラルを入れる派。
254 名前:デフォルトの名無しさん mailto:sage [2007/01/31(水) 08:41:40 ] >>253 252の挙げている例は、 ==を間違って=にしてしまっても、コンパイラがエラーを出してくれるので安全だから、定数は左辺に書け という、コンパイラが警告を出さなかった時代の人達のクソッタレなコーディングルールを、 今だに実践しているダメな人のことを言っているのだと思うよ。
255 名前:デフォルトの名無しさん [2007/02/01(木) 22:04:13 ] C++勉強始めて一週間ほどの超初心者なんですが、 定数(const)ってしっかり覚えた方が良いでしょうか? それとも あ〜そんなのあったね。くらいで良いでしょうか? そりゃ覚えるにこした事は無いと思いますが、なんかイマイチ頭に入らなくて
256 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:05:31 ] constごときでそんなに苦労するの?
257 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:08:10 ] 覚えられなければ参考書とかグーグルで すぐ答を引っ張り出せるようにはしておけ
258 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:18:30 ] ややこしいのもあるから const char * const s = "ssssss"; とか class M { int i; public: void setInt(int i) { this->i = i; } int getInt() const { return i; } }; こういうのは後回しでもいいかもしれんね。
259 名前:デフォルトの名無しさん mailto:sage [2007/02/01(木) 22:31:54 ] >>255 まだ、勉強始めて一週間ってことだったら、いますぐじゃなくてもいいとは思うけど。 でも、後からでもいいから const は絶対に覚えておけ。
260 名前:255 [2007/02/01(木) 23:01:13 ] 親切にお答えいただきありがとうございます。 定数は絶対に変えられない!程度に覚えておき、追々勉強していこうと思います
261 名前:デフォルトの名無しさん [2007/02/02(金) 00:20:10 ] c++でグローバル領域において const double TEISU = 0.05; とかにして,VS2005でTEISUにマウスカーソルを合わせると 「static const double TEISU」 って表示されるんだけど,勝手にstaticを付けられてるってこと? int型だとこうはならないんですけど
262 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 01:09:58 ] そんな感じ。 C++の名前空間内(含グローバル空間)でのconstはexternを付けない限りstaticと同じ内部リンケージを持つ。 (特に整数型において)ヘッダで初期化して定数として使えるようにするため。
263 名前:デフォルトの名無しさん [2007/02/02(金) 11:26:29 ] あるn次元空間において、全ての点から遠くなるような点(最遠点)の効率のよい計算方法を探してます。 ただし、最遠点の範囲はそれぞれの軸で決まっていて、 例えば下図のような2次元空間上でこのように点があった場合、 赤点の位置を算出したいのです。 ttp://kjm.kir.jp/pc/?p=29115.gif ttp://kjm.kir.jp/pc/?p=29117.gif 上の場合は、点が偏っているために範囲ぎりぎりの点が選択されてる様子で、 下は周囲に点が偏っているので中央が選択されてる状態です。 このような点を探索する場合は、 全ての座標において点までの距離を計算し、最も遠くなるような座標を求める、 みたいな総当たりで調べていくしかないのでしょうか。 それともなにか効率のよいアルゴリズムはありますか?
264 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 13:42:23 ] >>263 点に接する円の径を最大化するように円の中心点を範囲内にとればいいのかな? 最急上昇法を使うのはどう? ローカルマキシマムに気をつけないといけないけど
265 名前:263 [2007/02/02(金) 15:24:35 ] >>264 つまりこういうことでしょうか? ttp://kjm.kir.jp/pc/?p=29123.gif ttp://kjm.kir.jp/pc/?p=29124.gif 3次元以上に使えるのかが分からないのですが、ひとまず調べてみようと思います。 回答本当にありがとうございます。
266 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 15:50:57 ] 点が疎な領域で風船(円)を膨らましていくイメージじゃないの? 3次元以上でも使える。
267 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 16:02:02 ] >>255 constがらみの文法は、わかりにくいですね。 他の人も言っているように、アンチョコを作りましょう。 頭の中に記憶しておく必要はないのです。 あやふやな記憶に頼ってコーディングをするのは、とても愚かな行為です。 (セキュリティのために、裸一貫でしか入退場できない場所での仕事は別だが・・・) constはちゃんと理解して使えるようにならないと、 他者の書いたコードやライブラリを使うことができません。 >>258 自分はtypedefを使って、なるべくわかりやすくするよ。 typedefを勝手にやるな! というルールのところもあるけどね。
268 名前:264 mailto:sage [2007/02/02(金) 16:56:55 ] >>265 言いたかった事は>>266 kjm.kir.jp/pc/?p=29126.gif kjm.kir.jp/pc/?p=29127.gif これはローカルマキシマムにはまった例 kjm.kir.jp/pc/?p=29128.gif
269 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 21:09:52 ] とりあえず適切に荒くマス目に区切って総当たりし、 その中から有望そうな部分についてマス目を細かくして総当たりし、 さらにその中から・・・ という具合に、ニュートン法みたいに繰り返していくのが無難そうよ。
270 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 22:21:45 ] 配列の宣言において、要素数にキーボードから入力した値を用いるにはどうすればよいでしょうか?
271 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 22:30:36 ] 配列は静的に確保しなきゃいけないから無理 vector使え
272 名前:デフォルトの名無しさん mailto:sage [2007/02/02(金) 22:51:59 ] >>270 int int_array[ #include "CON" ]; これでおk。
273 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:04:54 ] >>270 // for C(99) int num = キーボードから入力する関数(); AnyType_t array[num]; // for C++ // use std::vector. // for (regacy)C // try malloc() / free().
274 名前:270 mailto:sage [2007/02/03(土) 00:09:48 ] >>271 ,272 ありがとうございます。 説明不足で申し訳なかったのですが、 C++ではなく、Cで実現させたいのですが、 >>271 のおっしゃる通り不可能なのでしょうか?
275 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:11:11 ] >>274 >273
276 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:22:00 ] >>273 ,275 ありがとうございます。 初心者なもので、具体的に教えていただきたいのですが、 float型で変数nを要素数とするxという配列を作りたいときは scanf("%d",&n); float x[n]; でよろしいのでしょうか? やってみたところ、 ここでは宣言はできない(関数 main ) 定数式が必要(関数 main ) とのエラーが float x[n]; の行に出てしまいました。 ご教授願います。
277 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:33:06 ] >>276 今時、8年も前の規格も満たせないような半端モノのCコンパイラではなく、真っ当なCコンパイラを使ってください。 それがいやなら、C++でも使ってください。
278 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:53:05 ] >277 すみません、フリーのBorland C++Compiler 5.5です。 月曜日に学校のVisual C++コンパイラでやってみます。
279 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 00:55:42 ] いや、一緒だから。
280 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 01:03:41 ] C99がまともにコンパイルできるコンパイラで身近なものはiccしかない。 部分的にサポートならgccでもよいが完全ではない。 こういう状態だから「C99は死んだ規格」と呼ばれる。
281 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 01:34:13 ] >>277 まともなコンパイラを教えてください
282 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 03:47:23 ] >>281 >280
283 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 13:17:31 ] >>280 >こういう状態だから「C99は死んだ規格」と呼ばれる。 でも、決して無駄にはならないハズ。 なぜならその屍をC++0xが乗り越えてくれるから。
284 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 13:50:00 ] なーんだ結局C++に乗っかかるつもりかよ。やめてくれ。 ただでさえ複雑怪奇なC++の言語仕様をさらに複雑にする気か。 まあC++0xは文法を複雑にするというより、足りない部分を補う だけで、今の文法でも出来る事を焼き直すわけではないからな。
285 名前:263 [2007/02/03(土) 14:32:19 ] >>266-269 回答ありがとうございます。 ローカルマキシマムも図で説明しただいてよく分かりました。 ひとまず269の方法で試してみたいと思います。
286 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 19:03:10 ] C++で他のアプリケーションの画面の色を取得したり、クリックしたりできますか? できないなら言語は何がオススメですか?
287 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 19:25:09 ] それはC++かどうかよりもGUIのAPIもしくはライブラリの問題。
288 名前:デフォルトの名無しさん mailto:sage [2007/02/03(土) 20:31:25 ] はいはい、HSPHSP
289 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 14:53:13 ] ↓ですが、@がAとして認識されるということですが、 私はAがどういう場合に使われるのかがわかりません。 externで定義ってどういうことでしょうか? 大きな非互換項目の一つにconst型修飾子の取り扱いの違いがある。 C言語では記憶域クラス指定子を持たず、const型修飾されたファイル 有効範囲の識別子は、外部結合の識別子として取り扱われる。 一方、C++言語では内部結合の識別子として取り扱われる。 つまりC言語ではexternが補完されるのに対し、C++言語ではstaticが 補完されると考えればわかりやすい。多くのプログラマは、C言語での プログラミングにおいて、extern型修飾子は、変数の外部参照宣言を行 なう時にのみ使用し、変数の定義においては使用していない。 この問題は、const型修飾子を使用している多くのプログラムで発生する と予想される。 const int a=10; @ (C言語で認識される型) extern const int a=10; A (C++言語で認識される型) static const int a=10; B
290 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 15:28:27 ] >>289 どういうこともそういうことも、Cには昔const修飾子がなかったので const int a = 10はint a = 10と同じスコープを持つしかなかっただけなんだが。
291 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 15:48:37 ] >>289 CでもC++でもグローバル変数の定義にはexternを付けてもいいんだよ。 /* hoge.h */ extern int foo; /* グローバル変数fooの宣言 */ extern int bar; /* グローバル変数barの宣言 */ /* hoge.c */ int foo = 4; /* グローバル変数fooの定義 */ extern int bar = 2; /* グローバル変数barの定義 */
292 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 16:00:40 ] 定義に「付けてもいい」ってところがミソだな
293 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 19:11:39 ] >>290 、>>291 ご回答感謝します。 よくわかりました(助かりました)。
294 名前:デフォルトの名無しさん mailto:sage [2007/02/04(日) 19:12:09 ] >>292 >定義に「付けてもいい」ってところがミソだな どういうことでしょうか?
295 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:04:19 ] >>289 > 私はAがどういう場合に使われるのかがわかりません。 C言語では(1)と(2)は同じだから、どっち使うか自由なので (2)を使わなければいけない場面なんてないんじゃないのかな。 C++だと(1)は(3)の意味になる。 (3)では複数のファイルに同じものがあって無駄に感じるが そんなの気にしないで(2)を使わず(1)を使うようだね。
296 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:10:04 ] >>295 生半可な知識しかないなら回答しないでください。 >(3)では複数のファイルに同じものがあって無駄に感じるが 全くの思い違いです。
297 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:12:40 ] >>296 そうでしたか。 ごめんなさい。
298 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:36:07 ] C++で 複数のファイルに const int a=10; などがあっても 変数aというより値10が直接使われる。 複数のファイルに const int a=10; const int *p=a; とした場合はそれぞれのファイルで異なるポインタのaが存在るんじゃないの。
299 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 00:37:44 ] >>296 >無駄に感じる どう感じるかは自由だ
300 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 01:09:35 ] 同じ定義を複数のファイルに書いたりしない。一個をインクルードするだろ。常識的に考えて。
301 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 02:02:43 ] >>300 そういうこといっているんじゃないと思うが。 その通り実際にはヘッダファイルに書くけど ヘッダファイルにstatic const int a=10;を書いて複数のファイルからインクルードするのと 複数のファイルにstatic const int a=10;を書きのとで staticやexternの動作は変わらないでしょ。 それとも別の話?
302 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 14:30:40 ] 質問です、class Aを継承したclass Bが存在したとします。 class Aに仮想デストラクタが存在しない場合、class Bのデストラクタが呼ばれないと聞きました。 これは、常に真なのでしょうか? B Obj;などと動的に生成しなくても、デストラクタはやはり呼ばれないのでしょうか?
303 名前:デフォルトの名無しさん mailto:sage [2007/02/05(月) 14:55:20 ] >>302 A *obj = new B; みたいな使い方した場合。 Aに仮想関数が存在しなければobjはすべてAとして動作するから、 デストラクタもAのデストラクタが動けばいいけど 仮想関数が存在した場合、objはBとして動作することがある。 そのときBの動作してAのデストラクタしか動かなかった場合、危険でそ? B *obj = new B; のように宣言するならちゃんとobjが破棄されたときにBのデストラクタが動くはず。 でもそんなリスキーなこと考えず、仮想メンバ関数のあるクラスには virtualなデストラクタを置くのが常識。
304 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 00:48:51 ] >>300 に同意 ま、スレの題名通りの流れだから良いけど。
305 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 02:03:28 ] >>300 そもそも、 複数のファイルに書かれた static const int a=10; が、同じ定義かどうかは、わからないぞ。 ファイル内のローカルスコープなわけで、 ファイルによって aの値は違うかもしれないし、 今は同じでも今後変るかもしれない。
306 名前:デフォルトの名無しさん [2007/02/06(火) 11:36:10 ] blowfishをやろうと思っているのですけど、暗号化できません #include <stdio.h> #include "blowfish.h" #include "blowfish.h2" #define FilePath "text.txt" #define Key "keyword" #define BUF_SIZE 256 FILE *fp; char buffer[] = "asdfghjk"; char newbuffer[255]; CBlowFish *blow = new CBlowFish; blow->Initialize( Key, strlen(Key)); blow->Encode( buffer, newbuffer, BUF_SIZE); delete blow; fp = fopen(FilePath,"w"); fprintf(fp,newbuffer); fclose(fp); どこが間違っているのでしょうか?
307 名前:デフォルトの名無しさん [2007/02/06(火) 11:40:52 ] 質問です メインで使うクラスにデストラクタの中で 終了時にメンバ変数の領域をdeleteにより手動で開放する 意味はあるのですか?
308 名前:306 mailto:sage [2007/02/06(火) 11:55:53 ] すみませんけど、自己解決しました
309 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 14:56:08 ] >>307 確保したものは解放するのが当然。まして、「メインで使う」ことが何度もあるなら。
310 名前:デフォルトの名無しさん [2007/02/06(火) 15:11:02 ] ではもう使わないんなら解放しなくてもいいですね
311 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 16:15:41 ] デバッガでメモリリークを検出するようにしてるような場合、 そういうことを適当にしてるとせっかく検出したリークを 見落とすようなことになる。 それに限らず、「もう使わないから」って理由で開放漏れを 容認しだしたら、本当に深刻なリークが発生したとき あちこちに疑わしい箇所が散逸してて泣くことになると思うぞ。 一人で責任持てるなら良いかもしれんがチームのときは迷惑極まりない。
312 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:23:21 ] >>307 いや、さすがに冗談だよな……?
313 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:28:58 ] どうせOSが後始末をしてくれるし、終了処理してたら重くなるから リリースバージョンではabortで終了する。という人もいるみたい。
314 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:29:37 ] free論争は秋田
315 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:29:55 ] まさか307はこういうことを言いたいのか? class Hoge { public: ~Hoge() {delete &x;} private: int x; };
316 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:42:06 ] >>315 なんかおかしな事になりそうだから試したくないけど それしたらどうなるの?
317 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 17:49:39 ] おそらく未定義の動作。どうなろうと標準規格の関与するところではない。 鼻から悪魔が(ryとよく言われるやつ。
318 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 18:57:47 ] 同じオブジェクトを二回破壊しようとしたら実行時エラーでないか?
319 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:34:00 ] >>307 じゃないけどデストラクタでdeleteするのってダメなんですか? デストラクタって破棄される直前に呼ばれるんですよね?
320 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:44:22 ] メンバ変数がnewで確保されたものなら、デストラクタでdeleteするのは当然だが。
321 名前:デフォルトの名無しさん mailto:sage [2007/02/06(火) 19:52:51 ] ああ、>>315 をよく見て無かっただけですた びっくりしたぜ、サーセン
322 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 03:11:03 ] >>316 おそらく何も起きない。 というのも、スタック上にあればdeleteは、 んなポインタ知らないよとスルーするし、 ヒープ上にあっても、 んなポインタ知らないよとスルーするから。 デバッグ版なら、変なポインタをdeleteするな、って叫ぶかもしれない。 だがしかし、実装依存であり、何が起きても泣かない覚悟が必要だ。
323 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 03:59:03 ] へ?最近のdeleteはそんな親切設計というか過保護設計というかになってるの?
324 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 06:49:00 ] というか、そういう過保護な実装が存在するのか?だな。
325 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 07:55:33 ] しないだろ。
326 名前:デフォルトの名無しさん [2007/02/07(水) 10:30:05 ] クラスのメンバ変数についての質問です グローバル変数としてビュークラスの外で宣言したクラスの メンバ変数は0や空文字で初期化されてるんですが そのクラスをビュークラスのメンバとして宣言するとそのクラスの メンバ変数が初期化されないのはどうしてですか?
327 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:43:10 ] c++ 変数 初期化 の検索結果 約 145,000 件中 1 - 10 件目 (0.19 秒) ぐぐったら見つかるだろ
328 名前:デフォルトの名無しさん [2007/02/07(水) 10:46:50 ] >>327 わからないんなら答えなくていいよ
329 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 10:58:04 ] >>326 仕様です
330 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 11:13:14 ] >>326 向こうにちょっと書いたが・・・ グローバル変数はコンパイル時に場所を決定して0で初期化したブロックにできるが ヒープの場合実行時に割り当てられるので、わざわざ0クリアするコードを入れるわけ ではないので初期化はされない。 しかし期待した答えをもらえないからって文句言うな
331 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 11:13:54 ] ヒープの場合 を ヒープやスタックの場合 に
332 名前:デフォルトの名無しさん [2007/02/07(水) 11:14:54 ] すいませんありがとうございます
333 名前:デフォルトの名無しさん [2007/02/07(水) 19:07:36 ] C++の勉強したいんですけど、 ゲーム作りしながら学べるような本はありませんか? 持ってるのはVisualC++の6.0なんですけど…。
334 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:13:30 ] www.kohgakusha.co.jp/books/detail/978-4-87593-295-6 ゲーム作りではじめるMFC
335 名前:デフォルトの名無しさん [2007/02/07(水) 19:28:10 ] mallcoを使って二次元配列の領域を確保したんですけど, その配列の値を他の関数に渡すにはどうしたらいいんでしょうか?
336 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:43:56 ] 値で渡す場合は値渡しだね
337 名前:デフォルトの名無しさん [2007/02/07(水) 19:49:31 ] >>335 たとえばintなら int (*array)[10]; // int[10]型のポインタ変数array array = (int (*)[10])malloc(sizeof(int) * 10 * 5); // int [5][10] func(array[0][0]); // call 良く使うならint[10]型をtypdedef汁
338 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 19:58:36 ] 337はfuncの引数がint*となっている場合だね。 void func(int [][10]);などと宣言されていれば、func(array)と呼べる。
339 名前:337 mailto:sage [2007/02/07(水) 20:11:41 ] >>338 array[0][0]でちゃんと値を渡してるよ。 コンパイル通してみたから間違いないかと。
340 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 20:28:09 ] typedef版。要は配列の基底となる要素数を[10]です、と明示的に 宣言してやらないと領域だけあっても2元配列としては使えない。 typedef int ArrayType[10]; ArrayType *array; array = (ArrayType *)malloc(sizeof(ArrayType) * 5); // int [10]を5個分 func(array[0][0]);
341 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 20:53:06 ] >>323 WindowsのVC++のdeleteは、不正なポインタを渡すとint 3してくれたと思う。
342 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 20:55:49 ] >>333 2つのことを同時にやろうとするのは無駄が多いよ。 C++とゲーム作りと、別々に勉強することをお勧めする。 C++の良い参考書はいくつもあるが、 ↑と同レベルの、ゲームを作りながらC++を学ぶという本はないから。
343 名前:338 mailto:sage [2007/02/07(水) 21:31:32 ] >>339 ごめん。337ではfunc(&array[0][0])と書いてあるかと勘違いした。
344 名前:デフォルトの名無しさん [2007/02/07(水) 23:52:01 ] 構造体をヘッダファイルに定義して適当にインクルードしたら 二重定義ということで怒られてしまいました。 #pragma once を使用することで解決しましたが、今まで C言語をやっていて気になったことはありません。 コンパイルエラーになったのはC++ですが、C++でエラーになる ようになったのでしょうか? それともエラーにならなかったコンパイラが寛容だったということでしょうか?
345 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 23:52:48 ] お前がまともな規模のコードを書いてこなかっただけ
346 名前:344 mailto:sage [2007/02/07(水) 23:56:13 ] >>345 規模と何の関係があるんですか?
347 名前:デフォルトの名無しさん mailto:sage [2007/02/07(水) 23:59:42 ] >>344 C言語でもまともなコンパイラならエラーになる。 大きな規模のプロジェクトならば名前の衝突は経験することがあるはず。
348 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 00:05:11 ] >>344 Cでも「構造体をヘッダファイルに定義して適当にインクルードしたら二重定義ということで怒られ」ます。
349 名前:デフォルトの名無しさん [2007/02/08(木) 00:20:11 ] >>348 今Borland C++ 5.5.1をダウンロードして試してみましたが全く エラーになりません。 <struct.h> typedef struct test_st { int a; int b; }TEST_ST; <main.c> #include"struct.h" void testFunc(void); int main(void) {testFunc(); return 0; } <sub.c> #include<stdio.h> #include"struct.h" void testFunc() { printf("Hello\n"); } main.cとsub.cで2回構造体の定義(struct.h)をインクルード していますがエラーにならずに実行できます。 ちなみにエラーになったのはVC++でC++を使ったときでした。 これはエラーにならないコンパイラが甘いということでしょうか?
350 名前:344 mailto:sage [2007/02/08(木) 00:21:08 ] どうもVC++のバージョンを上げてから弾かれるようになったように 記憶しているのですが・・・
351 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 00:24:54 ] >>344 "piyo.h"というヘッダを作ったとします そしたらヘッダ内に #ifndef INC_PIYO_H #define INC_PIYO_H ・ ・ #endif /* INC_PIYO_H */ のような形の文を必ず書きなさい そうすればと二重インクルードガードとなる
352 名前:344 mailto:sage [2007/02/08(木) 00:32:02 ] >>351 いや、それは知っています。 それの代わりに#pragma onceでもいいってことも。 気になっているのはなぜ今までエラーにならなかったのかと いうことです。 実際、さきほどbccで試したらエラーにならなかったし。
353 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 00:44:43 ] struct.h をインクルードする struct2.hを作って main.cから #include "struct.h" #include "struct2.h" ってしてみれ 規模が大きくなるとそういう事が多くなる
354 名前:344 mailto:sage [2007/02/08(木) 00:54:32 ] >>353 ありがとうございます。 なんとなく分かった気がします。 同一ファイル内で1回なら問題ないということですね。 Cで自分で意識してインクルードした場合は、1ファイルにつき 1回しかインクルードしないので問題がなかったのですが、VC++で MFCを使うと勝手にインクルードとかされてエラーになるように なったんじゃないかと思います。
355 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 01:03:19 ] どんな名前になるのかわからないファイルを勝手にインクルードなどできるはずがない。
356 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 01:03:41 ] だからそれはCとかC++とかの問題ではなくて お前の書くプログラムの規模が小さかったから現れてこなかっただけだ。 ところで分割コンパイルと二重インクルード防止は基礎中の基礎だと思うんだが 最近の入門書じゃ教えてないっぽいな。 嘆かわしいなあ…
357 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 01:57:01 ] >>356 まともな入門書には書かれてるよ。 まともじゃない入門書でも、説明しているものがあるけどね。
358 名前:デフォルトの名無しさん [2007/02/08(木) 02:35:10 ] 質問です。以下のように、変数を自作クラスを使うベクタを使って作成する場合 どのようにして作成していけばよいのでしょうか。push_backメンバが使えると思うのですが いまいち自作クラスを使ったベクタでの使い方がわかりません。よろしくお願いします。 class A { int a; int b; public: void set_a(int seta) { a = seta; } void set_b(int setb) { b = setb; } int get_a() { return a; } int get_b() { return b; } }; int main() { vector<A> vec_a; /* vec_aに要素を追加する */ return 0; }
359 名前:358 mailto:sage [2007/02/08(木) 02:38:02 ] 訂正します。 どのようにして要素を作成していけばよいのでしょうか。
360 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 02:48:54 ] >>358-359 vec_a.push_back(A());
361 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 03:12:35 ] >>358 class Aに引き数をとるコンストラクタを用意した方が何かと便利かもね。 仮に、A(int seta, int setb);というコンストラクタがあるなら、 vec_a.push_back(A(0, 0));って感じで設定も同時に行なえる。
362 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 03:44:42 ] >>361 セッターの戻り値を *this にして vec_a.push_back(A().set_a(0).set_b(0)); なんてやるのもいいと思うけどね。 コンストラクタでやるのに比べるとちょっと冗長だけど、 このスタイルのほうがいろいろと都合がいいことってあるし。
363 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 07:36:19 ] それマジ?
364 名前:358 mailto:sage [2007/02/08(木) 10:19:30 ] >>360-362 ありがとうございます。 勉強になりました。
365 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 10:24:34 ] >>362 面白い それは応用が利きそうだな。
366 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 11:48:25 ] setterでthisポインタ返すのは常識だろ
367 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 13:59:43 ] 質問です cout << false; cout << true; の出力結果は 0 1 ですが、これは環境によって違うのでしょうか?
368 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 15:19:39 ] >>367 違わない。
369 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:20:28 ] プリコンパイル済みヘッダに関する質問です、 VC++2003やVC++2005では各cppに#include "stdafx.h"でプリコンパイル済みヘッダが使えます。 ところがそのソースをBCCに移植すると、(ディレクトリの関係で)一部#include "../stdafx.h"にしなければなりません。 VCはディレクトリ関係を気にせず一様に指定出来ますが、BCCで同じことは行えないのでしょうか?
370 名前:デフォルトの名無しさん mailto:sage [2007/02/08(木) 17:25:30 ] >>369 BCCはstdafx.hは必要ありません。
371 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 01:09:27 ] >>366 はて、>362は実体を返しているようだが。
372 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 01:32:40 ] >>371 僕は参照だと脳内補完した。
373 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 03:02:01 ] とりあえずゲッターはconstつけようや
374 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 19:17:43 ] C++のソースからクラス図を自動生成してくれるようなツールはないでしょうか・・・?
375 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 19:19:06 ] >>369 インクルードパスに..を追加できないの? ""で括ったヘッダ名が見付からなければ、 <>で括ったのと同じようにヘッダを探すことになっている。 だからインクルードパスの指定は""で括ったものにも有効。
376 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 20:59:55 ] >>374 Doxygenを含めて色々在ると思う。
377 名前:デフォルトの名無しさん [2007/02/14(水) 13:38:46 ] class A{ static const double a; static const double b; static const double c; }; const double A::a=5; const double A::b=10; const double A::c=a/b; と書いた場合、cは必ずa=5とb=10が実行された後に実行されるのでしょうか?
378 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:02:17 ] CTypedPtrListのSeqValueListを CTypedPtrArrayにする時ってどうすればいいんでしょうか? 下のがソースなんですが、やり方が良くわからない。。。orz CItemInfo::~CItemInfo(){ int iCount; POSITION pos; VALUE *pValue; m_pValueList = &m_SeqValueList; iCount = (int)m_pValueList->GetCount( ); pos = m_pValueList->GetHeadPosition( ); for( int i=0; i<iCount; i++ ){ pValue = m_pValueList->GetNext( pos ); delete pValue; } m_pValueList->RemoveAll(); m_pValueList = &m_ParValueList; iCount = (int)m_pValueList->GetCount( ); pos = m_pValueList->GetHeadPosition( ); for( int i=0; i<iCount; i++ ){ pValue = m_pValueList->GetNext( pos ); delete pValue; } m_pValueList->RemoveAll(); }
379 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 18:28:32 ] なんだマルチか
380 名前:コンパイルとおらねぇもん mailto:sage [2007/02/15(木) 01:23:57 ] >>377 いいえ。実行されることはありません。
381 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:39:13 ] MFC実行したら Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or PostNcDestroy in derived class will not be called. って言われたんだけど、どういう意味なの?
382 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:45:37 ] そのままの意味です。英語の意味が判らないと言うのであれば、鼬害です。
383 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:56:15 ] >>381 ウィンドウを正しく終了せず プログラムの変数(インスタンス)が消されたことにより 正しい手順ではなくCWndのデストラクタが呼ばれたんじゃないの(推測)。
384 名前:377 mailto:sage [2007/02/16(金) 07:39:55 ] そうするとcの値は何になるのでしょうか?
385 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 08:19:55 ] 0.5でしょ。コンパイルタイムに確定するから。
386 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 12:56:06 ] >>385 この手の順序依存は規格的には未定義じゃなかったっけ?
387 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 13:13:40 ] BCCでインデントするとemacsでやってたのと違ってかなり スペース空くのですが、こんなもんなんですか?
388 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 13:22:19 ] BCCでインデント の意味がわからない。
389 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 16:54:28 ] class A{ static const double a; static const double b; static const double c; }; const double A::a=5; const double A::b=c/a; const double A::c=a/b; じつはこれもコンパイルできてしまったりする。
390 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:40:16 ] >>389 順序は規定されていないけどコンパイルされる以上、値は決まるわけだね。 その例だとa, b, cの順序に評価される可能性が高そうだから、bは(cが暗黙の初期化で0だから)0、cは∞か。 const double A::c=a+b; const double A::b=c+a; const double A::a=5; こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。 まして複数のコンパイル単位に分かれていたらリンク順序にも依存してしまうのかな。 結論: 評価順序に依存した初期化は鼻から悪魔。constにしないでシングルトンにすべきか。
391 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:41:58 ] 一部訂正: ×こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。 ○こうなってたとすると、a, b, cがそれぞれ(cbaの順序で評価して)5, 0, 0なのか(acbの順序で評価して)5, 10, 5なのか悩ましいところだ。
392 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:13:18 ] gccは確か制御できた様な
393 名前:デフォルトの名無しさん [2007/02/19(月) 12:03:31 ] C言語なんですがwaveを再生させるにはどうすればよいでしょうか? プログラムが完了したら鳴らしたいのですが・・・。
394 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 12:18:16 ] Beep() …言ってみただけ
395 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 12:19:02 BE:672138566-2BP(1050)] てst
396 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 12:19:46 ] ビープ音鳴らすだけならputchar('\a'); 処理系依存だけど
397 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 14:44:15 ] 演算子の多重定義って使う機会ありますか?
398 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:11:16 ] 自分で使うかどうかはともかく、人が作ったものはよく使う。 一番よく使うのがイテレータに対する操作。 後はstd::basic_stringの比較・連結もよく使う。
399 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:31:16 ] ビープ音ではなくwavのようなPC内部で鳴る種類が良いです・・・
400 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:00:23 ] >>399 「wave API」でググれ。
401 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:15:44 ] waveを再生するってのは結構面倒なのでしょうか?
402 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:32:39 ] 君の面倒なレベルがわからないから回答不能
403 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 19:12:31 ] WindowsならMCIかwaveoutかDirectX 質問のレベルからしてMCIがお勧め
404 名前:397 mailto:sage [2007/02/19(月) 22:35:33 ] >>398 ありがとうございました。m(_ _)m
405 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 02:13:35 ] 質問です。 typedef std::map<mykey_t,myval_t> mymap_t; void hoge(mykey_t k, const mymap_t &m){ mymap_t::iterator p = m.find(k); // コンパイラエラー } constが付いたmapのイテレータを造りたいんですけど、 どうすればいいのですか?
406 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 03:03:39 ] >>405 mymap_t::const_iterator p = m.find(k);
407 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 13:38:18 ] >>381 今さらながらマジレス Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or PostNcDestroy in derived class will not be called. [翻訳] CWndから派生クラスのウィンドウを使っているときに、 規定クラスのCWnd::~CWndデストラクタが呼ばれているので 派生クラス側のOnDestroyやPostNcDestroyハンドラが呼ばれませんですのよ。うふ ウィンドウ破棄するときに派生クラス->DestroyWindowを呼んでない悪寒です。
408 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 11:42:39 ] 文字と数字が入力された時に、数字だけを消して 文字だけ表示したいんですけど、どうやればいいのでしょうか? void del_digit(char *str){ while(*str) /*ここでどうすれば?*/ putchar(*str++); } int main(void){ char str[100]; printf("mojinyu-ryoku:"); scanf("%s",str); printf("DelDigit:"); del_digit(str); putchar('\n'); return(0); }
409 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 12:22:44 ] if (isdigit(*str))
410 名前:408 mailto:sage [2007/02/23(金) 13:05:39 ] >409 ありがとうございました。解決できました。
411 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 16:03:53 ] 注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく スレの雰囲気を崩しかねないのでお黙り下さい。 また質問者は回答者に知識を披露する場を与える貴重な存在なので、 質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。 忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、 その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると 判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
412 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 21:26:09 ] >>411 そうか
413 名前:デフォルトの名無しさん [2007/02/25(日) 19:10:07 ] ユーザー一人一人に別々のシリアルナンバーを割り当てたいのですが、 どのように生成し、ソフト側ではどのようにそれをチェックすればよいのでしょうか?
414 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:45:45 ] ユーザー特有情報(メールアドレスとか)を秘密鍵で暗号化して、 ソフトに内蔵の公開鍵で復号できたらOK、とか?
415 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:56:51 ] うんにゃ、クラックから守るにはクラッカーの手口を知る必要がある。 リバースエンジニアリングの本でも買って読んだ方が良いぞ。相手は『強力なデバッガ』使いだからな。 ロジックの流れなんか直ぐに分かってしまう。まずは低水準なレベルで防御しなければならん。 認証用の関数はプログラム処理の流れから完全に分離、関数のアドレスを入れているポインタのconst変数には定数NULLを入れておき、 ifで関数ポインタ変数がNULLじゃなかったらアドレス先の認証関数を実行、とすると良いかもしれん。 これなら認証用関数の手がかりはほとんど無いからな。ダミーの関数でラップしておけば更に頑丈になる。 NULL定数を正常な認証用関数アドレスに書き換えるパッチをユーザーに配る必要があるが、 ユーザー名をキーに若干絡ませて暗号化とかしておけ。
416 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 20:03:43 ] なにいってるの?
417 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 20:20:15 ] >>415 はアレだ。 物事を最初だけ聞いて「みなまで言わずとも分かった」と暴走するタイプだ。
418 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:50:20 ] 単にWizardBibleとか読んでわかった気になってるだけだろ
419 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:34:20 ] 江戸っ子は気が短いんでい!
420 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 01:25:29 ] >>415 の言ってるようにクラック対策なら、↓こっちのスレで相談しなさい。 クラッキングの勉強の仕方を教えてください pc10.2ch.net/test/read.cgi/tech/1164783092/
421 名前:デフォルトの名無しさん [2007/02/26(月) 20:35:33 ] VC++自体よくわからんが ゲーム制作で俗に言うC++ってVC++のこと? ゲーム制作の参考書買いに行ったがVC++ばっかりで混乱・・・ ちなみにC++の基礎はマスターした。
422 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:41:19 ] まあ、Windows対象のC++本ならほとんどはVC++を想定して書かれてると思ってもいいんじゃないかな。
423 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:47:30 ] 趣味と実益(基本情報技術者の試験)を兼ねてc言語を勉強しようと思います。 フリーコンパイラ使おうと思うんですがどれがいいでしょうか? VisualStudio Expressで問題ないですか?
424 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:53:55 ] 趣味ならIDEも付いてるし、VC++でいいんじゃね?
425 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 21:23:33 ] 夢を壊すようで悪いけど 基本情報は何の実益にもなりません
426 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 21:29:22 ] おいらのところは資格手当がでるよ
427 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 21:33:03 ] 実益というか「そんなのも取ってねぇのかよ」 といわれる会社もあるにはある
428 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 22:43:59 ] >>442 サンクス やっぱりVC++も頭に入れながらやってみる。
429 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:06:02 ] WindowsならVC++かgccの二択だわな
430 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 00:46:54 ] >>429 それを言うならVCかICCの二択だろ。 この期に及んでgcc使うヤツなんていないって。
431 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 01:02:56 ] icc高すぎ
432 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 01:13:14 ] >>431 じゃ、VCで我慢汁。
433 名前:デフォルトの名無しさん [2007/02/27(火) 16:50:30 ] >> 430 BCC + BCC Developer は? もしかして却下? Turbo Debbuger まで全部タダでそろうが…。 BCC Develoer のクラスでSTL使えたか忘れたが…。
434 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 16:54:18 ] >>433 STLも使えたはず。
435 名前:デフォルトの名無しさん [2007/02/27(火) 17:00:16 ] >> 434 そうですか!情報提供ありがとうございます。 VCのMFCでは文字列クラスがSTLと共存できない使用だったはず… 最新バージョンでは使えるようになったのかな?? 使えないなら BCC の方がよさそうに思いますが…。
436 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:19:16 ] Borland C++よりVC++ (7.1以上)の方がテンプレートがまともに使える。 STLを使えるかどうか気にするなら、それだけでVC++を選ぶには十分。 MFCとの相性が悪いなら、むしろMFCなんて捨ててしまえ。
437 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:21:18 ] Cコンパイラとして使うならbccよかgccのほうがマシだろ
438 名前:デフォルトの名無しさん [2007/02/27(火) 17:31:37 ] >> 436 たしかに自分使ってない。 >> 437 gcc は使ったこと無くて…
439 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:44:30 ] BCCはいまだにC++コンパイラではない Boostの些細なライブラリが通らないので C++を知っている人間なら薦めない (某サイトは特集していたが) MFCがBoostやSTLやだれそれと共存できないなんてことはない
440 名前:デフォルトの名無しさん [2007/02/27(火) 17:47:44 ] >> 439 いえ自分が言っていたのは MFC内で使われている 文字列クラスと STL の string クラスの互換性の話…。 MFCをポイすれば悩むこと無いでしたが…
441 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:55:10 ] >>440 MFCの文字列クラスとSTLのそれを混在させなきゃいいだけの話じゃないの
442 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:10:26 ] >>440 文字列に限らずコンテナ類も互換性がないが、それより 「互換性がない」と「共存できない」じゃまるで意味が違うだろが。
443 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:14:12 ] たしかにMFCのCStringTとstd::basic_stringは別物だが、 相互に変換できないわけではないし、 Boost.Range(或いはイテレータ)では統一的に扱えるんだから、 そこまで気にすることは無いと思う。
444 名前:デフォルトの名無しさん [2007/02/27(火) 19:00:22 ] >> 443 参考になりました。ありがとうございます。
445 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 19:33:39 ] template<class T>class A{ private: T na; public: A(T a):na(a){}; friend A<T> operator + <T>(A<T>&,const A<T>&); }; template<class T>class B{ private: T nb; public: B(T b):nb(b){}; friend B<T> operator + <T>(B<T>&,const B<T>&); }; template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;} template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;} でBのメンバ変数にアクセスできないのはなぜ--??
446 名前:デフォルトの名無しさん [2007/02/27(火) 20:23:37 ] >> 445 template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;} template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;} ↓ template<class T>A<T> A<T>::operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;} template<class T>B<T> B<T>::operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;} とすればいいのでは?
447 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:03:12 ] friend関数なのでそれでも無理っぽいです。
448 名前:デフォルトの名無しさん [2007/02/27(火) 23:08:00 ] int x; int &rx = x; これおかしくね? &rx = x; 何でアドレスにint型の変数を代入するの
449 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:08:45 ] 「参照」を知らない香具師は基礎からC++やり直せ
450 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:45:33 ] (int &)rx=x; rはreferenceのr 宣言時に型の直後に&をつけたものは参照型になる 嘘です
451 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 13:09:55 ] ネットで落としてきたcppファイルとdefファイルを使ってdllを作成したいんだけど、 やり方がよくわかりません。 ぐぐって見たところ、 ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library or MFC Appwizard(dll) を選んで もにょもにょするって書いてあったんですが、↑の時点で2種類のやり方があってどっちが正解かわからないですし、 そもそも貰ったファイルをdll化することが目的なので新規作成からやるのは何か間違っている気がします。 とりあえずcppファイルを開いてコンパイルして、、、defファイルをプロジェクトに追加。 そして再度コンパイルをしてみても・・・無理でしたorz どなたか助言をお願いします… 環境はvisual V++ 6.0 Standard Editionです。 よろしくお願いします。
452 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 13:14:23 ] >>451 dllを新規作成するからあってるのでは? そのdllプロジェクトにソースを追加してモニョモニョするんだと思うんだけど。
453 名前:451 mailto:sage [2007/02/28(水) 13:35:42 ] うは…なるほど、そういう解釈ですか… とりあえず ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library を選んで空のDllオブジェクトを選択して(この時点で意味不明ですが…他選ぶとどうなるの…?) プロジェクトの追加でcppを選んでビルドしてみたら何故かdllファイルが出来上がっていました 個人的にはキタ━━━━(゚∀゚)━━━━!!!! でもどうなってんのか全然だ(ノ∀`) dllにもフォーマットがあって、cppファイルに則したやり方じゃないとうまく生成されないのだろうか。 ちなみにMFC Appwizard(dll)の方で作ろうとしたら、エラーがでて生成されませんでした。なんでやねん(;´Д`) それ以前に先ほどDllを作成したときには、プロジェクトの追加でcppファイルを追加したわけですが、 defファイルは追加しなくてもいいんでしょうか? 勝手に追加されるから特に選択する必要はないということでしょうかね・・・(ソースによりけりなのかもしれないけれど)
454 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 14:19:10 ] def ファイルは関数のエクスポートに必要 __declspec(__dllexport) を関数につけてないのなら def無しで作った場合、出来上がったDLLはどこからも呼べないものになってると思うが depends.exe 持ってないか?
455 名前:451 mailto:sage [2007/02/28(水) 15:00:26 ] depends.exeとはDependency Walkerのことなのかな…? とりあえず、defファイルを追加せずにdll化するとまずそうなので、先ほどの手順で プロジェクトの追加からcppファイルとdefファイルの両方を追加して見ました。 すると…エラーなしでdll化キタ━━━━(゚∀゚)━━━━!!!! これで関数もエクスポートできるようなまともなdllになったのかな… とりあえずDependency Walkerを起動してみて調べたところ、左のツリー状のところに TEST.dll l −KERNE32.dll l −NTDLL.dll ってなってました。自分にはさっぱりですが、正常にdll化できたと思ってよいのでしょうか(;´Д`)?
456 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 15:13:48 ] DLLの関数のエクスポートのやり方は2種類あるのよ ・関数に__dllexportを付ける ・.defファイルに纏めてエクスポートする関数を書く。 どっちでもおk。俺は見やすいからdefの方でやる。
457 名前:451 mailto:sage [2007/02/28(水) 15:41:47 ] なるほど… まだまだ不勉強なようですね。 でも、ねんがんのdllをてにいれることができたので、レスを下さった方々にはお礼を言いたいと思います。 どうもありがとうでした・゜・(ノA`)・゜・
458 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:58:10 ] >>455 そのTest.dll にカーソルあわせたら 右の下のFunction に一覧出るべ それがエクスポートされたやつね。
459 名前:デフォルトの名無しさん [2007/02/28(水) 17:29:16 ] 今日からマイクロソフトのVisualC++2003をし始めたんですが、どこかのサイトで 見つけた同じC++の例文とか書いてみても実行したとたん画面が消えるのはなぜですか? printf とか cout っていうのとかって一緒に使えますか?