1 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 21:36:23 ] エスケープシーケンスやWin32APIなどの環境依存な物でもOK。 ただしその場合、質問者は必ず、環境を書きましょう。 ※sageは禁止です。 【前スレ】 【初心者歓迎】C/C++室 Ver.34【環境依存OK】 pc10.2ch.net/test/read.cgi/tech/1169039760/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
297 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 07:36:58 ] 生成されているのは事実だが 何処で生成しているか判らないから聞いている質問だと思うが? ブレークポイントを置いてこのときはまだ生成されていないとかから すこしずつ絞り込んで行くとか。
298 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 07:41:43 ] extern 宣言してあるんだからコンパイル開始時に生成されると思うんだけど
299 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 07:43:12 ] あ、コンパイル開始というかプログラム開始時に
300 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 08:58:45 ] 「class hoge を継承したクラスのインスタンスを1個は作れ。 作るタイミングはおまえさん次第」 で、どこかで作られたであろう インスタンス をポインタで保持して、 いつでも呼び出せるようにしている と。 # MFC の CWinApp じゃね?
301 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:00:01 ] グローバルで作ったのなら スタートアップルーチン内 でインスタンス化してる
302 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:30:18 ] DLLを作成したいのですが、 フリーソフトによる開発環境では不可能なのでしょうか? Visual C++では出来なかった物で…。
303 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:45:38 ] できるよ VCのスレ…いや、画像付きの解説ページがあったはずだから、ぐぐった方が良いな
304 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 09:50:37 ] >>303 ExpressバージョンではMFS、ATLが含まれていないので作成出来ないと思っていました。 有難うございます、もう少しぐぐってみます。
305 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 10:43:30 ] MFCもATLもなくたってDLLは作れる。 プロジェクト作るときにどこかでDLLを選ぶだけ。
306 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 11:29:49 ] >>291 つ GetLastError()
307 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 16:27:32 ] 質問です。 クラスの「constメンバ関数」は、メンバー変数の書き換えを禁止しますよね。 これによって「その関数は何度呼び出しても問題ないはずだな」 と思って分担作業をしていました。 ところがconstメンバ関数の中から、グローバル空間の変数を書き換えている奴がいたのです。 いままで知らなかったのですが、constメンバ関数はグローバル空間の変数などを書き換えてもコンパイルエラーにならないのですね。 この行為を禁じるための、C++文法的な書き方はありませんでしょうか。 「グローバル変数使うの禁止!」といっても使う奴が稀にでてきてコマっています。
308 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 16:31:38 ] ありません。
309 名前:デフォルトの名無しさん [2007/03/07(水) 16:43:50 ] 質問です。 ヘッダーファイルで private: int (*ptr)[10]; int x[10][10]; と宣言しています。ちゃんと機能しています。 それでデコンストラクターでメモリの解放をしたいんですけど delete [][] x; ではコンパイルが通りません。 delete [] x; では Expression: _BLOCK_TYPE_IS_VALID(pHead->nBlockUse) と出てRun-Time Errorになってしまいました。 どうやって解放するんでしょうか?教えてください。 環境はVC++2005 Express Editionです。
310 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 16:49:12 ] >>309 newしてないんだからdeleteする必要はない。
311 名前:309 mailto:sage [2007/03/07(水) 16:53:34 ] >>310 あア、ナルほど! newとdeleteはセットなんですね。 ご親切にどうもありがとうございました!
312 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:02:02 ] あと、デコンストラクタじゃなくて、デストラクタな。 俺も昔勘違いしてた。
313 名前:デフォルトの名無しさん [2007/03/07(水) 17:40:36 ] if(aaa>=1 && aaa<=10) のように if(aaa>='1' && aaa<='10') これも文字だけでできますか?わざわざ数字に変換しなくてもいいですか?
314 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:43:27 ] わざわざ数字に変換しないとだめです
315 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:43:51 ] '10'
316 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:45:25 ] '10'は規格上は通るけど、恐らくあなたの期待した値にはならないでしょう。
317 名前:デフォルトの名無しさん [2007/03/07(水) 17:47:25 ] '9'までしか無理ということですか?
318 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:49:53 ] 文字定数でぐぐれ
319 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 17:54:32 ] そもそもaaaの型は何だよ。何が入っているんだ
320 名前:デフォルトの名無しさん [2007/03/07(水) 18:00:41 ] リテラルにあった型です
321 名前:デフォルトの名無しさん [2007/03/07(水) 18:30:53 ] 年月日時分秒を取得するlocaltimeという関数は見つかったのですが その取得した時間に10時間プラスしたときに 24時間を越えると日付によって年月日は変動すると思います 時間をたしたいのですが こういう処理のためになにか用意されていないでしょうか? 環境はVC++2002です
322 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:33:17 ] 閏秒は無視して、localtimeに渡す前のtime_tに対して10*3600足せばよくね?
323 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:34:19 ] time_t struct tm
324 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:34:25 ] >>321 time_t型にした上で、10時間(10 * 60 * 60[sec])を足し、localtime()でばらすかstrftime()で文字列にすれば宜しい。 既にlocaltime()でばらしてあるなら、tm_hourに10を足してからmktime()でtime_tにしてもいい。
325 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:39:11 ] 初心者本でこの辺りをまともに解説しているのってあるのかな。 ちなみに、localtime(), gmtime(), asctime(), ctime()はスレッドセーフではないので マルチスレッドプログラミングのときはご用心。
326 名前:321 [2007/03/07(水) 18:45:56 ] マルチスレッドプログラミングですがlocaltimeを使うのはまずいでしょうか?
327 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:49:18 ] 処理系のマニュアルを参照セヨ
328 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 18:49:49 ] 簡単なプログラムの途中に見栄えを良くするために 横線を引きたいのですが、何かいい方法はありますでしょうか?
329 名前:321 [2007/03/07(水) 18:50:51 ] 1スレッドでしか試してませんが time_tに対して10*3600してできました ありがとうございます
330 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:00:18 ] localtime()などは内部の静的な領域を使い回しするから、 それを呼び出すスレッドが複数ある場合は衝突が発生する可能性がある。 まぁ、呼び出すスレッドが一つだけなら問題ないけどね。 簡単に図式化するとこうなる。 ・単一スレッドからの呼び出し スレッドA ──localtime()呼び出し──内部領域変更──localtime()から復帰──内部領域から結果を回収── ・複数スレッドからの呼び出し スレッドA ──localtime()呼び出し──内部領域変更──localtime()から復帰──内部領域から結果を回収── スレッドB ────localtime()呼び出し──内部領域変更──localtime()から復帰──内部領域から結果を回収── ↑ ↑ ここで壊れる。 もし壊れなくても、ここでスレッドBからの呼び出しの結果を読む羽目になる。
331 名前:デフォルトの名無しさん [2007/03/07(水) 19:08:53 ] localtime()を使うスレッドクラスをひとつ用意すればいいということですね すごく参考になりました
332 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:43:27 ] >>320 ふざけたこと抜かすんじゃねー
333 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:44:01 ] VCのCRTはTLS使ってるから問題ないけどね。
334 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 19:48:49 ] >>317 数値と文字を一緒にするな。 他の言語だと自動で文字を数値に変換したりするけど C/C++などは'9'をそのままASCII文字コードだよ。 e-words.jp/p/r-ascii.html つまり '9'を数値で言うと57 '$'を数値で言うと36 だ。 '10'はコンパイラによって違うと思う。
335 名前:デフォルトの名無しさん [2007/03/07(水) 21:39:31 ] メイン関数内でnewしている継承される可能性のあるクラスを 継承された場合、継承後のインスタンスでnewしたいのですが、エレガントな方法が 思いつきません、ご教授お願いします。
336 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 21:49:53 ] >>335 複数のクラスがそのクラスを継承してる場合はどうするべき?
337 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 21:52:44 ] >>335 もうすでにnewしちゃったんじゃしようがないんじゃない。
338 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 21:54:41 ] newの代わりにFactoryを用意して(関数ポインタでも可)それ経由で生成するのがC++的には一番楽かな。
339 名前:デフォルトの名無しさん [2007/03/07(水) 22:13:46 ] >>336 継承後も含めてそのクラスのインスタンスが一つしか存在しないようにします。 >>338 Factoryでインスタンスを取得し、 FactoryをVirtualtou(等)にして継承した場合書き換えるという風にですか?
340 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 22:36:25 ] 継承するクラスをC++より上位のレイヤーで1つだけに制限できるというなら、 グローバルな関数 Base *new_derivered_class(); を実装すればよくね? それとも、継承先のクラスが存在しない場合Baseをnewする必要があるわけ?
341 名前:デフォルトの名無しさん [2007/03/07(水) 23:07:38 ] ホームページから任意のデータの取得を行いたいんだが さっぱりその方法が解りません。 その手のことが書かれたサイトを教えていただけませんか?
342 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:10:18 ] rubyなどのスクリプトを使う
343 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:14:21 ] >>342 やはりそうですか。 Cでやりたかったのですが、素直に真珠でやります。 ありがとうございました。
344 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:15:59 ] 真珠…
345 名前:デフォルトの名無しさん [2007/03/07(水) 23:20:04 ] >>340 継承してメンバー関数を上書きして処理を記述するようにしたいので、 何か処理をする場合には、必ず継承しなければならないです。 継承しない場合は、現実的にはないと思うのですが・・・
346 名前:デフォルトの名無しさん [2007/03/07(水) 23:23:48 ] >>343 「猫でも分かるネットワークプログラミング」にhtmlを読み込んで表示する方法が書いてあったと思う 今手元にないので分からんが、WinSockをつかってたとおも
347 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:29:17 ] WinsockでHTTPしゃべるのは結構面倒くさいヨ。
348 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:38:18 ] どうもです。 分野はネットワーク関係なんですね。 それが解っただけでも十分です。 ありがとうございました。
349 名前:デフォルトの名無しさん mailto:sage [2007/03/07(水) 23:51:03 ] >>343 WindowsならURLDownloadToCacheFile()が一番お手軽
350 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 01:16:50 ] >>343 真珠ってPearlって書くのしってんのか? いやPerlもPearlから来てるんだがな
351 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 11:07:27 ] C++builder使っております。 unsigned char*とchar*のキャストは、(*型)だけでキャストできるのでしょうか? 出来ないキャストの場合は、エラーや警告などでますか? 以下のようにしてプログラミングしましたが、希望通りの出力でした。 ネットで危険なキャストがどうの、って良く見かけるんですが よくわかりません。 ”桁が大きくなると、小さい型にキャストするときは気をつける。” これだけ注意すれば大丈夫でしょうか? unsigned char* un_str="hoge"; char* str; unsigned char* from_char_to_unsigned_char_str; //char*->unsigned char *の格納する変数 printf("un_str=%s\n",un_str); //unsigned char*は、char*みたいに出力できるか str=(char*)un_str; printf("str=%s\n",str);//(char*)だけで、キャストできるのか from_char_to_unsigned_char_str=(unsigned char *)str; printf("from_char_to_unsigned_char_str=%s\n",from_char_to_unsigned_char_str);//(unsigned char*)だけで、キャストできるのか ------出力------------------------------- un_str=hoge str=hoge from_char_to_unsigned_char_str=hoge
352 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:03:04 ] C言語を仮定するけど、ポインタは全部同じサイズだから相互にキャストできるよ。 > printf("un_str=%s\n",un_str); %s は const char* 型の引数を期待するから、 *((const char*)un_str)という変換が行われることになる。 un_strが指してるのは"hoge"、つまり const char[] だから、問題なく変換できる。 他も同じ。
353 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:26:55 ] > C言語を仮定するけど、ポインタは全部同じサイズだから相互にキャストできるよ。 現実には大抵そうなっているけど、規格上はそんな規定なんてないはず。
354 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:28:46 ] そうだっけ? んじゃvoid*の扱いはどうなるんだ?
355 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:29:45 ] 同じでない場合は、void*が一番でかいポインタのサイズ そして使うときはキャストされるので問題なし
356 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:32:17 ] 昔懐かしい、farポインタ、nearポインタ、とか?
357 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:40:29 ] 残念ながら void* も void(*)() を保持できる保証はない。
358 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:42:58 ] 375<< インラインアセンブリならできるかも・・・
359 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 14:45:19 ] >>356 普通に char* と int* のサイズが違うようなアーキテクチャも存在した。
360 名前:デフォルトの名無しさん mailto:sage [2007/03/08(木) 17:23:43 ] >>352-359 > C言語を仮定するけど、ポインタは全部同じサイズだから相互にキャストできるよ。 いろいろと実験しながら、少しずつわかってきました。 丁寧に説明ありがとうございました。
361 名前:デフォルトの名無しさん [2007/03/09(金) 20:15:24 ] WinSDKで、 モーダルダイアログボックスを使っているとき、 プロシージャに最後に呼ばれるメッセージは何ですか? WM_CLOSEメッセージでDestroyWindow(hDlg)して、 WM_DESTROYメッセージが呼ばれた後に、WM_COMMANDがくるのですが…
362 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 20:55:26 ] WM_DESTROYでウィンドウが消えた後は たとえそのウィンドウ宛にメッセージが来ても それは存在しないウィンドウハンドル宛だし 処理するところがないので無視することになるだけだと思うけど。 何か特殊なケース?
363 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:06:17 ] >>362 WM_COMMANDがくること自体は問題ないのですが、 エディットコントロールにWM_COMMANDがきたときに使うメモリを解放するのに、 WM_DESTROYの後にエディットコントロールに対してWM_COMMANDがきてしまうと、 わざわざWM_DESTROY呼ばれる前後で、場合分けするのが無駄だと思えるので…
364 名前:デフォルトの名無しさん [2007/03/09(金) 21:31:38 ] VC++6 で CString 使ってるんだけど、 CString な変数に ANSI コードページでもユニコードでもない文字列つっこんで処理したいんですわ。 具体的には、GetLenth とか Replace したい(ANSI コードページでもまともに処理してなさそうだけど) 楽に処理するにはどうしたらいいでしょう?CString 捨てな方法でもいいです。
365 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 21:56:12 ] vector<BYTE>でよくね?
366 名前:364 [2007/03/09(金) 22:07:24 ] >>365 俺に言ってる? CString はたとえばコードページ 932 の場合、 Replace で 1 バイト文字を置換対象にするときに、2 バイト文字の下位バイトが置換対象とバイト的には等しくても、置換しないようにするよね? そういうのをすべてのコードページでやりたいの。 ではよろしくお願いします。
367 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:08:23 ] >>364 っ nkf
368 名前:364 [2007/03/09(金) 22:33:56 ] >>367 nkf のライブラリにコードページを指定出来るようなメソッドを追加したクラスが実装されているということでしょうか? 単なる変換ができるというだけなら却下ですな。 (nkf 使わなくても文字コードの変換はできるし、変換することによってコードをマッピングできなくなる場合とか考えたくない。 ユニコード系のコードに変換すればマップだけはできるんだろうけど。 それといちいち文字コード変換するとよさげなソースコードにならなさそうなんだ。 そもそも nkf って日本語しか対応してないだろ? 個人的には今回の場合 UTF-8,CP51932,CP932 を使えれば問題ないと思ってるんだけど、他の奴が許さないんだぁ。) 注文多すぎてむかつくかもしれないけど、どうかどうかよろしくお願いします。 ぶっちゃけ CString::SetCodepage() とかいうメソッドが実装されていて、あとはよきにはからってくれる実装がほしい。
369 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:44:11 ] >>368 一々文字コード変換をしたほうがデバッグが楽だと思う UTF-8 -> Unicode 変換 ↓ Unicode で何か処理 ↓ Unicode -> UTF-8 変換 よさげなソースコードにならなさそうって言われればそれまでだけど…
370 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:50:22 ] CStringに自分が今どのコードページのデータを持っているとか それにあわせてReplaceの動作が変わるなんて出来ないんじゃないのって思うから vector<BYTE>でよくね?
371 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 22:53:13 ] >>364 つ MLang
372 名前:364 [2007/03/09(金) 23:14:46 ] >>369 やりたいことの一つに、「ANSI CP 以外の文字列読み込み->文字置換->そのまま書き込み」ってのがあるんだけど、 ユニコードにいちいち変換してたら絶対にスマートでないよね。 あと、調べたところまずなさそうなんだけど、変換->逆変換で違うコードにマッピングされると困る。 >>370 コードページ指定して UNICODE には変換できるんだから、出来ないはずはないとおもうんだけどなぁ。 クラスに変数 1 つだけ入れておけば使用側がセットして良きにはからうことはできるはず。デフォルトは CP_ACP で。 なんで実装されてないのか理解できないほどだ。 vc8 だと reentrant locale が一部実装されていて、1文字送りは簡単にできそうになってるなぁ。VC6 でつくらないといけないんだけど。。。 >>371 ちょっと調べてみます。ざっとみた感じでは変換しかしてくれなさそうだけど。 あと、これつかわないと CP51932 つかえなさそうですね。 MultibyteToWidechar とかに 51932 とかつっこめば変換だけは出来るとおもってたけど。
373 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 23:17:13 ] 鬼車がCSIじゃなかったっけ。Cだけど。
374 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 23:30:14 ] >>372 > ユニコードにいちいち変換してたら絶対にスマートでないよね。 コードページごとに処理を特殊化させるほうがよほどスマートじゃないと思うがね。
375 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 23:36:58 ] というか、そういう、1つの言語に対応するエンコーディングが氾濫していて UNICODEの変換・復元がもったいない、なんていうことを言うのは 日本人だけなのではないか?(w
376 名前:デフォルトの名無しさん [2007/03/09(金) 23:38:03 ] ソケットについて質問です。 クライアントからホストを char* szHost = "www.google.co.jp" gethostbyname( szHost ); の様に指定してHTMLをサーバから取得できる事は判ったのですが、例えば、 取得したいHTMLが、 www.google.co.jp/search?hl=ja&q=c言語&btnG=Google+検索&lr= の様にクエリも含む場合はどうすれば良いのでしょうか。 よろしくお願いします。(板違いなら誘導お願いします。)
377 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 23:40:20 ] URLエンコードしてそのままGETにぶち込めばいいだろ? CESも場合によっては変換する必要があるけど。
378 名前:デフォルトの名無しさん [2007/03/09(金) 23:47:15 ] 返信ありがとうございます。 暮れ暮れ君で申し訳ないですが、URLのエンコードってどうやるんでしょうか。
379 名前:364 mailto:sage [2007/03/09(金) 23:52:19 ] >>373 単純な置換にはかなり大げさなライブラリですな。いざとなったらこれで Replace をオーバーライドするか。 どうもありがとうございます。 もっと単純にできる方法も引き続き募集いたします。 >>374 個人的にはコードページが違うんだから、特殊になるのは当然だとおもうけど。 ユニコードが*本当に万能*なら汎用的に処理できるんでしょうけど。ま、CSI 論争はやめておきましょうか。 >>375 ま、大きな声でいってるのは日本人だけでしょうな。 でも、XFree86 で utf8 関数が投入されたときは一部の外国人もぶーたれてたな。 CSI かどうかはおいといて、reentrant locale がほしい人は外国でも結構いるみたい。
380 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 23:55:41 ] なんかこの人気持ち悪い…
381 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 23:58:26 ] >>380 おまえもな
382 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 23:59:17 ] 俺も俺も
383 名前:デフォルトの名無しさん mailto:sage [2007/03/09(金) 23:59:45 ] std::basic_string<char, euc_jp_traits<char> >みたいな? traitsを自作するとかさ。
384 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 00:05:36 ] >378 「URLのエンコード」程度なら、検索するべきですわん。 簡単に見つかるから。正確な事もわかるし。 ラフに解説すると、URLとして使ってよい文字ってのは あらかじめ決まってるから(←ってのは知ってたと思うけど) 使えない文字は %xx みたいな形式に置き換える事。
385 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 00:42:35 ] >>379 変換コストがもったいないと思っているのなら 大抵のCSI対応クラスは内部で統一コードに変換してるから意味ないぞ
386 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 00:46:18 ] >>385 CSIの意味わかってる???
387 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 01:13:10 ] キーが倒されている場合は歩くのモーションを、倒されていない場合はウェイトのモーションを再生したいのですが、 whileの中で、 if(キーが倒されている) アニメーションAを再生 アニメーションBを停止 else if(キーが倒されている) アニメーションAを停止 アニメーションBを再生 と書くと、()内が真or偽が判定されるたびに、アニメーションが最初から再生されて、0フレーム目しか再生されません。 最初に書いたようなことをするには、どういう風にプログラムを書けば良いでしょうか? できればヒントでよろしくお願いします。
388 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 01:19:58 ] 再生時に開始フレーム指定してそっからはじめればいいだけじゃん
389 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 01:35:22 ] どっちみちキーが倒されている気がするのは気の所為か? キーも大変だな、一々倒されて。
390 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 01:36:17 ] >>380 ヘンなとこで敬語使ってるからじゃね。
391 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 02:00:27 ] 整数の加算結果がオーバーフローしたかどうかを調べるにはどうすればいいですか?
392 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 02:03:47 ] 加算前より減ってたらオーバーフロー
393 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 02:30:54 ] >>391 鼻から悪魔がでたらオーバーフローしていると判断してよろしい。 処理系によっては、オーバーフローした場合を判断する方法があるかもしれない。
394 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 10:26:51 ] すいません、初歩的な質問なんですが、どなたかご意見いただければうれしく思います。 クラスBの中でクラスAのオブジェクトの配列を管理したい。 でもクラスAは、A2やA3などにも派生させてて、それも配列に入れたい、って場合。 class A { ... }; class A2 : public A{ ... } class A3 : public A{ ... } class B { vector<A> a1_vector; } ってしたいんだが、これだとa1_vectorにはA2,A3が入らないですよね? ってなると・・ class B { vector<A*> a1_vector; } で、new A, new A2とかでオブジェクト作って、そのポインタをa1_vectorにpushすることになると思うんですが、これだとクラスBのインスタンスが破棄されたときに、a1_vectorで管理されている各オブジェクトって廃棄されないですよね? で、google先生とかに聞くと、share_ptr使う人がいるみたいなんですが、それで問題ないですかね? なんか注意点とかありますか?もしくは他にいい方法ありますでしょうか?
395 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:11:03 ] 問題ないよ、A のデストラクタを仮想関数にするの忘れないようにね
396 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:19:43 ] 設計を見直せ。
397 名前:デフォルトの名無しさん mailto:sage [2007/03/10(土) 11:28:53 ] >>394 boost::shared_ptrでおk std:auto_ptrはコピーが破壊的でコンテナにいれらんないから駄目 敢えて他の方法を挙げるとすれば、Boehm GCを使うとか?