- 1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:18:18 ]
- プログラミング言語C/C++についての、小心者向けスレです。質問・要望・雑談などどうぞ。
関連スレやURLは>>2以降。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・ぐぐる ・マニュアルで探す ・FAQを読む 例えば www.bohyoh.com/CandCPP/FAQ/index.html 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(なるべくそのままで) ・実行環境(OS名、コンパイラ名) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって小心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。 宗教的な話題は禁止します。
- 411 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 09:10:31 ]
- なんかひどいものを見た。
- 412 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 23:10:33 ]
- ・環境変数の設定がおかしくてヘッダファイルが見つからない
・ヘッダファイル名をタイプミスした のどっちかじゃないかなあ? pc12.2ch.net/test/read.cgi/tech/1244942050/957 pc12.2ch.net/test/read.cgi/tech/1245059383/785
- 413 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 17:15:35 ]
- 新規作成→プロジェクト→Win32→Win32プロジェクト
で作成したVC++のアプリが Net3.5を入れないと「構成が正しくない…」のエラーで 起動出来なかったのですが ネイティブなWin32アプリのはずなのに 別途ランタイムが必要だったのはなぜでしょうか? 構成やコードを何度も見直しましたが Win32 APIしか使用してません
- 414 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 18:45:59 ]
- Microsoft製品にはよくある現象。
Visual Studio 2008なんてC++しか使わない人でも C#をインストールしなければならないという罠を実装。
- 415 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 20:06:29 ]
- いままでそんな事態に遭遇したことないわ
- 416 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 23:59:19 ]
- .NET3.5を入れるときにたまたまCランタイムのDLLもインストールされただけだろう。
/MTでやっとくと解決するかもね
- 417 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 13:28:48 ]
- リリースビルドにした?
- 418 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:02:59 ]
- >>416
/MTでやったらエラーは出ず Net3.5を入れなくても動作しました >>417 もちろんリリースビルドのexeです VS2008で作ったのをXP SP2で確認したのだけど 特別なAPIを使った訳でもないし ネイティブなWin32アプリが動かなかった原因は未だ分からず
- 419 名前:417 mailto:sage [2009/08/18(火) 00:27:15 ]
- >>418
状況から察するに別マシンで動かしてるんだよね もちろんリリースビルド、というのだから、もちろんランタイムDLLも別マシンにインストールしている?
- 420 名前:デフォルトの名無しさん [2009/08/18(火) 04:20:34 ]
- WIN APIのみのネイティブなアプリなら
クライアント側は他にランタイムは不要じゃないの? 自分は開発したことないから詳しくは知らないけど
- 421 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 09:58:07 ]
- ここでいうランタイムはC標準関数のランタイム
/MTはスタティックリンク /MDはダイナミックリンク(DLL)
- 422 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:12:37 ]
- >>416の1行目が正解のはず。
その場合、.NET Frameworkを入れずともVisual C++ランタイムだけをインストールすればいい。 現在、最新のはこれ。 VC++ 2005 www.microsoft.com/downloads/details.aspx?FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2&DisplayLang=ja VC++ 2008 www.microsoft.com/downloads/details.aspx?FamilyID=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c&DisplayLang=ja
- 423 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 02:31:50 ]
- >>422
みんな正解を言っている。 そんで、Win32APIだけしか使っていないのにmsvcrtを入れなければならない理由は何? というとこまで進んでたんじゃないの?
- 424 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 02:34:32 ]
- もちろん、>>417も、
ランタイムをインストールしたが動かない →Debugビルド版のdllは頒布されていない という穴にはまりやすいという点で有意義
- 425 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 14:26:00 ]
- つまりWin32 APIのみのソフトでも
ランタイムから何らかの機能を使っていて 単独では動作不可ということか そのランタイムは何かと一緒にインストされる事多いし 普段は目に見えない部分だから勉強になるなぁ
- 426 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 17:34:19 ]
- >>425
本当にWin32 APIだけで組めばCランタイムはいらないよ。 printf()もmalloc()もスタートアップルーチンも使えないけどな。
- 427 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 17:39:44 ]
- マングリングの兼ね合いで同一バージョンでビルドされたDLLが必要になったりしないもんなの?
- 428 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 17:51:20 ]
- 全てを同一バージョンでビルドするのが前提でも、extern "C"するのが普通だと思う。
- 429 名前:デフォルトの名無しさん [2009/08/20(木) 21:24:16 ]
- すいません、質問させてください。
AfxBeginThreadを使ってマルチスレッド処理をおこなっているのですが、 制御関数の中でreturnして終わらせているはずなのに、 AfxBeginThreadの戻り値のCWinThread*が生きたままになっています。 そこで制御関数の中でおこなっているreturn処理に問題があるのではないかと 考えているのですが、 rerturn 0 と return -1 ではスレッド終了の動作に何か違いがあるのでしょうか?
- 430 名前:429 [2009/08/20(木) 22:22:31 ]
- 何度もすいません。質問を変えます。
CWinThread* th; th = AfxBeginThread(func,this); uint aaa::func(LPVOID lpvThis) { 〜略〜 if(){ return 0; } else{ return -1; } } 1.AfxBeginThread内でreturnした時点でスレッド自体は終了しているが、『th』は生成されている。 (th->m_hThreadはnullだがthはnullではない)という認識でよろしいでしょうか? 2.returnされた値が0か-1で動作上違いはあるのでしょうか? 3.returnされた値が0か-1でthの中身は違うのでしょうか?
- 431 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 23:27:28 ]
- m_bAutoDeleteがFALSEの場合はスレッド作成側で破棄しないとダメだよ。
自動で破棄されるようにするには、サスペンド状態で開始し、m_bAutoDeleteをTRUEにし、リジュームする。
- 432 名前:429 [2009/08/21(金) 10:36:16 ]
- 429です。
あれからいろいろ調べました。 430の問について >>2.returnされた値が0か-1で動作上違いはあるのでしょうか? ない。GetExitCodeThreadを使って戻り値を判別しようと思えばできる。 >>3.returnされた値が0か-1でthの中身は違うのでしょうか? 違わない。AfxBeginThreadが実行された時点でthは生成される。 制御関数内でreturnされた値によって生成される、されないが決まるものではない (厳密に言うとreturnされた時点でth->m_hThreadの値が変わるので、違うといえば違うのだが、、、) というところまでです。 まだ分からないのが1なのですが、 一度生成された『th』が自動的にnullになることはあるのでしょうか? 431さんの言うとおり、サスペンド状態で開始し、m_bAutoDeleteをTRUEにし、リジュームすれば 『th』は自動的にnullになるのでしょうか? 逆にサスペンド状態で開始せず、リジュームしない状態ならばth』が自動的にnullになることはありえないのでしょうか? 431さん、ありがとうございます。 m_bAutoDeleteなのですが、あれって初期値はtrueですよね。 m_bAutoDeleteがtrueの場合はサスペンド状態で開始、リジューム等の処理をおこなわなくても自動的に破棄されるのでしょうか?
- 433 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:48:43 ]
- class CTest
{ private: int a; public: setValue(int val); // valをaに格納 }; CTest test; test.setValue(10); sprintf(buff,"%d",test); こうやると10がbuffに出力されるんですが これはよくないやり方ですよね (稀に不正な結果になりました) test+=10; if (test>=10) ... ++test; int val=(int)test; こういうのはoperatorを使えばaを対象にさせることができますが sprintf(buff,"%d",test); やはりこういうふうにtest単体だけを置いても 実際にはtest.aが返るようにするのは無理でしょうか? 何らかのoperatorが暗黙で呼ばれないかと思ったのですが どれを使っても駄目でした
- 434 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:59:53 ]
- >>433
一応C++ではiostreamを使うべしということになっている
- 435 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:49:04 ]
- >>433
intへの変換を定義して sprintf(buff,"%d",(int)test); ってやるのは?
- 436 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 17:45:22 ]
- >>434
iostreamって<<とかするやつですよね? これってあらゆるケースで機能するんでしょうか? 出力以外でも普通の変数のように振舞いたいんです //void func(int); func(test); // test.aが渡ってほしい >>435 もちろんoperator intなどもやってます でもこの書き方はintという型でほしいからであって 普段は型を意識しないようにしたいんです
- 437 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 17:58:19 ]
- >>436
> //void func(int); > func(test); // test.aが渡ってほしい intへの変換が定義されていれば、そのように振る舞う > 普段は型を意識しないようにしたいんです プログラマが型を意識せず、引数の型を意識しないprintf系関数を用い、誰が型を判断するのか。 ビャーネはそれが嫌いでiostreamを使うようにすべきと主張しているのではないか
- 438 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 19:34:19 ]
- >>437
>> func(test); // test.aが渡ってほしい >intへの変換が定義されていれば、そのように振る舞う おっとすいませんこれは問題なかったですね 型がわからないsprintfなどが問題でした >ビャーネはそれが嫌いでiostreamを使うようにすべきと主張しているのではないか うーんなるほど ちょっとiostreamを考えてみます
- 439 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 00:12:28 ]
- 関数の引数でどの型でも指定出来るようにしたいのですが
ポインターを使ってアドレス渡しをする方法以外に 何かないでしょうか? printfの変数指定する引数のような感じです
- 440 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 01:15:44 ]
- >>439
printf: 可変個引数(1番目の引数、書式文字列で引数の型を判別) iostream: 想定される型に対して全部多重定義しておく ほか、場合によってはテンプレートやBoost.Anyという手も使える。
- 441 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:24:37 ]
- 何をしようとしてるかに依るだろうね。比較的一般的な型が扱える関数
なら template が一番自然に思う。swap みたいに。ただ、swap は 定義されてるし、アドレス与えてるけど。
- 442 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 05:41:24 ]
- 質問があります。
C++でオブジェクトを作るとき 1)MyObj = a; 2)MyObj = new MyObj(); 上の違いって、1はスタック上にオブジェクトを作っている 2はヒープ上にオブジェクトを作っている というような解釈でいいのでしょうか? ということはJavaやC#は、基本的にプリミティブタイプ以外 オブジェクトはすべてヒープ上に作られているということですか?
- 443 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 07:44:10 ]
- >>442
1)と2)の例がおかしいし、C++がそうだとしてそれをJavaやC#にも当ては めるのは論理的ではない。
- 444 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 12:17:33 ]
- >>443
すみません 1)MyObj a; でした・・・ 理論的ではないのでしょうか? C++でもヒープ上で使われなくなったオブジェクトをガービッジと呼ぶと聞いたので根本的な部分は一緒なのかな、と思いまして・・・
- 445 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 12:37:23 ]
- >>444
・>443は「論理的ではない」と指摘している。「理論的」かどうかは言及していない。 ・例がおかしいのは結局直っていない。 ・「ヒープ上で使われなくなったオブジェクト」は「ガービッジ」とは呼ばれない。 ・JavaやC#の実装がC++と同じである保証はない。
- 446 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 13:00:25 ]
- garbageのカタカナ表記ってJISとかで決められてるの?
- 447 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 13:03:02 ]
- ガベージ ガーベジ ガーベージ ガーベッジ ガービッジ
この辺はどれでもまあ通じるからいいかなって思うわ ガベッジはイマイチ。
- 448 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 14:49:20 ]
- >>445
いやgarbageって呼ばれるから。出直してこい
- 449 名前:429 [2009/08/25(火) 15:55:43 ]
- 皆さん、失礼します
AfxBeginThreadにて生成されたスレッドのm_bAutoDeleteの値がtrueであるにもかかわらす 破棄されないことがあるのはなぜでしょうか?
- 450 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 16:02:08 ]
- >>442,444
で、文意を汲みとってあげると 1) MyObj a; 2) MyObj* a = new MyObj; だとして、C++でさえ1がスタックで2がヒープとは限らない。 まあ普通に使われるWindowsやUNIXの処理系なら、前者はグローバル変数 やstatic変数じゃない自動変数ならスタックに確保されて、後者は operator newで変なことしてなければヒープに置かれると思う。 C#やJavaでどうなるかは、処理系のソースを見たことないので何とも言 えない。処理系がじゅうぶん賢ければ、newしてたってスタック上にオブ ジェクトを置くことは技術的に可能だと思う。
- 451 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 16:52:40 ]
- newするオブジェクトの実態をスタックに置く最適化は「エスケープ解析」という名称で有名。Javaはやっている。
逆に、MyObj a;をヒープに置くのは、C++/CLI(VC++で.NET Frameworkを対象にコンパイルしたとき)で行われることがある。 まあ、そんな例外的な事象もある。
- 452 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 16:58:20 ]
- >>449
AfxEndThreadは呼んでるのかな
- 453 名前:429 [2009/08/25(火) 17:27:49 ]
- 呼んでませんね。制御関数はreturnで終了させています。
制御関数を終わらせるにはreturnとAfxEndThreadの2つの方法が存在するが、 どちらでもOKだという認識です。 これが既に間違っているのでしょうか? 現在は431さんの方法 >m_bAutoDeleteがFALSEの場合はスレッド作成側で破棄しないとダメだよ。 >自動で破棄されるようにするには、サスペンド状態で開始し、m_bAutoDeleteをTRUEにし、リジュームする。 で試しています。
- 454 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 17:47:03 ]
- >>453
正常終了じゃないのにreturnで終わってるとか。
- 455 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:05:37 ]
- クラスについての質問なんですがあるサンプルプログラムで、
class Test01 { protected: int hoge01, hoge02; public: Test01(); ~Test01(); } // コンストラクタ Test01::Test01() : hoge01(10), hoge02(20) {} の様な部分があるんですがこの Test01::Test01() の後に続く : hoge01(10), hoge02(20) という記述の仕方は一体なんなんですか? その後のプログラムの動作からメンバ変数に値を代入しているというのは分かるのですが、どうもはっきりしてなくもやもやします。 なのでこの書式の具体的な動作と名称を教えて下さい。
- 456 名前:429 [2009/08/25(火) 18:15:16 ]
- >正常終了じゃないのにreturnで終わってるとか。
正常終了じゃないときはreturnで終わらせてはいけないのでしょうか? あと正常終了かどうかはどうやって判断すればいいのでしょうか? 自分の作った独自のロジックの中での正常かエラーかなんて AfxBeginThreadの戻り値には関係ないと思うのですが、、、 それとも制御関数の中でエラーが発生してスレッドが落ちてしまった時に AfxBeginThreadの戻り値はnullに戻らずそのままになってしまうということなのでしょうか? ついでにそのときに画面には何もエラーが出てこないものなのでしょうか?
- 457 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:20:49 ]
- >>456
俺もよく知らないで書いてんだけどね。 これ見ると正常終了以外はreturn使ってはいけないように見えるよね。 msdn.microsoft.com/ja-jp/library/2s21xzfe(VS.80).aspx スレッドで使用しているリソースはすべて解放し終わってから抜けてる?
- 458 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:26:11 ]
- >>455
メンバ変数を初期化する初期化子 初期化と代入の違いはメンバ変数がクラス型になるとわかる
- 459 名前:429 [2009/08/25(火) 18:28:09 ]
- >>457
本当ですね。 スレッドの正常終了は 「 AfxEndThread 関数を使うことも、return ステートメントを使うこともできます。」 と書かれているのに対し、 スレッドの中断は 「終了するスレッドから AfxEndThread を呼び出すだけです。」 と書かれていて、returnには一切触れていませんね。 何でもかんでもreturnで返しているのが原因かなぁ、、、
- 460 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:35:44 ]
- >>458
ありがとうございます
- 461 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:58:49 ]
- >>455
メンバ変数のコンストラクタ呼び出し 作成時にパラメータを必ず受け取る必要のあるクラスオブジェクトや基本クラスがあるときなんかに必要になる ちなみに変数名(初期化データ)はローカル変数宣言時でも使える, 代入演算処理が不要になるおまけつき void hoge(){ int a(0); // aを0で初期化 };
- 462 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:08:50 ]
- >>461
ご丁寧にどうもありがとうございます、参考になりますm(_ _)m
- 463 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:58:05 ]
- >>459
少なくともreturnで終了させる場合はデストラクタも呼ばれ正常終了する。 異常終了とはデストラクタが呼ばれないことを覚悟して強制終了させることだと思う。 msdn.microsoft.com/ja-jp/library/2s21xzfe(VS.80).aspx はAfxEndThreadで終了させる場合にデストラクタが呼ばれるとはどこにも書いてない。 MFCのAfXEndThreadは知らないが、Win32のEndThreadはデストラクタは呼ばれない。 ランタイムの_endthreadExも同様だけど、returnで終了した場合はデストラクタが呼ばれてから_endthreadEx が呼ばれるので問題ない。
- 464 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:59:27 ]
- >>463訂正
Win32のEndThread X Win32のTerminateThread O
- 465 名前:429 [2009/08/25(火) 20:53:01 ]
- >>463
そうなんですか、詳しい説明、ありがとうございます。。。 原因わけとして、returnで返すことは何も悪くないと。 デストラクタが呼ばれないと、スレッドが生きたままになってしまうことがあるということか、、、 長い間ありがとうございました。
- 466 名前:デフォルトの名無しさん [2009/08/25(火) 20:58:02 ]
- char* pool = new char[100];
Hoge* ptr = reinterpret_cast<Hoge*>(pool); というコードがあったとして、 delete ptr; よりも delete [] pool; が呼び出された場合、 ptrは解放されずにメモリリークを起こすことになるんでしょうか?
- 467 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:03:05 ]
- というか、Hoge を new したわけではないのだから、Hoge を delete すべきではない
delete は new した char[100] に対してのみ行うべき
- 468 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:20:33 ]
- ポインタをキャストしてるだけだから参照してるアドレスは同じってことだ
- 469 名前:デフォルトの名無しさん [2009/08/25(火) 21:21:05 ]
- >>467
なるほど。 newはnew、キャストはキャストってことですね。 ありがとうございます。
- 470 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 02:42:25 ]
- >>468
だからといって ptr を用いてdeleteできるとは思わんがね
- 471 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 10:06:16 ]
- デストラクタだけの問題だ
- 472 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 19:08:10 ]
- BYTE a[10],b[5];
としてaとbの配列を結合したい場合 新しい配列へ最初にa、次にbと ループでコピーする以外に良い方法はありませんか? 強引に普通のcharとしてstrcatすると 当然ながら上手く結合されなくて
- 473 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 19:13:32 ]
- memcpy()
- 474 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 20:20:22 ]
- >>473
助かりました
- 475 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 03:00:17 ]
- ファイルの後ろから指定サイズ分の領域を削除したいのだけど
先頭から削除領域までをコピーしたファイルを新たに作り その後前のファイルを消すやりかたではなくて 直接その領域を無効化するにはどうすれば良いですか?
- 476 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 03:15:13 ]
- >>475
対象 OS のファイル操作 API を調べると良いよ。
- 477 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 08:25:48 ]
- CreateFileで開いたら
SetFilePointerで削除したいところまで移動させて SetEndOfFileで切り捨てられる
- 478 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 15:14:49 ]
- >>476-477
感謝します
- 479 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 01:59:29 ]
- 0x1234L
のように末尾に付く Lの意味や読み方ってなんでしょう?
- 480 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 02:02:15 ]
- その数値がlong型であることを表す
読み方は「エル」でいいんじゃね?
- 481 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 02:03:45 ]
- >>479
整数リテラルの型を long にする指定。 読み方って、どういうこと?「える」とか、そういうの?
- 482 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 02:04:29 ]
- うは、ごめん。
- 483 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 02:13:27 ]
- サフィックスという言葉を知りたかったんじゃないのかと
- 484 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 03:45:26 ]
- なるほど、詳しい解説ありがとうございました
- 485 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 19:54:04 ]
- リストボックスでデータが追加されると
自動で最終行へスクロールするようにしたいのですが LB_GETCOUNTで項目数取得 → LB_SETCURSELでその行へ移動 とやっても上手く行きません どうやればいいでしょうか?
- 486 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 20:02:23 ]
- >>472
最初から連結したバイト列を保存する配列を用意しておいて、 前半をAとして使って後半をBとして使うのではダメなのか? >>485 そのあんたの使っているリストボックスとやらが含まれているライブラリのマニュアルを読んでください。 私には、それがどんなものかは想像するくらいしかありませんから。
- 487 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 20:29:28 ]
- >>485
LB_SETCURSELのインデックスは0からのはずなのでLB_GETCOUNTの行は範囲外ではないか?
- 488 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:42:00 ]
- ReadFileでファイルからデータを読み込み
ComboBoxへリストとして追加したいのですが 改行ごとの読み込み処理は皆さんどうやっていますか? 現在C++へ移行中で.NetではReadLineで簡単に出来たのですが なかなか良い方法が見つからず数日ほど悩んでいます
- 489 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 02:02:46 ]
- その流れだといろんな事が簡単にはできなくなるから覚悟しておいた方がいいと思うよー
- 490 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 09:47:42 ]
- >488
改行単位で読むだけなら getline じゃないの?
- 491 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:05:18 ]
- ウィンドウサイズで
大きさを制限する方法なら沢山出てくるのに 矢印自体を無効化する方のが見つからない 案外スタイル指定だけで出来たりするのかな
- 492 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:10:16 ]
- WindowsならWS_POPUPにしてWS_THICKFRAMEを外せばおk
- 493 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 16:42:30 ]
- >案外スタイル指定だけで出来たりするのかな
その通り
- 494 名前:デフォルトの名無しさん [2009/09/26(土) 03:42:47 ]
- for (int i=0;i<N;i++)
{ //処理A //処理B } より for (int i=0;i<N;i++) { //処理A } for (int i=0;i<N;i++) { //処理B } と書いた方が速くなるときがあるのですが、何故だかがわかりません。 考えられる理由を教えてください
- 495 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:52:15 ]
- 大雑把過ぎてよくわからんけど、ぱっと思いつくのは
1.キャッシュに乗った 2.loop unrollが効いた
- 496 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:04:41 ]
- 一番考えられるのは、測定ミスだな
釣りじゃないなら、Nの値と処理A,Bの内容を示せよ あと時間測定の方法も
- 497 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:09:04 ]
- Windowsなら SetPriorityClass()、QueryPerformanceFrequency()、
QueryPerformanceCounter() を使って自動的に測定させればよい SetPriorityClassを使うのはバックグラウンドでいらないプロセスが動いて 測定値にバラツキが出るのを防ぐため 測定後に元に戻しておかないと大変な事になる(再起動)
- 498 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 02:44:19 ]
- >>494
どっちかのループでSSEが効いたんじゃない?
- 499 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:00:21 ]
- C++でコードを書いていて引数にとったクラスにメソッドを適用する
関数を書きました。そのメソッドはクラスのprivate変数を変更するメソッドです。 デバッグプリントを追加して、メソッドが呼ばれている事や、 メソッドによってprivate変数が変更されている事を確認したのですが。 その関数を実行した次の行でそのprivate変数を確認するともとに戻ってしまっています。 適切に変更したいのですが、よろしくお願いします。 OS:MacOSX 10.6 Compiler: g++ 4.2.1 よろしくお願いします。
- 500 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:05:43 ]
- >>499
引数の型はなにかね?
- 501 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:19:33 ]
- メソッドの引数ですか?
独自で作ったHogeクラスのインスタンスです。 void FooBar (Hoge x) { x.SetX(10); } みたいな感じで使っています。 Hoge baz; FooBar(baz); //ここでbazのprivate変数Xは10にかわったはず!! baz.GetX() //なぜかここの返り値がもとのXのまま といった感じです。
- 502 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:23:54 ]
- そりゃbazの変数が変わったように見えてるだけで、実際変わったのはxの変数だ。
bazとxのアドレス確認してごらん。
- 503 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:26:00 ]
- なるほど、関数はHogeインスタンスのポインタを引数にとるようにし、
bazのポインタを引数に渡せばいいという事でしょうか?
- 504 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:29:53 ]
- ポインタでもいいし、C++だと参照ってのもあるから好きなほうを使えばおk。
- 505 名前:デフォルトの名無しさん [2009/10/23(金) 09:01:30 ]
- 負の値も含めて四捨五入する方法を教えてください
- 506 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:22:17 ]
- std::vector<int> vA;
std::vector<int> vB; // vAに値をpush_back vB.reserv(vA.size()); std::copy(vA.begin(), vA.end(), vB.begin()); としたときに vB.size() でサイズを取得するには何か細工が必要ですか?
- 507 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:23:42 ]
- >>505
tech.ckme.co.jp/cpp/cpp_round.shtml
- 508 名前:506 mailto:sage [2009/10/23(金) 10:42:22 ]
- すみません解決しました
- 509 名前:デフォルトの名無しさん [2009/10/28(水) 05:31:06 ]
- Windowsで実行ファイルのディレクトリを取得する方法を教えてください
- 510 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:06:03 ]
- WinAPIスレにでもどうぞ。
それにしても、「実行ファイルのディレクトリ」とは「実行ファイルのあるディレクトリ」なのか 「実行ファイルを起動したときのディレクトリ」なのかはっきりしないもんだな。
- 511 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:00:44 ]
- 後者は普通カレントディレクトリと呼ぶだろ
|

|