- 1 名前:デフォルトの名無しさん [2009/09/17(木) 22:22:59 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.67【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1247937958/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
- 369 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:48:08 ]
- >>366
32bit/64bit 問題だったりしてw
- 370 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 21:55:35 ]
- デバグビルドしてるんだろ
- 371 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:08:09 ]
- >>367
なるほど。。正確にはCランタイムが必要で .net framework入れるとCランタイムが入ってくるということですね 入れる対象マシンは私のじゃないのでモジュールだけ入れたいのですが >>359さんの方法が可能なのですかね?ちょっと調べてみます >>369 その問題がよくわかっていませんがどちらも32bit環境です
- 372 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:10:44 ]
- >>371
これは独り言だけど、コンパイルしたときの条件とか設定とかをちゃんと書くといいかもよ。
- 373 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:38:18 ]
- Microsoft Visual C++ 2008 SP1 再頒布可能パッケージ (x86)
www.microsoft.com/DOWNLOADS/details.aspx?familyid=A5C84275-3B97-4AB7-A40D-3802B2AF5FC2&displaylang=ja ...
- 374 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 22:42:59 ]
- こっちのほうが新しい。
Microsoft Visual C++ 2008 Service Pack 1 再頒布可能パッケージ ATL のセキュリティ更新プログラム www.microsoft.com/downloads/details.aspx?FamilyID=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c&DisplayLang=ja
- 375 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:18:31 ]
- 質問です。VC9EEで開発しています。
以下のような関数を書いたんです。動機は自作コンテナのオブジェクトプール用のイニシャライザです。 以前の環境をリセットして再利用できるように初期化します。 で、てきとーなテストではうまくいきました。つまり、クラスや構造体のメンバ変数を0にできました。 さて、このコードはセーフなのかアウトなのか知りたいです。メモリリークなどはしてないみたいです。 そのほかにも、もっと簡単な代替手段があればご教授ください。お願いします。 template<class T> bool ZeroInitializer(T& in){ void* Mem = calloc(1,sizeof(T)); if(Mem == NULL) return false; T* Temp = new(Mem) T;//<new>をインクルードしないと使えない。 in = *Temp; delete Temp; // free(Mem); return true; }
- 376 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:38:25 ]
- >>375 です。
今日はもう寝るので明日また見に来ますです。 よろしくお願いします。
- 377 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:43:37 ]
- >>375
何か無用に難しいことやってるね。 memsetで万事解決。
- 378 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:48:23 ]
- >>375
in = T() で十分だろ。 それは別としても、そのコードはアウト。 calloc() で確保したメモリは free() で解放しないとだめ。 あと、 new(Mem) T で例外が発生するとリークする。 そもそも calloc() 使って 0 初期化とか言ってる時点で T に だいぶきつい制約があるんだろうけどな。
- 379 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:49:09 ]
- >>377 C++ で memset() はねーよ。
- 380 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:50:25 ]
- >>375
メモリリークしてるかどうかはどうやって判断したの?
- 381 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:51:08 ]
- >>379
ゼロクリアする必要があるみたいじゃん。
- 382 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:57:15 ]
- >>377,381
www.kijineko.co.jp/tech/superstitions/initialization-by-memset.html www.kijineko.co.jp/node/163
- 383 名前:デフォルトの名無しさん mailto:sage [2009/10/04(日) 23:58:19 ]
- fill_nとかでいいじゃん。
- 384 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:00:25 ]
- >>382
いや、それは分かるけど、375はゼロクリアが必要だって言ってるんで。 関数名がZeroInitializerだし。 クラスのオブジェクトを初期化したいだけなのなら、話は変わってくるけど。
- 385 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:02:40 ]
- つまり calloc() の後にコンストラクタを走らせてるのが意味不明ってことで。
あとは 375 本人に語らせるしかない。
- 386 名前:375 mailto:sage [2009/10/05(月) 00:07:26 ]
- >>377
コンストラクタを呼ぶ前ならいいけど、VTableまで0にしちゃったらもんだいないかな?
- 387 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:09:21 ]
- >>386
寝たんじゃないのか。 とりあえず、なぜゼロクリアしたいのか、話を訊こうか。
- 388 名前:375 mailto:sage [2009/10/05(月) 00:11:09 ]
- 途中で投稿してしまった。
>>380 VCの<crtdbg.h>の関数でやりました。 >>381 & >>384 ごめんなさい。とりあえず、現在の状態をリセットできればZEROじゃなくてもいいです。 布団入る前に見にきてよかった。
- 389 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:12:26 ]
- じゃ、378で終了だな。
- 390 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:14:53 ]
- >>388
メモリプールみたいなものを作るならEfficient C++でもみて勉強すれば?
- 391 名前:375 mailto:sage [2009/10/05(月) 00:23:10 ]
- 時間があるので、細々と。
何で、こんなことしようかと思ったかというと、N分木のツリーコンテナを作ったのが始まりです。 このコンテナはテンプレートになっていて、いかなるTをも食います。 無難な初期化法を模索している時に、VCのstd::vectorの中身がかならず0で初期かされていることを思い出しました。 で、これをうまく取り込もうと思ったのでそういうコードを書きました。 >>389 >>378では問題がでないなら、それで終了です。 ちょっと大丈夫か不安だったんですが、まぁ、責任はユーザクラスに投げてしまうのもいいかなぁ。。。 >>390 まず本を買わないと!ですね。 とりあえず方向性が見えたのでそれで何とかしようと思います。 変な質問でしたが誠実に答えていただいてありがとうございました。 ぐっすり寝れますよ。;)
- 392 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 00:51:58 ]
- std::vectorの場合は、T()、つまり値初期化されるので、intやPODな構造体だと結果的に0初期化になる。
だから、とりあえずは>>375のコードのnewのところをnew(Mem) T();とすればいい。Tの後の括弧が重要。 (コピーコンストラクタなど)コンストラクタに引数を渡す場合もここで渡すこと。 そして、この要素を削除するときにはTemp->~T();でデストラクタを呼んでからfree(Temp);する。 こうすれば、コンストラクタ・デストラクタを持つクラスでもきちんと動くはず。 本格的にやるなら、std::vectorみたいにテンプレート引数でアロケータを取るようにする。 malloc→allocate new(void*)→construct ~T→destroy free→deallocate アロケータのメンバはこう対応する。
- 393 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:02:20 ]
- きめぇコードだなw
テンプレートで書いたら保守なんてできたもんじゃないな
- 394 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 01:21:45 ]
- >>392
T に制約を設けないならコンストラクタからの例外にも気をつけないと。
- 395 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 14:01:33 ]
- >>392
詳細ありがとうです。T()でも問題なさそうなのでそれで行きます。 元々は自分の認識の甘さが原因ですね。もっと精進したいと思います。 ありがとうございました。
- 396 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 14:15:44 ]
- > Tの後の括弧が重要。
括弧はなくてもいいと思うが。あってもいいけど。
- 397 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:24:36 ]
- vectorのイテレータiから要素へのポインタpを得る方法がわからず、
詳しい知人に聞いたら、 p = &*i; いうやり方を教えてくれました。なるほど確かに動いているのですが、 一見無意味な変換をしているようで気持ち悪いです。 こういうやり方って一般的なんですかね。
- 398 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:41:42 ]
- >>397
一般的だと思う。 「自分の環境のvectorのイテレータはポインタで実装されているから」といって、 イテレータをそのままポインタとして使う方が気持ち悪い。
- 399 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 18:43:02 ]
- >>397
vectorのイテレータはランダムアクセスイテレータなので、機能的にはほとんどポインタと変わらない。 (*it)ってやれば、要素を返してくるので、それのアドレスを返せばポインタへの変換はできる。 でも、俺もキモイと思う。一般的かは別として。。。
- 400 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 19:33:23 ]
- >>397
一般的というか、普通にそれが正解だし、中身を理解してくれば不自然さも感じなく なってくるかもしれないし、なってこないかもしれない
- 401 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 19:55:32 ]
- VC++2008では、こういうマクロが機能します。
C++の標準としては、引数付きマクロに型引数を指定してもいいんでしょうか。 #define foreach_vector(T, v, i) \ for (std::vector<T>::iterator i = v.begin(); i != v.end(); ++i) std::vector<int> vec; ... foreach_vector(int, vec, i) { ... }
- 402 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:00:52 ]
- 型引数といってもプリプロセッサにとっては単なる文字列に過ぎんから
何を指定してもようござんす。
- 403 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 20:17:26 ]
- >>401
最終的なC++の文章として整合性の取れた置換がされれば、コンパイラさんは疑ったりしない。
- 404 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:12:13 ]
- >>396
コンストラクタを持つクラスなら確かにどっちでも同じだけど、そうでない組込型やPODだと違うの。 new intだと、int i;のiのように初期化されなけど、new int()は0初期化される。 まあ、たしかにstd::vectorはT()をコピーコンストラクトして0にするので、 これは使っていないはずだけど。
- 405 名前:デフォルトの名無しさん [2009/10/05(月) 22:27:53 ]
- mpg又はmp4、wmv, aviといった動画のファイルフォーマットを詳しく書いたHPありませんか?
1024バイトはヘッダーとか、ここからデータが入ってるとか、そういったことが知りたいです。 動画再生ソフトをC、C++でガリガリプログラムしてみたいと思ってます。よろしくお願いします。
- 406 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:32:19 ]
- >>404
へぇ
- 407 名前:デフォルトの名無しさん [2009/10/05(月) 22:35:01 ]
- コンテナの最終要素からの後置インクリメントの対処って、やっぱ最終要素の場合インクリメントしないしかないのかな?
- 408 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 22:37:48 ]
- 境界線系のエラーは結構凶悪だから、何もしないか、レンジエラーの例外投げるかするといいと思う。
- 409 名前:デフォルトの名無しさん mailto:sage [2009/10/05(月) 23:38:40 ]
- >>405
フォーマットがわかったくらいじゃ再生できなくて 結局規格書が必要になるから最初から規格書手に入れたほうがよい つーか何人もの熟練のプログラマが関わってても バグが出るのが動画の世界なのに そんなことも自分で解決できないレベルじゃ間違いなく挫折する いや、むしろ俺が挫折した 悪いことは言わないからDirectShowにでも頼ったほうが早い
- 410 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 00:03:01 ]
- >>405
高い山を目指すのも悪くはないけど山の高さを知るためにもまずは JPGあたりからはじめたらどうかな? 挫折すること請け合い
- 411 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 00:29:26 ]
- jpgですら難しいのに動画とか無理だろそもそもソフトウェアエンコードでまともな速度でるのか初心者はBMPから始めろ
- 412 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:36:50 ]
- そういえば
漫画とかイラストとか、基本は白黒で線とベタとトーン、それに活字で出来ている絵、 これって、一般的にはBMPからJPGに圧縮してるけど 線や字(フォントの種類)等を判別する方法をうまく考え出せば JPGとかに比べて、ずっと圧縮率を高くすることも出来ると思うんだ。 もう既に作られているのかもしれないけど。
- 413 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:45:16 ]
- 自動ベジェ曲線化とか? 難しそうだ。OCRは何とかなるか。
- 414 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:49:07 ]
- グレイスケールで十分じゃね?
- 415 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:52:58 ]
- イラストレータとかのベクターフォーマットがそんな感じじゃね?
でも、線の強弱やかすれ、ベタフラッシュやホワイト、トーン削りなんかを考えたら、 jpgとかで十分だと思うよ。
- 416 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 01:56:21 ]
- potraceでぐぐれ
- 417 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 02:07:11 ]
- 強弱・かすれ・トーン削りみたいなのをきれいに残したいなら
むしろ8bitグレースケールにしてPNGだろうな サイズは増えるだろうけど「無劣化」はでかい ちなみにJPEGにもグレースケール専用の色空間定義がある 読み書きできないソフトも多いだろうけど
- 418 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 06:47:55 ]
- 最小化された(子)ウィンドウのサイズをMoveWindowで変更し、
そのウィンドウを標準化すると、指定サイズに変わっている というのをやりたいのですが、サイズが変わってくれません。 いい方法がありましたら教えてください。
- 419 名前:デフォルトの名無しさん [2009/10/06(火) 15:21:59 ]
- >>418
SetWindowPlacement
- 420 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:23:35 ]
- www.geocities.jp/ky_webid/win32c/025.html
のページの LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wp, LPARAM lp); について質問ですが、これはLRESULTという型のCALLBACK WndProcという関数でしょうか? それともLRESULT CALLBACKという型のWndProcという関数でしょうか?それともまた別でしょうか? 前者のような気がするんですが、いじってみてもうまくコンパイルできません。 たぶん自分のレベルでは追いつかないような記述だと思うのですが、分からないままだと悲しいので答えだけ教えてください
- 421 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:26:26 ]
- LRESULT => 返り値
CALLBACK => 呼び出し規約 WndProc => 関数の名前
- 422 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 21:28:49 ]
- >>421
呼び出し規約というのは初耳です。調べてみます。 ありがとうございました〜
- 423 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 22:39:17 ]
- >>419
ありがとうございます。
- 424 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:18:53 ]
- 呼び出し規約って何者なの?
- 425 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:24:38 ]
- wikipediaのページの左上にある画像に「ワィ」ってあるけど、本当は「ウィキペディア」の「ウィ」のつもりの誤字なんだってね。
- 426 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:45:55 ]
- >>424
関数呼び出すための約束事。 アセンブリになったときのお約束で、他言語との協調とかそういうときに役に立つ。
- 427 名前:デフォルトの名無しさん [2009/10/06(火) 23:56:12 ]
- 質問です。
kern protection failureってどういうエラーなのでしょうか? たとえば char *str = "aiueo\0"; で初期化した文字列に対して *str = 'o'; を実行したときにこのエラーが出てしまいます。 使用OSはMAC OS Xでgccを用いてコンパイルしています。
- 428 名前:デフォルトの名無しさん mailto:sage [2009/10/06(火) 23:59:00 ]
- 多分、書き込み禁止領域に書き込んだから怒られてる。
それは配列として確保してないから改変不可だ。
- 429 名前:427 mailto:sage [2009/10/07(水) 00:13:26 ]
- >>428
説明ありがとうございました! 宣言だけ行って、mallocで領域を確保したらうまくいきました 追加で質問させていただきたいのですが、 宣言直後のポインタは基本的に書き込み禁止領域のアドレスを指しているのですか?
- 430 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:17:21 ]
- そりゃヌルポといってだな
どこさしてるかわからん超危険ポインタ 下手したらOSの挙動に割り込んでHDDをぶっ壊すかもしれない ってたまに聞くけど本当かどうかはしらない。使ってみてはどうでしょうか
- 431 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:24:22 ]
- int a[1];
a = malloc(x); これって別に問題はおこらなそうだけどやったらだめなの?
- 432 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:29:49 ]
- やってもいいけどコンパイラに怒られる
- 433 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:37:49 ]
- >>429
初期化されてない自動変数のポインタは、大体の処理系ではスタックのメモリに 残っていた値が入っていて、元がint型の値だったりしたとき、全く関係のない アドレスが入っていたりする。たまに書き込み可の領域を指してることもあることは あるが、大体は書き込んだらSegmentation faultで落ちる。
- 434 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:38:36 ]
- むかーし、俺も初心者だった頃、同じようなことをしようとして出来なくて悩んだな。
今にして思えば、単に配列とポインタを理解してなかっただけだが。
- 435 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 00:50:33 ]
- >>430
モダンなOSなら、ちゃんと例外を投げてくれるけどね。
- 436 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:19:28 ]
- ちなみにヌルポをfreeしたりdeleteしたりするのは合法
- 437 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:21:30 ]
- 切り替え機のPS2ポートにキーボードをつながないで
もう一台のlinuxPCのRS232Cのポートから変換コネクタを かませて切り替え機につなぐことは出来ますか? 切り替え機に大して送るキーボード信号をソフト的に エミュレーションしたいので可能かどうか悩んでます。 linuxスレで聞こうかと思いましたが、閑散としていたので こちらで聞きました。 アドバイスがあればよろしくお願いいたします。
- 438 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:24:44 ]
- ■実現したい事柄
TabControlで、タブの入れ替えをドラッグアンドドロップで行いたい。 ■備考 下記URLはC#でのソースです。 ttp://watcher.moe-nifty.com/memo/2009/02/ctabcontrol-b32.html 備考欄のURLの内容をC++で実現してあるソースはありませんか?
- 439 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:29:40 ]
- >>430
それヌルポじゃないよ ヌルポはヌルポであって、未定義とは全く違うよ
- 440 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:38:05 ]
- Cのポインタは未初期化でも何かしら指しているものな。
- 441 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:41:28 ]
- >>430
実アドレス上で動かないからOSには多分被害ないと思うが。。。
- 442 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 01:49:05 ]
- >>424
関数の呼び出し方をアセンブリ言語レベルで規定したもの。 引数はスタックに積むのかレジスタに格納するのか、スタックに積むなら順番はどうか、 レジスタを使うならどのレジスタにするのか、とか諸々のルールがある。 呼び出し規約の指定を間違えると、関数を正しく呼び出せず、クラッシュする。 アセンブリ言語で関数を書くのでなければ、中身は知らなくても名称さえ知っていれば大丈夫。
- 443 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 02:34:07 ]
- C++勉強中のものです。
数メガサイズのファイルを読み込み、そのデータをメモリ内にアプリケーションが 終了するまで持ち続けるようなプログラムを作成したいのですが、読み込んだデータを持つ方法で悩んでいます。 複数のクラスからアクセスするようなデータ場合、usingを使いグローバル変数に格納するのが一般的なのでしょうか? なんとなく、C++ではグローバル変数を使用するのがタブーになっているような思いがあるので質問させていただきました。
- 444 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 03:15:20 ]
- グローバルにするのは一般的じゃないので普通に持ち回ればいいと思う。
持ち回り方はC++だからといって何か特殊な方法でもないよ
- 445 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 03:28:48 ]
- >>443
そこでMediatorパターンですよ。
- 446 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:20:08 ]
- >>440 初心者スレで嘘つくなよ。
- 447 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:29:49 ]
- どこか分からないが、どこかを指しているというのを言ってるんじゃ
- 448 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:38:06 ]
- linuxのjfbterm上で動くコンソールアプリをC(gcc)で作ってるんだが
ncursesのboxのボーダーが文字化け(?)してる。 なんか技がある? スレ違いだったら誘導してくれ。
- 449 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:46:06 ]
- >>447
指していない可能性だってあるんだぜ。ぬるぽとか。
- 450 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:51:11 ]
- へぇ。じゃあ、0番地を指すポインタは作れないのか
- 451 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 04:52:39 ]
- >>448
どう化けてんだ? \が¥になるのはフォントのせいだけど。
- 452 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:00:01 ]
- >>451
多分、フォントのマッピングが違ってて、それで文字化けしてるんだろうけど box (subwin_1, ACS_VLINE, ACS_HLINE) でサブウィンドウを囲ってやろうと すると、縦の線が上付きの「3」になって、横の線はなにも表示されない。 なんかいいアイデアない?
- 453 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:08:12 ]
- ヌルポと同じビットパターンの番地を指すポインタは当然作れないよ(作らなくても
いいようになってるし) どんなビットパターンかは処理系依存で、0に等しいとは限らないけど、コンパイル タイムでポインタにキャストされた0はヌルポ扱いをすることになってる まぁこの辺はいまいち分かりにくい仕様だと思うし、C++0xではnullptr_t型のnullptr というものがとうとう導入されることになった訳だけど
- 454 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:11:28 ]
- www.kouno.jp/home/c_faq/c5.html
ぬるぽの知識が曖昧な奴はこれ嫁
- 455 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:30:55 ]
- >>452
localeを見直してみるとか?
- 456 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 05:33:43 ]
- つまり自動変数として生成したポインタの初期化を行わなかった場合に、
それがたまたまヌルポになる可能性があるから、未初期化でも 常にどこかを指すというのは間違いであると
- 457 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 06:24:43 ]
- Win32だと0x7fff以下がぬるぽってことになるんだな。
- 458 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 09:17:26 ]
- >>443
シングルトンでも使えばいいじゃない
- 459 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:39:06 ]
- Listなどに代表されるコレクション?について教えてください。
自分で書いたクラスをインスタンス化し、それをListとして格納して扱うにはどうすれば良いのでしょうか? まぬけな質問に見えますが、非常に困ってます。 C#で書いた場合、こんな感じになります。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9969.txt C++で書くにはどうすれば良いのでしょうか?
- 460 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:49:59 ]
- >>458
グローバル変数はダメなのに「シングルトン」ならダメじゃなくなるとでも思ってるのか?
- 461 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 10:50:41 ]
- >>459 std::list<...>
- 462 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:05:20 ]
- >>460
まったく別なんじゃないか?
- 463 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:22:52 ]
- >>460
なんでグローバル変数がだめだとシングルトンもだめになるって思ったの?
- 464 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 13:33:49 ]
- >>462-463
まだこんなこと言う人がいるんだな。初心者スレだからしょうがないか。 ja.wikipedia.org/wiki/%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0 > グローバル変数は、通常その非局在性によりはっきりと悪しき慣習と考えられている。 ここで挙げられているような非局所性とそれによる問題点はグローバル変数でも シングルトンでも同じこと。 また、それを許容するとしても、ふつうにグローバル変数やフリー関数が使える (クラスが不要な) C/C++ ではわざわざシングルトンパターンと呼ばれるような まわりくどい構造を持ち出す意味が無い。 www.google.co.jp/search?q=%22%E3%82%B7%E3%83%B3%E3%82%B0%E3%83%AB%E3%83%88%E3%83%B3%22+%22%E3%82%B0%E3%83%AD%E3%83%BC%E3%83%90%E3%83%AB%E5%A4%89%E6%95%B0%22
- 465 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:14:14 ]
- >>461
コレクションがどうこうより、クラスの扱い方のところで既に間違ってました。 スレよごしすみません。 vector<Item> vItem; //newが不要 //vItem.push_back(new Item(2 "pc")); vItem.push_back(Item(2, "pc")); vItem.push_back(Item(3, "box")); for(int i=0; i<vItem.size(); i++){ cout << "no:" << vItem[i].no << " name:" << vItem[i].name << endl; }
- 466 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 14:47:26 ]
- >>464
初期化順の制御とかしたくなることない?
- 467 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 15:52:01 ]
- シングルトンとかグローバル変数を使うと、周りを癒着しちゃってモジュール化するとき弊害になるんだよな。
グローバル変数とか使うなら、一個のクラスのメンバ変数にしてモジュールにしてしまうほうが再利用性を確保できる。
- 468 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:33:49 ]
- コマンドラインで引数を受け取ってローカルアプリのAPIをコールするexeを
作成したいんですがどこか参考になるサイトご教授願いませんか? オブジェクト指向は理解してますがwindowsのプログラムは超初心者です。
- 469 名前:デフォルトの名無しさん mailto:sage [2009/10/07(水) 16:43:18 ]
- Windowsのプログラムが超初心者なら、どのOSのプログラムなら初心者じゃないんでしょうか。
|

|