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でのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
152 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:14:11 ] >>147-148 馬鹿はわざわざ書き込まなくてもいいのですよ。 >>151 取り敢えず、printf("%d\n", atoi(& s[1]))とでもして味噌。
153 名前:146 mailto:sage [2009/06/03(水) 20:45:12 ] >>152 ありがとうございました!できました。 エラーの意味が少し分かった気がしました(これから勉強します)。 >>147-148 即レス感謝しております。色々とキッカケになりました。 ありがとうございました。
154 名前:デフォルトの名無しさん [2009/06/03(水) 23:02:04 ] marupeke296.com/GameMain.html
155 名前:デフォルトの名無しさん [2009/06/04(木) 01:41:16 ] www.setsunan.ac.jp/~center/kyositu/freec/dl2008.html このページを参考にコンパイラをインストールしました。 このページの最後にある、使い方を見るってやつのことで質問なのですが、 僕のbcc32は奥の方にあって(C:\Borland\...)、最終的にbcc32があるところにたどりつくのですが、 ここでしかコンパイラできないじゃないですか? それが面倒なのでどうにか簡単にできないかってことと、 bcc32があるディレクトリの中には他にもいろんなプログラムがあるんですが、作成したCファイルも 同じところに保存しないとコンパイル&実行できないですよね? つまりこのディレクトリの中がいろんな形式のファイルがあってめちゃくちゃ汚くなっちゃうわけです。。 これってなんとかキレイにまとめる方法ってあるでしょうか? もしあるなら、申し訳ありませんが教えてください(>_<)
156 名前:155 [2009/06/04(木) 01:46:27 ] すみません補足です。。 一部コンパイラ→コンパイルですね ↑のは自分で見なおしてみるとちょっと日本語がアレなので簡潔に質問しますと、 1.cdの回数を最小限にする方法(bcc32を含むディレクトリをC:の直下に持ってきていいのでしょうか?) 2.CファイルはCファイルだけでどこかにまとめて、そのうえでコンパイル&実行はできるのか ということです。 よろしくお願いします。。
157 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 02:27:13 ] 使い方を見るじゃなくて、先に >インストール(WindowsVista)に進む >インストール(WindowsXP,2000)に進む >インストール(Windows98,95)に進む のどれかを見ろ。 環境変数を設定する解説がある。 それを設定すれば、どこからでもbcc32が呼び出せるようになる。 あとは好きなところにディレクトリを作って、その中でコンパイルすればいい。
158 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 02:29:08 ] そこの説明どおりにやればどこでもコンパイルできるはずだけど?
159 名前:156 [2009/06/04(木) 11:46:59 ] >>157 ,158 ありがとうございます。 OSはVistaで、ここに書いてある通り環境変数も設定したつもりなのですが できないんです。。 ;c:\borland\bcc55\bin ですよね? これだとここで指定したディレクトリじゃないとできないってことでしょうか? ローカルディスク(C)の中ならどこでもコンパイルできるようにするには、設定を c:\ にすればいいということでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 11:52:18 ] >>159 コマンドラインで、path と打って出てくる文字列に c:\borland\bcc55\bin はあるか? ちなみにシステム変数の設定をしたあとで開いたコマンドプロンプトじゃないと 有効じゃないぞ
161 名前:デフォルトの名無しさん [2009/06/04(木) 12:06:53 ] >>160 コマンドプロンプトでpathを打つとちゃんと出てきます。 それで、確認用ファイルを c:\Emacs\C\test.c という風に作ったディレクトリに保存して、Cディレクトリ内で c:\Emacs\C\>bcc32 test.c というようにコマンドしても操作可能なプログラムとして… というメッセージが返ってきます。。。
162 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 12:28:01 ] bcc32 test.c これを、 c:\borland\bcc55\bin\bcc32 test.c と打つとどうなるよ。
163 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 12:29:09 ] あと環境変数の最後に書いてある? 最初と最後以外は ; で区切ってないと前後とくっつくぞ
164 名前:デフォルトの名無しさん [2009/06/04(木) 13:16:59 ] WindowsでWinSockのプログラムを書くとき、C++ではなくCを使うのでしょうか? どうしてもC++で書きたかったら、 struct sockaddr_in とかそういうのは、上手く自作のクラスにまとめてしまえばいいのでしょうか?
165 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 13:25:45 ] 別にC++でもstruct sockaddr_in とかそういうのは書けるだろ
166 名前:デフォルトの名無しさん [2009/06/04(木) 13:38:12 ] でもネットワーク関係の例題プログラムを見てると、参照は使わないし、クラスもなし、マクロ使いまくり、 とかそういう感じのプログラムばかりだったので、みんなそんな感じなのかなと。
167 名前:デフォルトの名無しさん [2009/06/04(木) 14:03:34 ] >>162 そうコマンドすればコンパイルできます。 ただし、"コマンド'ilink32.exe'を実行できない"とエラーが出ます。 やはりbinディレクトリの中でやりくりするしかないのでしょうか? >>163 そこは大丈夫です。ちゃんと; ;で挟んであります。
168 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 14:07:11 ] >>167 リンカがパス通ってないからな。 それでコンパイルできるなら、PATHがおかしいんだよ。 どこかタイプミスがあるはず。その部分コピペして貼り付けてみ。 コマンドプロンプトのコピーのしかたはわかるよな?
169 名前:デフォルトの名無しさん [2009/06/04(木) 14:30:41 ] >>168 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\usr\local\bin;D:\MinGW\bin;c\borland\bcc55\bin;C:\Program Files\QuickTime\QTSystem\ これがパスの設定です。これのことですか? コマンドプロンプトのコピーの仕方はわかりませんが(笑)、 ちょっと打ってからTabで出してるのでタイプミスはないと思います。。
170 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 14:33:55 ] >>169 >c\borland\bcc55\bin コロンが抜けてる c:\borland\bcc55\bin で
171 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 14:37:58 ] このすれ優しい人が多いね。 感動した!
172 名前:169 [2009/06/04(木) 15:36:42 ] >>170 おぉ!!できました! 親切にありがとうございます!! 171じゃないですが、本当に優しい人が多くて助かりました! あと、ついでと言ってはなんですがコマンドプロンプトについて質問です。 コマンドプロンプトを開いたときの最初の位置が C:\Users\kei になってます。(keiは僕の名前です) 開いたとき一番最初は C:\ になってると一番都合がいいのですが、そのように設定できますか? プロパティとかいろんなトコからやろうとしても見当たらないので…。
173 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:39:15 ] \usr\local\bin 何に使うんだろう
174 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:39:16 ] ショートカット作っとけばいいべ。 プログラムはcmdで、作業フォルダはC:|
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"は既に使用されていますって出るんだけど
276 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:34:30 ] 1〜4 までの整数を1箇所で引っ掛ける時は case 1: case 2: case 3: case 4: /* 本体 */ break; こう書く case (1||2||3||4): は 定数式 1 || 2 || 3 || 4 →結果は真で 1 として整数化されるから 結局 case 1: と書いてるのと同じ意味になってしまう
277 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:44:09 ] ありがとうございました! あんまり載って無いですね、初心者ならやってしまいがちだとおもうのですが
278 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:51:46 ] 習得順的には if { } 〜 else if { } 〜 else { } の羅列のほうが先にじゃねーかな? break しない case を持つ switch 文って個人的にはあまり好きじゃない。 見直したときに 「あれ? break 忘れてるんじゃね?」 って勘違いしちゃう可能性があるもの
279 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:57:11 ] むしろcase で || 使うというのをはじめてみた
280 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:21:52 ] 他言語から来た人とか?
281 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:24:57 ] 普通の初心者でつ
282 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:28:39 ] >>280 勉強中でROMしてます >>276 の >case (1||2||3||4): は >定数式 1 || 2 || 3 || 4 →結果は真で 1 として整数化されるから >結局 case 1: と書いてるのと同じ意味になってしまう として処理されるならそもそも書く必要すらないですしこういう記述を知ってる必要もない気が・・・ つまり >case 1: >case 2: >case 3: >case 4: > /* 本体 */ > break; こっちを知ってればいいかと。 それかジャンプテーブルとかで処理しちゃうか
283 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:02:48 ] >>282 知るべきことは "case の後ろは定数式" であること だ。 ・定数式のうち 論理演算式だけは 演算結果が所詮 0/1 にしかならないのでおいしくない ・四則演算な定数式や ビット毎の論理演算定数式 記述が簡単になったり可読性が上がるかもしれない 四則演算の例: #define TOP (100) case TOP+1: ビット毎の論理演算の例 #define A (1<<0) #define B (1<<1) case A|B:
284 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:40:14 ] string が色変わらないんだけどなんで?ちゃんとインクルードしてるのに
285 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:49:42 ] >>284 メモ帳で書いてろ
286 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:56:58 ] 他の関数でもポップアップが出なくなった なんでだろう
287 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:09:35 ] >>286 {}とかが上手くいってないと出ないよ
288 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:41:44 ] >>287 ありがとうございました
289 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:53:26 ] caseに式を使えたらいいのにぁ else ifの梯子なんてダサすぎる…
290 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:55:40 ] 制限は多いけど、その条件を満たす場合はパフォーマンスを発揮できると考えるべき。
291 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:21:01 ] switch case のコンパイルコードに期待を持つなんてオールドタイプのバッドノウハウ
292 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:37:30 ] >>289 条件演算子を使えば似たような書き方で好きな式を条件に出来る。 C++だけだったかも知れんが。
293 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:24:46 ] else if するくらいなら (x==0||x==1||x==2||x==3)&&(func0(),true) ||x==4&&(func4(),true) ||x==5&&(func5(),true) ||(func_default(),false);
294 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:26:09 ] あ、カッコ不足だった
295 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:49:34 ] AクラスのaにBクラスからアクセスしたいのですが、うまくいきません。 どうしたらいいでしょうか。。 #include <stdio.h> class A { public: A(int); private: int a; private: class B { public: B() { printf("constructer B\n"); } void some_func(void){ printf("a: %d\n", a); } }; }; A::A(int x) { a = x; B* b = new B(); b->some_func(); } int main(void) { A a(10); return 0; }
296 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:08:01 ] >291 でもブレイクスルーとdefaultの機能って、状況さえ許せば凄く便利じゃね?
297 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:30:32 ] >>295 class A{ public: A(int); private: int a; class B { public: B(A&a) : a(a) { printf("constructer B¥n"); } void some_func(void){ printf("a: %d¥n", a.a); } private: A&a; }; friend class B; }; A::A(int x){ a = x; B* b = new B(*this); b->some_func(); }
298 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:32:38 ] >>295 friend
299 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:35:43 ] >>296 Duff's Deviceくらいしか使い道なくね?
300 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:17:05 ] >>296 ブレイクスルーちゃう fall through
301 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:18:14 ] ブレイクするんちゃう?
302 名前:デフォルトの名無しさん [2009/06/10(水) 01:23:48 ] std::coutとかstd::endl;って スレッドセーフですか?
303 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:29:06 ] コンパイラごとに違うので、コンパイラの仕様書を読んでください。 っていうか、C++の規約にはスレッドセーフに関する記述はないんじゃなかったっけ?
304 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:28:30 ] ライブラリによるしな
305 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:04:54 ] >300 失礼、別のと混ざった
306 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:23:36 ] class A{ public: void A( void ); virtual void ~A( void ); }; と書きたい今日この頃 なぜこの書き方でエラーがでるのかがわからない
307 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:28:13 ] 気持ちは分かるけどさ。 「もともと戻り値は存在しないもの」と、「戻り値は使わないことを宣言する」の違いじゃない?
308 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:28:38 ] void
309 名前:デフォルトの名無しさん [2009/06/10(水) 14:47:46 ] sprintf関数について質問です。 strcatとかstrcpyを使うよりも、便利だと教えられたのですが、いまいちどこが便利なのかわかりません。 教えてください。
310 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:53:53 ] 具体的にstrcatとかstrcpyを使ったコード書いてみて それをsprintfに置き換えてみりゃわかるだろ。 もちろん、strcatとかstrcpy一発で済むような例はstrcatとかstrcpy使えばいいのはわかるよな。
311 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:54:06 ] HOGE_01、HOGE_02 …… みたいな文字列を生成するときは、sprintfじゃないとやってらんないと思う
312 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:29:14 ] sprintfなんてキケンな物使っちゃいけません
313 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:33:01 ] sprintf_sがあるから無問題
314 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:03:03 ] >>312 #pragma warning (disable : 4996)
315 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:06:52 ] ltoaで小数点以下の数値を文字にするにはどうするの?
316 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:06:59 ] sprintf_sにしろsnprintfにしろ標準じゃないし、こいつらはこいつらで危なかったりするし(ヌル終端しないとか) いずれにせよsprintf一族はロクなもんじゃないから書き捨てコード以外には使うべきでない
317 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:08:06 ] >>316 安全な使い方をすればいいだろ
318 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:11:26 ] sprintf系を使って本当に安全なコードを書こうとすると#ifdef地獄だぞ 挙動バラバラだし、本当にクソみたいなsnprintfとかがいるから ヌル終端しないくらいならカワイイもんで、例えば 一昔前のLinuxはnをガン無視してsprintfにブン投げるようになってることがある 本当に死ねばいいと思う
319 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:13:28 ] C/C++にしろJavaにしろ安全は保障されないし、こいつらはこいつらで危なかったりするし(すぐに暴走するし) いずれにせよプログラミング言語一族はロクなもんじゃないから書き捨てコード以外には使うべきでない
320 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:20:16 ] snprintfはC99標準……。 ま、糞実装なsnprintfの存在以前にC99自体アレだが。
321 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:44:16 ] C99の仕様以前に、C99の対応率が。。。
322 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:50:11 ] C99の方が便利なのに、どうしてC99に移行しないんだろうね? 異なるプラットフォーム間で利用されるソフトを開発しているならともかく そうでない、小さなプロジェクト(おそらく世のプロジェクトの大部分)は C89よりC99で開発したほうが(わずかだろうけど)コスト削減になりそうなものだが。
323 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:52:42 ] 世の中Cじゃ無くてC++方向に走ったからね。いまさら感があるよ
324 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:59:07 ] 便利な物だけつまみ食いしとけばいいんだよ __func__とか__VA_ARGS__とか_Pragmaとか<stdint.h>とか restrictやら可変長配列やらはいりません
325 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:53:03 ] 僕は複合リテラルだけ居てくれればそれでいい。
326 名前:デフォルトの名無しさん [2009/06/11(木) 01:48:37 ] C++でクラスの配列を作ったのですが、配列の要素数をどうやって求めればいいでしょうか。 class hoge { public: int a,b,c,d,e; void func1(); void func2(); }; hoge h[]={ {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, }; このとき sizeof(h)/sizeof(hoge) とやっても正しく出てくれません。
327 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:53:50 ] template<X>unsigned is(hoge[X]&){return X;} kazu=is(h);
328 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:00:41 ] class Hoge { int a } というクラスがあったとき Hogeのインスタンス同士の比較をメンバ変数aの大小で行う場合 演算子をオーバーロードしたほうが良いのか int GetA()という関数を比較するのが良いでしょうか? またHogeインスタンスとintを比較することも考えてますがこういう場合はどうでしょうか?
329 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:02:44 ] >>326 いやそれであっている。 うまくいかないならほかに原因がある。
330 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:37:59 ] >>328 Hoge同士の比較方法がそれ以外にあり得ないなら演算子オーバーロードでいいんじゃね?
331 名前:デフォルトの名無しさん [2009/06/11(木) 02:50:23 ] >>329 すいません。 クラス配列を作るとき、 hoge h[]={ hoge{1,2,3,4,5}, hoge{1,2,3,4,5}, hoge{1,2,3,4,5}, hoge{1,2,3,4,5}, }; と書くようにしたら先のやり方で配列の要素数が取れました。 環境はVS2008なのですが、最初の書き方ではだめだったでしょうか?
332 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 03:10:02 ] コンパイラ何使ってる? あと、どんな結果が出たのかも書いて欲しいかなかな。
333 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 03:35:46 ] hoge{1,2,3,4,5} ←なにこれ?
334 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:03:30 ] 新しいコンストラクタの呼び方
335 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:35:48 ] デタラメ書くなカス
336 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 15:17:42 ] >>331 自分もVS2008だけど、これはエラーなくコンパイルできて4と出力される。むしろ>>331 がコンパイルエラーになる。 #include <iostream> class hoge { public: int a,b,c,d,e; void func1(); void func2(); }; hoge h[]={ {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, }; int main() { std::cout << sizeof(h)/sizeof(hoge) << std::endl; }
337 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 19:58:37 ] gcc4.3以上なら通るな initializer_listだろ
338 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:57:57 ] C99の機能をC++に持ち込むなクズ
339 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:22:27 ] C++0xではC99の一部機能が採用されるよ。 委員会の人たちにクズと言わないと意味ない。
340 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:37:51 ] restrictとか_Complexとか可変長配列みたいな 本当にしょうもない物は入らないから大丈夫だと思うけどね
341 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:53:38 ] >>339 ここはC++0xのスレじゃないよ
342 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:20:40 ] >>340 特に、restrictはC++89のときに否決された過去があるから、 今回も入れられるわけないw
343 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:22:51 ] restrictは入れると一つだけ利点があるんだよなあ FORTRAN並みに配列演算が高速化できる可能性がある 科学技術計算にはFORTRANを、と言わなくて済むようになるんだがな それ以外には取り立てて利点はない
344 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 06:13:12 ] >>341 ここがC++0xのスレかどうかなんて、>>338-339 の流れには関係ないよ。
345 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:08:43 ] >>344 スレ違いだクズ
346 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:24:45 ] いいえ。
347 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:52:32 ] いいえ。
348 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:56:38 ] iccでもオプション指定さえすればrestrictが使えるんだよね。 メモリのアクセスパターンががらっと変わる可能性があるから入れて欲しいけどねぇ。