1 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 01:08:48 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.65【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1239326399/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
175 名前:174 mailto:sage [2009/06/04(木) 15:40:16 ] C:\だった、、、シフト押しっぱなしだった
176 名前:デフォルトの名無しさん [2009/06/04(木) 16:21:59 ] 作業フォルダの設定はどうするんですか? どう開いても変なディレクトリから入っちゃいます。。 cd ../../ を毎回やるのは億劫なので。。。
177 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:37:32 ] 右クリックでプロパティ出せばいいだろう。 cd \ でいいじゃない
178 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:40:04 ] そろそろスレ違いだな
179 名前:デフォルトの名無しさん [2009/06/05(金) 08:08:41 ] クラスをグローバルにしたいんだけど、 extern AClass a; でいいの?
180 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 08:22:59 ] バッチファイル書けば楽にならないか? cd ..\...\ bcc32 %1 とか。
181 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 09:58:57 ] ルートで作業するのは論外。
182 名前:デフォルトの名無しさん [2009/06/05(金) 11:16:18 ] ネットワークのプログラムを書いてると、「Windowsのファイヤーウォールがブロックしました」 みたいなメッセージが最初の動作時に一回だけ出るときがありますが、出ても最初の一回だけで その後は出ません。これってプロパティのどこかにアンブロックしたという記録が残っている のでしょうか?
183 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 17:56:01 ] 板違い
184 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 19:23:36 ] >>182 レジストリのどこかは知らないが、設定の閲覧・変更は コントロールパネルのWindowsファイアウォールのところを見ればいい。
185 名前:デフォルトの名無しさん [2009/06/05(金) 20:44:54 ] >>183-184 ありがとうございます。コントロールパネルに見つかりました。 あともう1つだけ。(板違いといわれそうなのですが…一応C++で書いているので) TCPで複数のコネクションを同時に保持するサーバーを書きたいのですが、サーバ側から みた通信先はどうやって区別すればよいですか?適当にIDとかを割り振ってそこをみるように すればいいんでしょうか? ××のソースをみろとかでもいいです。どうかお願いします。
186 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 20:48:43 ] >>185 ソケットなら接続してきたクライアントの情報を得られる。 ネットワークプログラミング相談室なんてスレがなかったかな?
187 名前:デフォルトの名無しさん [2009/06/05(金) 21:10:01 ] >>186 ありがとうございます。 ということは、accept()で得られたクライアント情報のIPアドレス+ポート番号 の組でクライアントを識別するということですか? >ネットワークプログラミング相談室なんてスレがなかったかな? 次からはそっちで聞いてみます。
188 名前:質問 [2009/06/05(金) 23:03:36 ] VC++2008です textBox1に自由に入力させ、「眼鏡」という文字列が入力された瞬間に メッセージボックスを表示するにはどうしたらいいでしょうか TextChangedイベントの中でif(textBox1->Text=="眼鏡")としたんですが、 前後に文章があるときもメッセージボックスを表示させたいです よろしくお願いします
189 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 23:57:40 ] strstr
190 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:25:52 ] VisualC++2008EEです 引数としてクラスのポインタを受け取り、そのポインタにnewでクラスのインスタンスを作る関数は作れますか? また、どのように作るのでしょうか? そうして作ったインスタンスを関数の外でdeleteしたいのです よろしくお願いします
191 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:33:14 ] >>190 void f(int*& rp) { rp = new int; } int main() { int *p; f(p); delete p; }
192 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:45:09 ] キモイ設計だな
193 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:51:18 ] メリット皆無だし
194 名前:デフォルトの名無しさん [2009/06/06(土) 03:34:30 ] 普通のメンバ変数を初期化するときって、 コンストラクタの後ろに付加、コンストラクタの中で代入、初期化用メンバ関数を用意してコンストラクタの中で呼び出し ……とかいろいろ考えられると思うけど、使い分けってある? あと、特に理由がない限り、コピーコンストラクタに初期化処理ってしなくても大丈夫よね?
195 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:48:26 ] なるべく初期化リストで全部済ませる 初期化で済む物を代入にするメリットは全くない
196 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:50:05 ] 使い分けというか、言語やプログラムの仕様から制約されるってかんじジャね? const なメンバ変数 => 初期化リストでしか初期化できない。 初期化のために手続きが必要 => 初期化リストでは無理 初期化のタイミングがコンストラクション時以外にもある => じゃ、別関数にしておくか
197 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:51:05 ] 意地でも例外を送出したくない場合。
198 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 04:17:00 ] const以外でも初期化リスト結構みんな使ってるのかー。 途中でリセットする場合以外でも、お婆ロードでコンストラクタが複数あるときは 別関数の方が楽そう……かな?
199 名前:デフォルトの名無しさん [2009/06/06(土) 04:53:35 ] Visual C++ eeのWin32APIでやってます。 ユニコードONの状態で wchar_t type[255] = _T("うんこ"); MessageBox(NULL, (PCTSTR)typeid(type).name(), NULL, MB_OK); とすると文字化けしてしまうのですが、なんでですか? 文字列リテラルにLをつけないといけないのと関係あります? うまく表示する方法ってどうやるのですか? まだ始めたばっかだしマルチバイトでやればいいのでしょうけど 気になるので、よかったら教えてください お願いします
200 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 06:47:24 ] >>198 Effective C++は読んだかい? まだなら定額給付金を片手に今すぐ本屋に行くんだ。
201 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 06:48:32 ] typeid(type).name()はLPCTSTRじゃないから MessageBoxA(NULL, typeid(type).name(), NULL, MB_OK)
202 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 06:57:13 ] >200 おや なぜか めのまえの ほんだなに おいてあるぞ!
203 名前:199 [2009/06/06(土) 15:31:21 ] >>201 MessageBoxAとMessageBoxWがあって #ifdef UNICODE #define MessageBox MessageBoxW #else #define MessageBox MessageBoxA #endif // !UNICODE こんなんなってるんですね だからMessageBoxAを強制的に呼び出してやると 氷解しました。ありがとうございます。
204 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 17:26:42 ] >>199 TCHAR type[255] = _T("ちんこ"); MessageBox(NULL, type, NULL, MB_OK);
205 名前:デフォルトの名無しさん [2009/06/07(日) 13:03:16 ] dummy
206 名前:デフォルトの名無しさん [2009/06/07(日) 14:01:55 ] int org_i = 1000; void *p = &org_i; int i = *reinterpret_cast<int*>(p); voidへのポインタからINTの値を取り出そうとして上のようにしたのですが、 reinterpret_castの前に*があったりしてなんとなくいやです。 ほかに方法はないでしょうか?
207 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:04:28 ] それが正しい方法だからそれでいい
208 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:05:17 ] voidのポインタをやめる
209 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:50:41 ] こんなテンプレートを用意して template <class T> T pointer_value(const void* p) { return *static_cast<const T*>(p); } こうする int i = pointer_value<int>(p);
210 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:56:13 ] テンプレートは分からないので禁止
211 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 17:15:04 ] >>210 お前が勉強しろ
212 名前:デフォルトの名無しさん [2009/06/07(日) 18:35:31 ] テンプレートはわからないので禁止
213 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:46:18 ] ポインタはわからないので禁止
214 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:56:05 ] C++はわからないので禁止
215 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:20:16 ] クラスAがクラスBに所持されてる関係になってるとして インスタンスAがB1に参照されてる状態から B2がインスタンスAを参照したらB1からAの参照が切れる 常にAが1個のBから参照されるような関係を作るにはどうしたら良いでしょうか?
216 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:37:11 ] 所有を譲渡するメソッドをBに作る
217 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:04:47 ] 逆にAがBを参照するように変更できないか検討する
218 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:29:49 ] >>216 B同士で所有の移動をするメソッドを、ということでしょうか? >>217 BがAに更新通知してAがBの値を読みに行くので Aへの更新通知を別の方法で実現できればそれでもいいのですが・・
219 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:37:33 ] Aを触れないし値も引き出せない状態になったB1・B2の挙動をどうするつもりかに因るな
220 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:38:58 ] AからBにコールバックでも登録させればいいんでない。
221 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:41:57 ] AがB1に参照されたり、B2に参照されたりってのを決めるのはだれだ?
222 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 01:43:02 ] > BがAに更新通知してAがBの値を読みに行くので Aに"今からお前の相手するBインスタンスはわしじゃ"通知メソッドを作れば? その際に元彼Bに"もう私のことは放っておいて"通知メソッドをAから呼んでもらう
223 名前:デフォルトの名無しさん [2009/06/08(月) 11:43:40 ] C++では、戻り値だけが違う関数は同じものとされますが、 戻り値だけが違う関数を複数作りたい場合どうするべきでしょうか? class C1; class C2; というのがあって、 C1 create(); C2 create(); という感じにやりたいときです。 お願いします。
224 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:11:13 ] >>223 無理です。だいたい呼び出せません。 名前空間を使いましょう。
225 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:17:56 ] ファイルの開け方、閉じ方はわかったのですが読み取って処理するところがよくわかりません ,で区切られて1行に並んでるファイル内の行列から数値を配列に入れる方法を教えてください!
226 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:23:49 ] やりかたはいろいろありすぎて、、、 とりあえず手始めに、fgets()とsscanf()使ってみるのはどうか? まあ配列に入れるならループで回してstrtokとatoi使う手もあるけど、 最後はstrtok+atoiみたいな関数を自分で作るのがいいかもね。
227 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:24:30 ] 今回初めてマルチスレッドな処理を行う必要があるのですが 注意点、スレッドセーフな処理にするための方法などを詳しく扱った書籍やサイトはないでしょうか?
228 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:25:39 ] >>226 ありがとうございます ,の除き方を詳しく教えてください
229 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:26:37 ] >>228 csvデータの読み込みでぐぐった方がいいかも
230 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:27:37 ] >>228 sscanf()もstrtok()も , の処理はやってくれるだろ。 自前でやるならstrchr()で場所調べて切り出していけばいいと思うよ。
231 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:32:12 ] そうなんですが 全然知りませんでした ありがとうございました
232 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:05:22 ] >>223 dmyC{}; class C1{C1 operator=(dmyC&){*this=createC1();return *this;}}; class C2{C2 operator=(dmyC&){*this=createC2();return *this;}}; dmyC create(){return dmyC();} C1 C1create(){〜return c1;} C2 C2create(){〜return c2;} なんのメリットがあるか知らんが使用側で偽多態受けなら出来ん事はない 前参照やスコープは適当に修正要
233 名前:デフォルトの名無しさん [2009/06/08(月) 14:14:40 ] C99より前の規格では、nanやinfを検出することってできないのでしょうか?
234 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:19:51 ] 修正 dmyC で弄った方が潰しが利くね dmyC{operator C1(){〜return c1;}operator C2(){〜return c2;}};
235 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:50:49 ] floatで数字をいろいろ処理して,でつないでcharに直してfputsで書き出したいんですけど方法を教えてください!
236 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 15:39:06 ] fscantfとかsscanfとかそういうことか わかったぽ
237 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:01:54 ] .netはC++では扱えないんですか
238 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:06:26 ] はい
239 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:10:15 ] C#でしかやれないということですか? GUIアプリを楽につくりたいならC#ですかね?
240 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:14 ] その通り!
241 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:18:42 ] テンプレートの話は禁止だって言ってんだろ
242 名前:デフォルトの名無しさん [2009/06/09(火) 01:07:44 ] int array[x][y]; があるとき、 array[10] == &array[10][0] でしょうか?
243 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:14:00 ] よく考えたら分かると思うが頭痛が悪くなるようなコードは書くな
244 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:14:19 ] 配列は分からないので禁止
245 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:17:52 ] >>242 気になるならポインタがさしてるアドレスを比べてみなよ
246 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:20:47 ] >>245 型は配列なので注意が必要、多分等しいだとは思うんだが。(両方とも配列) 配列はポインタに自動変換だが、逆はそうではない、やっぱ頭痛い。
247 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:23:22 ] ああ違う、右はポインタ、左は配列、そして左が自動変換だ うぜぇぇ
248 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:24:56 ] int a[10]; は、int10個の配列aで分かりやすいのに。 int a[10][20]; は、int10この配列が20個、ではないところがややこしい。
249 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:26:48 ] >>248 Cの規則ですから int func()[10] { return 配列; } おらよ、これでも喰らえってなもんだ
250 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:26:53 ] ポインタ本を読むと出てくる(K&Rでもかかれてる)けど 配列や関数の型は、外側からはがしていく感じで解釈するんだよね。
251 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:49:26 ] >>249 関数は配列を返せない
252 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:53:52 ] >>251 ANSIでは使えない事になっているが、返せる処理系もっあってだな、 アホな開発者がそれを返している糞ライブラリがあるんだ どこのかって?S○Eとか○CEとかSC○とか、まあそんなところ、死ねます。
253 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:56:17 ] >>251 ポインターは返せるからできなくはないんじゃね? ただサイズの問題とかあるけど
254 名前:デフォルトの名無しさん [2009/06/09(火) 02:27:31 ] CのコードをC++に書き直してます。 Cのコードの中に大量の構造体を使ってるところがあって、malloc()でメモリを 取らずに、自分でメモリプールを管理する割り当て関数を使ってます。これを生かすため placement_new()というのを使おうと思っているのですが、この場合delete()が使えない (使う必要がない)と聞いたのですが、placement_new()の使い心地はどうでしょうか? 使いやすいですか?
255 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 03:16:28 ] 構造体に配列突っ込めば、ポインタじゃなくても直接返せるよ! よ!
256 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 03:24:55 ] >>254 使う必要がない、ではなく使えないだな。 www.fides.dti.ne.jp/~oka-t/cpplab-placement-new-2.html placement newの文字通り引数を取る形式new(hoge) Tにたいして、delete(hoge) pという構文がないという話。 メモリ確保処理を自前でやるとしたら、 クラス・構造体にnew/deleteなどを定義するか、 アロケータクラスを作って、確保解放はvectorとかに任せる という形態のほうが多いと思う。ほかの人はどう考えているか分からないけど。
257 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:13:45 ] placement newを使いにくいとは思わないけど、むやみに使うものでもない。 >>256 の言うように、クラス・構造体にnew/deleteを定義するとか アロケータとコンテナを組み合わせるのがいいと思う。
258 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:16:07 ] c++で複数のクラスからの継承ってできますか? たとえば 数値Aと class NoA{ //ここに関数A } class NoB{ //ここに関数B } ここでNoAもNoBも引き継いだclass NoC (NoC.関数AとNoC.関数Bの両方ができ) みたいなことってできるの?
259 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:18:52 ] >>258 www.geocities.jp/ky_webid/cpp/language/033.html
260 名前:デフォルトの名無しさん [2009/06/09(火) 09:41:04 ] C++に動的にクラスを生成する方法がないって本当ですか? 文字列としてクラス名があったとして、それでオブジェクトを作ることができないって読んだんですけど。 自由度高そうなのに。 ごにょごにょしてやる方法あります?
261 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:46:39 ] >>260 Smalltalkみたいな使い物にならないインタープリタと一緒にすんな
262 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:50:30 ] >>260 こういう話か? std::map<std::string, boost::shared_ptr>
263 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:56:44 ] インタプリタ村の村民らしい要望だな だな
264 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:05:56 ] クラスの動的生成ではないがC++にリフレクション機能は あってもよかったと思う
265 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:18:47 ] オーバーヘッドが好きな奴が多いな。
266 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:36:38 ] >>260 やろうと思えばなんだってできるよ、コンパイラ呼び出しDLLにコンパイル、出来上がったDLL動的にリンク、そして呼び出す。 面倒くさくてやらないけど。
267 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:40:41 ] .NETを見ていると、標準ライブラリにコンパイラコレクションが入っていると便利なのだがと思う事はあるな・・・ ターゲットの環境にコンパイラをインストールなんて余りやりたくないからね
268 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:40:29 ] fscanfの引数の場合分けがうまくいかないんだけどどうして? 引数がfloatとcharで20こあって"%d%f・・・・・",hairetu,&suuji・・・・とあるんだけど返り値=1にした時しかうまくいかない switchにしてcase20はおkだけどcase 2とかdefaultにはcaseが正しくありませんってなる
269 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:44:10 ] >>268 C言語でおk
270 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:47:18 ] swichの方はswith{}←のカッコを忘れてただけでした
271 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:51:27 ] fscanfの感じがわからん fscanfした時点で一行バッファに入ってそこから指定した型の順で前から取っていく感じでしょ? 3つ目で型が合わないことがわかったらどうなるの?
272 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:42:01 ] >>271 行は関係ないよ 合う型を探して改行関係なしにファイルの最後まで行ったら終わり 3個目が見つからなかったら戻り値で2を返すだけ
273 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:59:17 ] サンクス 行関係無いのか どっかのページ1行読み込むって書いてあったのに
274 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 13:25:48 ] scanfのほうの使用を思い出すんだ
275 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:29:48 ] caseってcase(1||2||3||4):って使えますか? なんか使ってないのに違う行のcaseの所でcaseの値"1"は既に使用されていますって出るんだけど