1 名前:ぬ ◆NUNUK382Dk mailto:sage [2007/12/27(木) 20:32:47 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.45【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1197090562/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
446 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:26:45 ] >>330 それを実行するのにはコンパイラには何か必要なんですかね。
447 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:40:52 ] >>446 日本語でおkだな。 コンパイルしたいのであればC++のコンパイルが可能なものであればなんでもいい。 コンパイラに必要なものが知りたいのであれば、ソースファイルだけあればいい。
448 名前:デフォルトの名無しさん [2008/01/09(水) 00:45:13 ] 質問です。 bcc developerを使ってC言語を勉強してるんですが、 #include ""DxLib.h" int WINAPI WinMain(HINSTANCE hI, HINSTANCE hP, LPSTR lpC, int nC) { ChangeWindowMode(TRUE); if(DxLib_Init() == -1)return(-1); DrawBox(0,0,120,65535,TRUE); WaitKey(); DxLib_End(); return(0); } と打ち込むと Error: 外部シンボル 'WinMain' が未解決(C:\BORLAND\BCC55\LIB\C0W32.OBJ が参照) となります。 いろいろ調べてみた結果Windows アプリケーション→コンソールアプリケーションに チェックを変えると、 Error: 外部シンボル '_main' が未解決(C:\BORLAND\BCC55\LIB\C0X32.OBJ が参照) となり、やはりだめです。。 もうにっちもさっちもいきません。どなたかアドバイスお願いします
449 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:55:34 ] #include <windows.h> コンパイルオプション -W
450 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 00:59:49 ] >>448 よく分からんけど先頭行に #include<windows.h> でいけるかも
451 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 01:57:55 ] >>444 ソート済み const 配列の形で定義して、 lower_bound() とかする関数を インターフェースとしてかぶせとけばいいんじゃない?
452 名前:448 [2008/01/09(水) 02:06:46 ] 説明不足ですみませんでした。 とある参考書を使っていて、「DxLib」というファイルをインクルードして 進めていくらしく、それで#include"DxLib"となっているみたいです。 >>449-450 れすありがとうございます。 #include<windows.h> としたんですが、同じエラーがでました。 コンパイルオプションってどうやっていじるんでしょうか。 BCC developerのプロジェクト設定で ●コンソールアプリケーション(-WC) Windowsアプリケーション(-W) というようにチェックするところがあるんですが、 このことですか?
453 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 02:12:28 ] あたりが付いてるならとりあえずやってみてから質問してはどうか
454 名前:448 [2008/01/09(水) 02:16:38 ] やってみたんですが、だめでした。 根本的に間違ってるんでしょうか
455 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 02:29:52 ] >>451 それなんてEffective(ry
456 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 02:38:20 ] >>448 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/5704.zip 素直に、VC++とかにしてくれれば、話は早いんだが、まぁ、ゲーム作りたいやつは応援する主義なんでね。
457 名前:448 [2008/01/09(水) 02:54:28 ] >>456 ありがとうございます! さっそくやってみます
458 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 03:23:36 ] >>448 とりあえず、VC++2005ExpressEditionを進めておく www.microsoft.com/japan/msdn/vstudio/express/maninstall/ の 「Visual C++ 2005 Express Edition」 日本語版 611,540 KB 0xB3AD1A2F を選択してダウンロード、 仮想ドライブでインストール、あるいは、一度CDに焼いてから、でもよい。 Win32APIを利用するためには、PlatformSDKが必要 www.microsoft.com/downloads/details.aspx?FamilyId=A55B6B43-E24F-4EA3-A93E-40C0EC4F68E5&displaylang=en ここの、最後のほうに、「PSDK-x86.exe 1.3 MB」と (Download) がある。 似たようなのが、3つあるが、一番下の(Download)を選ぶ。ダイアログが出ると保存なりしてくれ。 ダウンロードした exe を実行して指示に従えばよい。 参考ページ : www.microsoft.com/japan/msdn/vstudio/express/visualc/
459 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 03:50:34 ] 2008じゃだめなん?psdkも一緒にインスコできるぜ
460 名前:デフォルトの名無しさん [2008/01/09(水) 03:56:03 ] ポインタの基本的なことなのかもしれませんが、良く分からず悩んでおります。 2次元、3次元配列をポインタにキャストして操作したいのですが、 以下のような操作は問題ないのでしょうか? int* hoge = (int *)new int[2][3]; 例えば、上のようにcastして、1次元配列のint[5]と同じように 操作しても問題ないでしょうか?
461 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:04:13 ] >>461 ちょっとずれるかもしれないが、plaza.rakuten.co.jp/tcross/diary/200711230000/ キャストは、一日3回までだっていったでしょう。 できるだけキャストしないですむように組みましょう。 問題ありそうな気がする。試してないので、あれだけど。
462 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:07:53 ] C++のブースト以外のプログラムってないでしょうか。
463 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:10:49 ] 意味が分からないぞw ライブラリのことならそりゃいっぱいあるよ
464 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:12:35 ] >>460 CもC++も配列はあくまでも一次元。(多次元と表現するけど。) 今の場合は、int[3]を要素として二つ持つ一次元配列だから int (*p)[3] = new int[2][3]; だと思う。
465 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:12:45 ] >>461 断言できないが、簡単に試したら、問題なかった。 でも、気持ち悪いので、出来るだけキャストはやめて欲しい。
466 名前:460 [2008/01/09(水) 04:23:49 ] >>461 >>464 >>465 みなさんありがとうございます。 できれば変なキャストはさけたいのですが、 呼び出さなければいけないDLLのメソッドが int * で待ってまして、どうやって2次元配列、3次元配列を渡せば よいのか悩んでおります。 (ちなみにFortranのDLL) いちおう上のようなやりかた int* hoge = new int[2][3]; で渡して動作しているよう?なのですが、 なにか動きがおかしいようです・・ メモリ的にはint[5]と同じなので、問題ないのかな? とも思うのですが・・
467 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:39:05 ] 2 * 3 = ?
468 名前:460 [2008/01/09(水) 04:41:41 ] >>467 すみません、int[6]でした。
469 名前:460 [2008/01/09(水) 04:47:58 ] www.nurs.or.jp/~sug/soft/tora/tora10.htm ここをみると、 int x[10][10]; int i; int *p = (int *)x; for( i = 0; i < 100; i++ ) { *p++ = i; } printf( "x[5][5] = %d\n", x[5][5] ); とあるので、どうやら問題なさそうですね・・。 でもC++でも問題ないのか、なぞですが・・。
470 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 04:58:32 ] >>466 int (*p)[3] = new int[2][3]; にして&p[0][0]を渡せばいいんでない? キャストしないとコンパイルエラーだし、コンパイルを通すための無理やり キャストは正直気持ち悪い。
471 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 05:04:30 ] int* hoge = (int *)new int[2][3]; いや待てよ。上の場合だと delete [] hoge; が未定義動作になる可能性がなきにしもあらずな気がしないでもない。 大丈夫かもしれんが移植性と規格を考えたら、>>470 のほうが安心だな。
472 名前:460 [2008/01/09(水) 05:39:13 ] >>470-471 ありがとうございます。そちらの方がやさそうですね。 ためしてみます。 ちなみに3次元配列の場合は int (*c)[2][3]= new int[5][2][3]; のような感じですよね?
473 名前:460 [2008/01/09(水) 05:39:46 ] 「よさそうです」の間違いでした。
474 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 07:42:52 ] 最初から1次元配列で確保しておいて、オフセットを調整した方がいい希ガス。 オフセット計算用にこんな関数でも用意して。 static int offset(int w, int x, int y) {return w * y + x;}
475 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 10:47:37 ] >>472 そう。 >>474 そう思う。
476 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 12:37:45 ] >>448 俺は前にbccでWinMainの引数型不一致でコンパイル通らなかったことがある 詳しいことは忘れたが第三引数がTだったような、違うかったような
477 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:17:31 ] スレ違いかもしれませんが7-zip32.dllで 自分で作ったデータを直接zipで保存する方法分かる人いませんか? 具体的に言うと 自分で作ったデータをファイルとして出力→7-zipでファイルを指定して圧縮 はできるのですが 圧縮範囲をポインタで指定→ファイル名を指定して書庫作成 ができないのです。
478 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:25:20 ] >>477 ファイルアーカイバで、ファイル以外のものをアーカイブする機能があるとも思えないが。 そもそも、なんでファイルに出力しちゃいけないの?
479 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:30:51 ] >>478 数が多いので出来ればいちいちアウトプットしたくないんです。 最悪 ファイル出力→書庫作成→ファイル消去 ってしようと思ってます。 やっぱりこういったdllには基本的にないんですかね?
480 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:40:17 ] 圧縮したいだけならアーカイバのDLLを使わないで圧縮ライブラリ使ったら?
481 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:51:38 ] そのとおり
482 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 14:52:07 ] >>479 7-zip32.dllのAPIリストを流し読みしてみたが、メモリソース展開用の関数は無いっぽい。 出力先はメモリで受け取れるみたいだけどなw 480が言ってるようにzlibなりを使うのも手。 (その場合他のアーカイバと互換性を持たせるのは少し面倒だが) あとは7-zip32.dllのソースをいじってメモリソース対応版を作るのも良いかも。 該当箇所を探すのが少し面倒だろうけど。
483 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 15:27:16 ] 軽く調べたら7zip(7-zip32.dllではなく、本家のほう)のcommon/StdInStream.h .cpp を修正すればメモリソースに対応できると思う。 あとは自分で調べるか詳しい人に聞いてね
484 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 16:58:56 ] 統合アーカイバDLLってのは、基本的はファイル経由ばかりかと。 極端に言えば、昔の(今もあるけど)コマンドラインインターフェースを そのままDLLに渡して動かすために作られたようなものだから。 各DLLに共通の操作を実現させるために、基本的な処理が中心だし。 だから、その元になるものを参考にすれば、大抵はオンメモリの操作になる。 例えば、TAR32.DLLではなくてzlibを使うとかね。 全てにそういうのがあるわけじゃないだろうけど。
485 名前:デフォルトの名無しさん [2008/01/09(水) 17:44:08 ] >>463 ライブラリ詰め合わせとかがあると便利なんですけど 誰かマジレスお願いします。
486 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:44:36 ] >>466 //配列へのポインタ−−簡単な例 #include <stdio.h> int main(void) { int a[4][10]; // 配列 int i, j; int (*p)[10]; // 配列へのポインタ //配列へ代入 for(i=0;i<4;i++) { for(j=0;j<10;j++) { a[i][j]=(i+1)+(j+1)*10; } } //ポインタを使って表示する for(p=a;p<a+4;p++) { for(i=0;i<10;i++) { printf("%3d ",(*p)[i]); } printf("\n"); } return 0; }
487 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:46:51 ] >ライブラリ詰め合わせ そりゃいくらでもあるぞ。目的も環境も判らんからなんとも言えんが。
488 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:49:23 ] >>485 割とまじめに答えたんだがな 存在するなら 欲しい機能名 ライブラリ で適とーにぐぐれば見つかるだろ いろんなライブラリが片っ端から詰め合わせてあるのが欲しいとか?w ねーよwwwww
489 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 17:49:55 ] アーカイバの展開なら00AM型Susieプラグインがメモリストリームからの展開サポートしてるのにね。
490 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:09:33 ] FILE_ATTRIBUTE_TEMPORARYを付けてCreateFileして、 Windowsにバッファフラッシュされないことを期待。
491 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:34:13 ] >>488 ここ2、3年新しいライブラリとかは作られていないんですかね。 携帯全盛期でほとんどプログラム終わってると困るんですけど。 キャノンの説明受けに行くのでちょとでも関係あることあればいいんですけどね。
492 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 19:44:08 ] 「キャノン」って書いてる時点で
493 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:17:43 ] ぶっちけた話C++でformに写るようにするには VBしかないんでしょうか。
494 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:23:37 ] 画像表示さえできればボンバーマンくらいはすぐできるだろう 今ならjavaとかが手軽でいいんじゃないか
495 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:31:41 ] VC2005で簡単にゲーム作ってみようと思ったんですが、 getch()でキーコード受け取ったら、カーソルキーが全部224で判別できないんです。 これをどうにかして識別する方法を教えてください。 別にgetchに拘らなくてもいいですが、出来ればC/C++の標準ライブラリに入っているものだと嬉しいです
496 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 20:38:13 ] >>491 488が否定しているのは詰め合わせのようなものの存在を否定しているだけだぞ。
497 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:01:59 ] >>495 そもそも getch は標準関数じゃない
498 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:11:49 ] >>495 とりあえず「ゆきいるか」でググってLunaでも使っとけばいいと思う。
499 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:24:35 ] >>491 Qt でも使ってみたら。
500 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:26:00 ] >>495 カーソルキーは二つのコードが送られてくる気がする 224 が制御コードで続くコードでカーソル方向が判別できるはず
501 名前:495 mailto:sage [2008/01/09(水) 21:31:18 ] 回答ありがとうございます。getchって標準ライブラリじゃなかったんですか、初めて知りました… >>498 あんまり外部のライブラリ使いたくなかったんです。ちょっと試しにやってみようかって程度だったので。 >>500 その発想は有りませんでした。試してみたら確かに取得出来ました!
502 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:40:54 ] ttp://msdn2.microsoft.com/ja-jp/library/19f56tw3.aspx ↑のページに書いてあるコードで、一度 #define DEBUG_CLIENTBLOCK new( _CLIENT_BLOCK, __FILE__, __LINE__) と定義してから #define new DEBUG_CLIENTBLOCK と定義し直す意味って何かあるのでしょうか
503 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 21:59:54 ] new( _CLIENT_BLOCK, __FILE__, __LINE__)っていう文字列にトラウマがあって使いたくないんじゃね
504 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:01:23 ] >>493 ・CLI+Windows.Form ・VCL
505 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:38:12 ] >>502 ヘッダファイル内で new が置換されると困るだろ?
506 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 22:39:46 ] 困るってのは、具体的に言えば operator new あたりが一番困る。
507 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:05:08 ] レスありがとうございます。おおよその目的がわかりました。 newを使うファイルでいちいち #define new DEBUG_CLIENTBLOCK を定義するのがめんどくさそうですね
508 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:06:40 ] それ専用のヘッダファイルを用意するとか。 最後にインクルード。
509 名前:448 [2008/01/09(水) 23:13:00 ] >>458 なにからなにまでありがとうございます。。いじくってみます。 >>476 そのへん調べてみます
510 名前:デフォルトの名無しさん mailto:sage [2008/01/09(水) 23:14:35 ] STLにたどりつかねぇ、焦っちゃダメだ・・基礎がおろそかになる
511 名前:476 mailto:sage [2008/01/09(水) 23:54:28 ] >>509 すまん、今試したらTは何の関係も無かったw 何でエラー出てたんだっけな……
512 名前:476 mailto:sage [2008/01/10(木) 00:03:07 ] 連投すまん、うちのエラーはLPCSTRでC++としてコンパイルした時だった(LPSTRならコンパイル通る) つまり少なくとも>>448 みたいにCがついていないのじゃ関係無かったすまん
513 名前:448 [2008/01/10(木) 00:14:32 ] わかりました。わざわざ教えてくれてすいません
514 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 00:22:38 ] >>448 よかった。まだ見てたか。将来、今までにない斬新なゲームを作ってくれ。 こういうことは、ゲ製板 pc11.2ch.net/gamedev/ のほうが、いいと思う。 DXライブラリ 総合スレッド pc11.2ch.net/test/read.cgi/gamedev/1197468399/
515 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 00:41:38 ] >>502 見当違いかもだけど _CLIENT_BLOCK, __FILE__, __LINE__ ↑こいつらがどっかで定義されてるマクロだとするとその中身を展開するには 一回newをDEBUG_CLIENTBLOCKにしてからnew( _CLIENT_BLOCK, __FILE__, __LINE__)にしないといけないんじゃないか? #define new new( _CLIENT_BLOCK, __FILE__, __LINE__)だと 以前に #define _CLIENT_BLOCK 何か ってのがあっても、一回のマクロ展開ではnew( _CLIENT_BLOCK, __FILE__, __LINE__)が出るだけで _CLIENT_BLOCKがそのまま展開されずに残るって言う・・・ 試してないけどね!!
516 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 00:44:54 ] 以下の文字列があったとします。 AB AA ABCA BA BB この中かからABCが含まれているか検査したいのですが どうやって実現すればいいのでしょうか strstrだとABCAのABCに部分一致してしまうので使えないと 思うので困ってます
517 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 00:49:35 ] 文字列の最後に空白をくっつけて ABC空白 で探せばよくね?
518 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 01:43:28 ] >>512 WinMainは<windows.h>のさらにどっか奥でプロトタイプ宣言が為されているので、 それと合わないとそういう風にエラーになってしまう。
519 名前:519 mailto:sage [2008/01/10(木) 01:44:30 ] 書き忘れた。 多重定義にならず、エラーになるのはextern "C"が付いているため。
520 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 01:58:56 ] >>516 その例だと「AB AA ABCA BA BB」のなかに「ABC」という文字列はなかったとしたいのか? だとするならばstrcmpでよくね?
521 名前:520 mailto:sage [2008/01/10(木) 02:01:15 ] 書いた後に気づいた。char str[] = "AB AA ABCA BA BB";ってことか。 char * str[] = { "AB", "AA", "ABCA", "BA", "BB" };だと思った。 セパレータが固定されてるなら>>517 でよさそうだね。 ただし、後ろだけじゃなくて前後につけなきゃだめだけど。
522 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 02:04:11 ] >>516 正規表現ライブラリを使ってみるととか
523 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 02:26:09 ] オタだとばれない程度のプログラムってどんな物があるんでしょうか。
524 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 02:30:31 ] >>523 中途半端なプログラムではなく、きっちりしたプログラムならヲタだと思われない。 また、言語知識以外にも専門的な知識が必要になるプログラムなら確実に思われないだろうな。 たとえば、半導体のキャリア輸送をシミュレートするプログラムとか。
525 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 02:38:51 ] 他には何かないのか。
526 名前:デフォルトの名無しさん [2008/01/10(木) 03:09:30 ] 以下のソースがコンパイル通りません。 色々とそぎ落としてこうなったのですが、どこが間違ってるのでしょうか? 誰か助けて〜 #include <iostream> #include <queue> using namespace std; class event { int priority; public: event() { priority = 0; } bool operator<(const event &a); }; bool event::operator<(const event &a) { return this->priority < a.priority; } int main() { priority_queue<event> q; return 0; }
527 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 03:12:25 ] >>526 デバッグを他人に丸投げしたいのでなければ、エラーメッセージくらい張れ。
528 名前:デフォルトの名無しさん [2008/01/10(木) 03:50:09 ] >>527 すいません。以下です。コンパイラはlinuxのg++です。 意味があるのは最後の4行だと思うのですが、それでも意味が分からん。。。 $ g++ test.cpp /usr/include/c++/4.2.1/bits/stl_function.h: In member function 'bool std::less<_Tp>::operator() (const _Tp&, const _Tp&) const [with _Tp = event]': /usr/include/c++/4.2.1/bits/stl_heap.h:279: instantiated from 'void std::__adjust_heap (_RandomAccessIterator, _Distance, _Distance, _Tp, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator <event*, std::vector<event, std::allocator<event> > >, _Distance = int, _Tp = event, _Compare = std::less<event>]' /usr/include/c++/4.2.1/bits/stl_heap.h:404: instantiated from 'void std::make_heap(_RandomAccessIterator, _RandomAccessIterator, _Compare) [with _RandomAccessIterator = __gnu_cxx::__normal_iterator<event*, std::vector<event, std::allocator<event> > >, _Compare = std::less<event>]' /usr/include/c++/4.2.1/bits/stl_queue.h:353: instantiated from 'std::priority_queue<_Tp, _Sequence, _Compare>::priority_queue (const _Compare&, const _Sequence&) [with _Tp = event, _Sequence = std::vector<event, std::allocator<event> >, _Compare = std::less<event>]' samp50.cpp:14: instantiated from here /usr/include/c++/4.2.1/bits/stl_function.h:227: error: passing 'const event' as 'this' argument of 'bool event::operator<(const event&)' discards qualifiers
529 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 03:59:44 ] const忘れてるぜ
530 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:01:44 ] - bool operator<(const event &a); + bool operator<(const event &a) const; - bool event::operator<(const event &a) { + bool event::operator<(const event &a) const {
531 名前:デフォルトの名無しさん [2008/01/10(木) 04:02:27 ] >>529 えっ,どこですか? priority_queue<const event> としてみたのですがダメ。(コンパイル通らず)
532 名前:デフォルトの名無しさん [2008/01/10(木) 04:06:19 ] >>530 コンパイル通りました! でも意味わかんねえス。今まで演算子のオーバーロードでそんなところに constつけたことなかったよ。どういう意味ですか?
533 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:06:26 ] 笑ってしまっていいのだろうか……
534 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:07:17 ] 笑えよ・・・
535 名前:デフォルトの名無しさん [2008/01/10(木) 04:10:32 ] >>533 ,534 だんだん自分でも怖くなってきた。もしかして自分は、すごく基本的なことを 知らないとか言ってる?
536 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:11:30 ] .>>528 そのoperator<()が非constメンバだから、非constなオブジェクトからは呼び出すことができない。 書き換えを伴わないメンバ関数は、全てconstメンバにしておくべき。
537 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:11:58 ] うぜぇな ttp://www.google.co.jp/search?source=ig&hl=ja&rlz=&q=%E3%83%A1%E3%83%B3%E3%83%90%E9%96%A2%E6%95%B0+const&meta=lr%3Dlang_ja これでも見てろ
538 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:12:13 ] > 演算子のオーバーロードでそんなところにconstつけたことなかった 「演算子のオーバーロード」を「メンバ関数」に置き換えても、やっぱり同じことが言えるんだとしたら、 かなり基本的なことを学び損ねてると思う。 そうでないなら、まぁちょっとした誤解だから、すぐ知識の修正もできるだろうけど。
539 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:24:38 ] bool operator<(const &TYPE)const;じゃないとダメなのはpriority_queueの問題でしょ あと >そのoperator<()が非constメンバだから、非constなオブジェクトからは呼び出すことができない。 「constなオブジェクトからは呼び出すことができない」じゃね
540 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:38:54 ] >>537 微妙・・・
541 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 04:48:34 ] priority_queueは内部でstd::lessを使うんだが、これが>>526 の場合は bool less(const event &a, const event &b){ return a < b; } こんな感じなので、eventクラスのoperator<がconstメンバ関数じゃないとエラーになる
542 名前:デフォルトの名無しさん [2008/01/10(木) 05:41:08 ] >>536-541 色々こんな時間にありがとうございます。 自分の中ではとりあえず、 「priority_queue用に独自classに<(less)を定義する時は、引数と関数にconstをつける必要あり」 というルールで記憶することにしました。そして、 かなり基本的なことを学び忘れているようなので、とりあえず関連記事探して独習c++でも逝っときます。 関数にconstをつけるのは本当に知らなかった。メンバ変数にconstをつけるのは 意味なし、くらいに思っていたし。。 関数にconstつけるのは、メンバ変数を変更しない、という意味でいいんですよね? あと、537が書いてくれたリンクはわかりやすかったんですけど、540の微妙…という コメントは、どうしてですか?
543 名前:Gori [2008/01/10(木) 05:46:34 ] これら どの様な違いが有るのでしょうか? Microsoft Visual C++ 6.0 Standard Edition Microsoft Visual C++ 6 Professional Microsoft Visual C++ 6.0 Enterpris
544 名前:つらいぜ独学 [2008/01/10(木) 06:45:35 ] ちょっと質問です。 #include<stdio.h> void aaa(int test){ int i = 1; if(test == 5) return; printf("あ"); test += i; aaa(test); printf("え"); } int main(void){ int test = 0; aaa(test); return 0; } の結果を あああああえ になるかと思ってたんですが、 実際は あああああえええええ でした。 これは何ででしょうか?
545 名前:デフォルトの名無しさん [2008/01/10(木) 07:05:59 ] aaa()に入ったら、引数が5でないかぎり printf(え)を実行するじゃん。引数が5になるまで、 aaa()は5回呼ばれる。
546 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 08:23:17 ] >>544 再帰関数の中で、再帰する前の処理をA、自分自身の呼び出しをB、再帰した後の処理をCとすると その再帰は(ABC)になってるわけだろ。 で、ここのBをまた(ABC)に置き換えて…ってのを5回(4回か?数えるのメンドクセ。)やって 最後のときはBを消すって形で終わってるから最終的な形としては (AAAAACCCCC)になる。
547 名前:536 mailto:sage [2008/01/10(木) 10:25:10 ] >>539 そうそう、間違えた。訂正感謝。 >>542 微妙。まともじゃない解説をしているサイトも検索されるから。
548 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 12:11:58 ] // ABase.h class ABase { public: typedef std::vector<B> VectorB; // Bは完全型でなくてはいけない? virtual VectorB::iterator F(const VectorB& vec)=0; ... } // B.h template <...> // テンプレートクラスのため.hと.cppにわけることができない class B { public: void F() { pABase_->...; // ABaseの関数を呼び出す ... } private: ABase* pABase_; }; ABaseはBの定義が必要、BはAbaseの定義が必要という状態になってしまい、困っています。 こういった循環参照を避ける手法はないでしょうか?
549 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 12:17:13 ] 質問させてください。 C++言語で interface A { virtual void MesA() = 0; }; interface B { virtual void MesB() = 0; }; interface C : public A,public B {}; class D : public C { public: void MesA() { printf("A class\n"); } void MesB() { printf("B class\n"); } }; int main() { D d; void *p = (D *)&d; B *bbb = (B *)p; B->MesB(); } こうするとAのMesAのメソッドが呼ばれてしまいます。 Cの中身は空ですが、他のメソッドが書かれています。(このサンプルでは関係ないと思うので空にしました) 変数pを一度C型にキャストしてからB型にキャストするとうまくいくのですが、 なるべく、そうはしたくないので困っています。 原因、解決策のわかる方教えてください。 環境 Visual Studio 2003 .NET 2005でも同じでした。 改行が多すぎるとエラーが出たのでみずらくてすいません。
550 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 12:47:53 ] >>548 これでどうかなぁ でもかなり無理矢理な感 // ABase.h #include "B.h" #ifndef ABase_h #define ABase_h class ABase { ... }; #endif // B.h #ifndef B_h #define B_h class ABase; template <...> class B { public: void F(); private: ABase* pABase_; }; #include "ABase.h" template <...> void B<...>::F() { pABase_->...; }; #endif
551 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 12:54:24 ] >>549 void*を元と異なるクラスにキャストしてるのが原因かと >void *p = (D *)&d; >B *bbb = (B *)p; ここ(pはD*なのかB*なのか??)を void *p = (B *)&d; B *bbb = (B *)p; とする(pはB*を保持)か、あるいは void *p = (D *)&d; B *bbb = (D *)p; とする(pはD*を保持)
552 名前:548 mailto:sage [2008/01/10(木) 13:17:57 ] >>550 レスthx しかし、できれば書きたくないコードですね。 設計を見直した方がいいのかなぁ。
553 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 13:47:15 ] >>552 こういう風にしてみるとか // ABase.h #include "Bdecl.h" class ABase { ... }; // Bdecl.h class ABase; template <...> class B { ... }; // Bimpl.h template <...> void B<...>::F() { ... }; // B.h #include "ABase.h" #include "Bimpl.h"
554 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:38:23 ] 標準偏差を求める計算式はどのようにしたらいいでしょうか?
555 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:43:15 ] ググレカス
556 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 14:57:59 ] レスありがとう御座います。 説明不足の部分がありましたので、補足させて頂きます。 実際この処理を使う場面では //interface AはA.hに定義 //interface BはB.hに定義 //callbackA.cpp #include "A.h" void callbackA(void *p) { A *a = (A *)p; a->MesA(); } //callbackB.cpp #include "B.h" void callbackB(void *p) { B *b = (B *)p; b->MesB(); } 引数pにはDクラスのアドレスが入っているとします。 このように callbackA.cpp中ではAのinterfaceのみが公開され、 callbackB.cpp中ではBのinterfaceのみが公開されるようにしたいのです。 やはり>>551 さんのようにcallbackソースの中でDやCの定義を公開して キャストするしかないのでしょうか? 説明不足で申し訳ありませんでした。
557 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 15:24:17 ] >>556 callbackAを呼ぶときはpにはA*をvoid*にしたものを渡せばいいし callbackBを呼ぶときはpにはB*をvoid*にしたものを渡せばいいが どうしてもpにはD*を渡したいけどDは公開できないというのはわりと無理め いくらか妥協するなら例えば class Z { virtual void dummy(){} }; みたいなダミーを用意して class D: public C, public Z { ... }; としてDにZを継承させ void callbackA(Z *p) { A *a = dynamic_cast<A *>(p); a->MesA(); } って方法もある 引数の型を変えたくないなら void callbackA(void *p) { A *a = dynamic_cast<A *>((Z*)p); a->MesA(); } とか
558 名前:デフォルトの名無しさん [2008/01/10(木) 15:24:55 ] cでは変数のアドレスを表示するときに printf("%p", i); とかやってましたが、これをcout << でやるにはどうすればよいでしょうか?
559 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 15:34:09 ] >>558 basic_ostream& operator<<(const void*) が定義されてるから、 cout << static_cast<void*>(i); だな。
560 名前:デフォルトの名無しさん [2008/01/10(木) 16:04:19 ] >>559 ありがとうス。実際は void func(T& a) { cout << static_cast<void *>(&x); ... } としました。
561 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 16:13:28 ] うわ、ありえねぇ。
562 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 16:59:17 ] 変数xが1〜6の間ならって表現したいなら if(1<=x<=6){ でいいのでしょうか?間違ってるなら正しい方法おしえてください・・
563 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:02:36 ] if (1 <= x && x <=6) {
564 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:35:21 ] if (x >= 1 && x <= 6) ;
565 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:48:21 ] switch (x) { case 1: case 2: case 3: case 4: case 5: case 6:
566 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:53:14 ] >>565 xが整数じゃない場合もそれでOKなんですね? ありがとうございました。 これで課題が終わりそうです。
567 名前:562 mailto:sage [2008/01/10(木) 17:54:27 ] ありがとうございます、そのふたつはどっちでもいいんでしょうか?
568 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 17:59:25 ] 1が前になったのは、質問者のをそのままコピーしたからだけど 別にどっちでもいい。
569 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 18:43:51 ] >>566 いいわけねーだろバーカチョーン
570 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 18:50:12 ] >>566 は明らかに嫌味で言ってると思う。
571 名前:デフォルトの名無しさん [2008/01/10(木) 20:36:58 ] 初心者です。 VisualC++ win32API で、質問なんですが VisualStudioでプログラムを実行したらちゃんと動くのに exeファイルをクリックして実行するとフリーズしたりするのはなぜなんでしょうか?
572 名前:448 [2008/01/10(木) 20:42:18 ] きたーーーーーー 解決しました。 コンソールアプリ→WINDOWSアプリに設定を変えるタイミングが悪かったみたいです。。 申し訳ありませんでした あと>>456 でもらったソースを貼り付ける必要がありました。 とにかく、おかげさまで先へ進めました。レスくれた人たち、まじでありがとうございます。
573 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 20:43:16 ] >>571 お前の書いたプログラムにバグがあるからだろうと思う
574 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:17:05 ] C言語に限ったことではないのですが、浮動小数点の変数で float f = 1.0f とすると、その変数型の可能な限り、1.000....となるのでしょうか それとも小数点第2位以下は不定となるのでしょうか
575 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:19:44 ] >>574 精度の範囲で1.000... ってちゃんとしてくれるよ1.0に関してはな!
576 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:22:49 ] 早い返答ありがとうございます。 どういう場合に、まずいことが起こるんでしょう? サンプルコードを見ると、1.fなどはほとんど無く1.0fという数字ばかりなのですが、 もしかして関係してるのでしょうか。
577 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:31:08 ] 0.1 とか2進数で無限小数になるから途中で打ち切られる。 1.f と 1.0f に特に違いは無いが、 言語によっては . で終われない場合もあるので 1.0f で慣れておいた方が良さげ。
578 名前:562 mailto:sage [2008/01/10(木) 22:39:57 ] すみません、1〜6のときあああって出力して、6〜10ならいいいって出力、それ以外はうううって 出すのってこれでいいんですよね?なんかコンパイルするとエラーがでてしまうのですが・・ void aa(){ if (1 <= x && x <=6) { printf("あああ\n"); } else if(6 < x && x <=10){ printf("いいい\n"); } else{ printf("ううう\n"); } }
579 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:42:09 ] x って何?
580 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:42:57 ] xを定義しなさい
581 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:47:23 ] int x =0;とかを2行目にいれればいいんですか?
582 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:50:02 ] >>578 > なんかコンパイルするとエラーがでてしまうのですが・・ これは「何かが起こったんですが、これは何でしょう?」って言ってるのと同じだ。 ちゃんと質問しろ。
583 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:50:27 ] x をどうやって指定するかを考えれば自ずと分かる
584 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:51:58 ] 何をしたいプログラムなんだ? int x =0;とか入れればエラーは消えるが ううう しか出んプログラムになるぞ。 入力した数値や計算結果を使って出力を変えたいんじゃないのか?
585 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:54:53 ] 数字の定義は外部というか、プログラムの前の部分でしてあるはずなんです。 二人でやる課題で、xを定義とか入力に応じて帰るとかその辺は違う人がやるので・・
586 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:56:54 ] >>585 どっちにしろ、関数aa()にxを入れなきゃ駄目だろ。
587 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 22:59:14 ] 外部、例えばmain関数でxが定義されていても、その関数からxを直接参照することはできない。 教科書でローカル変数とかグローバル変数とか調べて見れ。
588 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:12:47 ] ええ、そうなんですか・・・ 外部のxを読み込めみたいな命令ってどうやるんでしょうか・・
589 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:13:45 ] >>588 いいから教科書で勉強しなおすんだwwwwwww 引数とかグローバル変数とか分からないの?
590 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:16:34 ] お前は一生1から10まで人に聞いてすごすつもりかw 関数を勉強する最初の授業で習うようなことなんだから、ノートを見直して来い。 ノート取ってないなら教科書の関数のページ開いて嫁。
591 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:25:19 ] 教科書は一応あるけど何を言ってるのかよくわからないです。 外部の変数どう読み込むかって書いてないような・・
592 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:40:36 ] そうだ、諦めよう!
593 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:47:01 ] >>591 ITMediaの記事で ジャストのおっさんが 人に聞くのがコミュニケーション能力かつ 正しい成長方法だっていったぞボケ
594 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:51:30 ] warata 全く勉強しないで終わらせる気なのか?
595 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:53:23 ] void aa(){ extern int x; if (1 <= x && x <=6) { printf("あああ\n"); } else if(6 < x && x <=10){ printf("いいい\n"); } else{ printf("ううう\n"); } }
596 名前:デフォルトの名無しさん mailto:sage [2008/01/10(木) 23:55:13 ] >>593 聞いた事を元に、それなりに自分で考える時間も取らないと身に付かん。
597 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:11:54 ] ありがとうございます。そんなコマンドあったのですね・・・ ご迷惑おかけしました
598 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:23:25 ] formが出たときに何ができるのか分からないです。 OS:windowsXP
599 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:39:42 ] エスパー様、>>598 がお呼びです。
600 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 00:59:14 ] 自分で試せばいいのかもしれないですが、その力がないですorz 正確な測定方法でも良いのでご教示ください Cとなんでもよいのですが、例えばC#やVB ある文字列の中身の特定文字列を検索する場合だとします。 AEFASDEAEASDDという文字列があった中でDEAを検索する場合 Cならばまず文字列内を一文字ずつループでDを検索し、見つかればその直後にE、その直後にAと探していき 発見することができますが、C#やVBでは文字列の検索機能(メソッド?)があります 一見ループと条件分岐とメソッドの呼び出しになるのでどうしても前者がはやいとは思えません ですが実際は前者がはやいのでしょうか?
601 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:02:33 ] strstrでも使っとけ
602 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:02:57 ] メソッドの方が多分ネイティブルーチン呼んでるから速いと思う。
603 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:04:44 ] >>600 何故そう思うのですか? 或いは、何故Cならば検索する関数がないと思うのですか?
604 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:05:05 ] >>602 んなこたーない。
605 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:08:08 ] ああ、C と C# の比較か。 それなら C が速いんでないかい。
606 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:08:13 ] >>604 お前の頭の悪さと 醜悪な固定観念にワロタw
607 名前:604 mailto:sage [2008/01/11(金) 01:10:08 ] >>606 正解は、「一概には言えない」となる。 従って、「メソッドの方が云々」なんてくだらない思い込みに対しては「んなこたーない」で充分。
608 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:11:29 ] そういう事を言えるのは、一概には言えないことを確かめてからだな。
609 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:11:39 ] >>599 C++buridaの話なんですけど フォトショをつなげると何かあるんでしょうか。
610 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:12:05 ] C++ぶりだ?
611 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:12:06 ] 文字の検索アルゴリズムはちょっと面白い。興味があったら色々調べて見なさい。
612 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:13:13 ] BM法と単純検索以外なんもねーだろ あとはつまんねー長たらしい正規表現か
613 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:13:43 ] KMP とかもあるお
614 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:17:32 ] >>609 エスパー求む!
615 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 01:19:39 ] 僕に合った良い病院はないでしょうか。
616 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 02:16:32 ] >>585 二人でやる課題なのに、各自の担当部分のインタフェース(データの受け渡し方法)を取り決めないのか? それじゃ仮に君がC/C++の文法を理解していたとしても無理だ。
617 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 02:25:59 ] >>609 正直な話、あんたが何を言っているか本気でわからん。 「C++burida」でググってみたらTOPに「ダイコンの豆知識」がでてきたぞ。 PhotoShopをつなげるというのも意味不明、何につなげるんだ? そもそもPhotoShopはソフトウェアの名称で、つなげるという動詞を使うことは中々無いと思う。 >>598 時点でのformに関してもあまりにも抽象的な単語で何を意味しているか不明。 順番に端折らずに、お前の聞きたいことを丁寧に書き込むんだ。 すれ違いならエロい人が誘導してくれる。
618 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:07:11 ] 大根に危うく吹きそうになった。そんなもん調べんなw
619 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:18:16 ] プログラマ的に言うとPhotoShopなんてソフトウェアはない
620 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:27:41 ] >>619 はいはい
621 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:28:53 ] 鰤大根かw
622 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 03:47:27 ] そういえばこの冬はまだ一度も作ってないな。
623 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 04:05:52 ] >>617 C++BuilderとFormはまあ判った。 フォトショとは何なのか(Photoshopとしても何の関係があるのか)判らん。 もちろん、何を質問しているのかなど全然判らん。
624 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 08:06:56 ] CorelDRAWはVBAで制御できたよ('(゚∀゚∩ 今のバージョンは知らんが
625 名前:デフォルトの名無しさん [2008/01/11(金) 12:33:03 ] STLの中で、make_heap()などのヒープ関連のアルゴリズムの 意味がわかりません。適当なコンテナにmake_heap(begin,end)すると、 先頭に一番大きい要素がくる、それだけなんですよね? それじゃあ、make_heap()とか、存在している意義がないような。
626 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 13:08:25 ] >625 「それだけ」ではないです。ヒープというデータ構造について調べてみるといいよ。
627 名前:デフォルトの名無しさん [2008/01/11(金) 13:51:39 ] >>626 調べてみると、 ヒープというデータ構造は、データの中から最大(最小)値を取り出すのに いいということがわかりました。 make_heap(begin,end) pop_heap()begin,end) make_heap(begin,end-1) pop_heap()begin,end-1) make_heap(begin,end-2) pop_heap()begin,end-2) ... で、ヒープソート相当のことをできるんですね。 でも自分では使いそうにないなあ。
628 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:17:30 ] STLのlistでコンテナの入れ替え(コンテナの中身ではない)を する方法ってありますか?
629 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:24:57 ] >>628 その「コンテナの入れ替え」を定義してください。
630 名前:デフォルトの名無しさん [2008/01/11(金) 14:32:04 ] 型の違うもの同士の比較について教えてください。 structure_card_information card_information; unsigned char card_idm[8]; unsigned char card_pmm[8]; card_information.card_idm = card_idm; card_information.card_pmm = card_pmm; //カード情報の読み込み処理 //読み込み結果の表示 print_vector("card PMm:", card_pmm, sizeof(card_pmm)); //初回起動ならIDmをfile.txtの先頭に入力する fp = fopen("file.txt","r"); char *c; //cの中にfpの一文字目が入る fgets(c,1,fp); fclose(fp); //他のカードで端末に接触したとき接触したカードのidmを追加登録する if(c != card_idm){ print_vector("card IDm:", card_idm, sizeof(card_idm)); //カードへの書き込み処理を行う というプログラムを作っています。 読み込んだcard_idmというものがchar型のcと違う場合カードへの書き込み処理をする というプログラムにしたいのですがcard_idmというものはchar型ではないのでどのように比較処理をすればいいのかわかりません。 どのように比較すればいいのでしょうか。もしよろしければ教えてください。
631 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:39:38 ] if(strncmp(c,card_idm,strlen(c)){ hogehoge; }
632 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:42:43 ] >>630 一年諦めて、まともにCを勉強してから卒研に取り組んだら? fgets()の使い方が阿呆すぎて話にならないんだけど。
633 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 14:55:14 ] ポインタもまったく理解できてないな
634 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:15:15 ] >>628 swapのことか?ならSTLコンテナ全て持ってる。
635 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:37:11 ] >>629 コンテナの連結状態を変えたいんです >>634 swapだと中身のコピーによる値の入れ替えになるんじゃないでしょうか? 例えばlistのコンテナが 1,2,3,4,5 と繋がってる場合に、3,4,5 を切り離して、 1と2の間に挿入し、1,4,5,6,2 という形にしたい場合に、中身の入れ替えでは なく、コンテナの連結先のみを書き換えることで行う方法が無いかを知りたい のですが。
636 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:40:09 ] 訂正 1,4,5,6,2 ではなく、1,3,4,5,2
637 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 15:47:00 ] >>635 splice
638 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 16:02:13 ] >>635 ならspliceメンバー関数だな
639 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 16:04:20 ] 現在VS2008のC++でコンソールアプリケーションを弄っていますが、 _beginthreadexでルーチンを呼び出してもメインスレッドで処理されてしまいます。 どなたかお助けくらさい。。。
640 名前:デフォルトの名無しさん mailto:sage [2008/01/11(金) 16:06:25 ] 普通はそうならないので、ソース見せてよ