1 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:56:37 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/ スレを勃てるまでもないC/C++の質問はここで 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ スレを勃てるまでもないC/C++の質問はここで 11 pc12.2ch.net/test/read.cgi/tech/1245059383/ スレを勃てるまでもないC/C++の質問はここで 12 pc12.2ch.net/test/read.cgi/tech/1248010352/
2 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 13:24:23 ] 最近の小学校では台形の面積をもとめる公式も教えてないんだね 台形の面積を求めるプログラム oshiete1.goo.ne.jp/qa5522539.html
3 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 13:42:23 ] 2点A(x1,y1)とB(x2,y2)があります 点ABを結んだ直線をCとします 点Aから直線C上を点B方向に距離xだけ進んだ点(x3,y3)を 求める式をC++プログラムで教えてください
4 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 14:18:38 ] いいえ
5 名前:3 [2009/12/15(火) 15:52:44 ] 自己解決
6 名前:デフォルトの名無しさん [2009/12/15(火) 17:53:51 ] g++&Windowsです。 #include <iomanip> でも #include <IOMANIP> でも #include <IoMaNiP> でも問題無くインクルードできるようですが、 これは標準C++の仕様ですか?
7 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 18:00:17 ] >>6 Windows の仕様です。 Linux に移植するときに泣けます。
8 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 18:26:14 ] >>7 なるほど。 つまりファイルシステム自体が大文字小文字を区別しない 仕様になっているから、ということですね。 ありがとうございました。
9 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 20:50:38 ] VC++2005で仕事場ではコンパイルおkなのに 自宅ではエラーが出ます。 エラーは、 fatal error C1083: include ファイルを開けません。'Src/foo.h': No such file or directory と出ます。 同じプロジェクトを使ってるのになぜエラーが出るんでしょうか? ソース部は #include "Src/foo.h" となっています。 フォルダ構成は Project ¥Src です。 Srcフォルダ内にfoo.hが確かに入ってます。 プロジェクトはフォルダごとコピーなので プロジェクト設定に差はありません。
10 名前:デフォルトの名無しさん [2009/12/15(火) 21:27:48 ] fmtflags っていうクラスはなんですか?
11 名前:デフォルトの名無しさん [2009/12/16(水) 08:42:57 ] 屑スレが 消しとけ
12 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 21:51:57 ] >>9 インクルードパスがフルパスになってないか? その為ドライブが違うかディレクトリー構成が違っていないか?
13 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 22:40:58 ] std::bad_allocを利用して例外処理をしているのですがちゃんと動作するか確認をしたいのですがどうすれば良いのでしょうか? 意図的にメモリリークなんて起こせるんですか?
14 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:11:00 ] 無限ループでリークさせまくるとか
15 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 23:13:07 ] >>14 素早い回答ありがとうございます!早速試してみますね(・∀・)
16 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 01:38:05 ] new char[(size_t)-1]のように明らかに確保できないほど大量のメモリを確保しようとするというのもいける。
17 名前:デフォルトの名無しさん [2009/12/17(木) 07:26:01 ] まて メモリーリーク の用語の認識がおかしくないか?
18 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 17:31:31 ] 確かにメモリリークする必要はないよな。
19 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 17:37:32 ] operator newをオーバーロードして、たまにbad_alloc投げるようにするとか
20 名前:デフォルトの名無しさん [2009/12/17(木) 20:20:42 ] メモリリークとは 【memory leak】 - 意味/解説/説明/定義 : IT用語辞典 e-words.jp/w/E383A1E383A2E383AAE383AAE383BCE382AF.html Yahoo!辞書 - メモリー‐リーク【memory leak】 dic.yahoo.co.jp/dsearch?enc=UTF-8&p=%E3%83%A1%E3%83%A2%E3%83%AA%E3%83%BC%E3%83%AA%E3%83%BC%E3%82%AF&dtype=0&dname=0na&stype=0&pagenum=1&index=21171420429500
21 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 20:23:21 ] for(unsigned int i=1;i<100;++i) { static unsigned long long sull=10; sull*=sull; new char[sull]; } これでどうだ
22 名前:デフォルトの名無しさん [2009/12/17(木) 20:24:22 ] あ
23 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 21:55:16 ] >>21 ハンガリアンはダサい
24 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 22:25:53 ] >>23 名前を考えるのもめんどくさかったんだよ!
25 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 22:42:03 ] ハンガリアン無かったらWinアプリ作ときに困る
26 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 23:30:19 ] >>21 だっせーーーーーーー!
27 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 23:37:57 ] >>26 ? その調子だと生きるのもおつらいでしょう。
28 名前:デフォルトの名無しさん [2009/12/18(金) 13:27:57 ] singleton class の destractor で cout 使うのってだめなの? borland developer studio 2006 だと実行時エラーになるんだけど borland c++ builder 5 だと OK #include <iostream> class Sgtn { Sgtn() {} public: static Sgtn& Inst(); ~Sgtn() { std::cout << "Sgtn::~Sgtn" << std::endl; } }; Sgtn& Sgtn::Inst() { static Sgtn inst; return inst; } int main() { Sgtn::Inst(); return 0; }
29 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 13:31:31 ] coutが先にデストラクトされてしまうとか? グローバル変数のデストラクト順ってどうなってたっけ・・・
30 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 13:32:48 ] 神の味噌汁
31 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 13:36:17 ] なぜかワロタw
32 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 13:41:51 ] シングルトンよりカウンタ使って例外飛ばす方がクール
33 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 14:53:46 ] クールミントガム
34 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 03:35:03 ] C++にあってCに無い物の代表格として「参照渡し」が挙げられるわけだけど 書籍によるとC++の参照渡しは、特に呼び出し側が値渡ししてるのか参照渡し してるのか見分けにくいことから参照渡しを多用することは慎むよう助言されている。 となるとC++ではいったいどういう風に”ポインタの値渡し”と”参照渡し”を使い分けるべきなんだろう? まあやろうと思えば”参照渡し”は片っ端から”ポインタの値渡し”に置き換えることはできるわけだけど 果たしてそれで正しいと思う?
35 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 04:14:43 ] const参照渡し以外はポインタの値渡しで
36 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 04:45:11 ] >>35 > const参照渡し これはなぜ参照渡しする必要があるの?
37 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 10:14:33 ] プロジェクトによる
38 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 12:49:00 ] >>34 >まあやろうと思えば”参照渡し”は片っ端から”ポインタの値渡し”に置き換えることはできるわけだけど >果たしてそれで正しいと思う? その書籍にはどういうときに参照渡しを使うのか書いてないの? ポインタ渡し、参照渡しそれぞれのメリット、デメリットを調べてみるといいよ。
39 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 13:14:40 ] >>38 > その書籍にはどういうときに参照渡しを使うのか書いてないの? > ポインタ渡し、参照渡しそれぞれのメリット、デメリットを調べてみるといいよ。 うん、参照渡しの多用は自重すべきとは書いてあるけど どういうときに参照渡しを使うべきかは詳しくは書かれてはいない(・ω・)
40 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 13:20:43 ] エディタが教えてくれるから別に混乱なんかしないだろ
41 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 13:21:04 ] >>39 > うん、参照渡しの多用は自重すべきとは書いてあるけど まさかconst参照渡しまで自重しろと書いてあるの? それなら・・・ よし! その本をまず窓から投げ捨てるんだ!
42 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:32:29 ] >>41 言われてみればconst参照渡しはシレっと紹介されていた気がする。 なんか重要なの?>const参照渡し
43 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:36:52 ] >>42 const参照渡しは革命的に便利。 便利というか効率という点でもその他の意味でも必須。 残念ながら語りきれる気がしない。 >const参照渡しはシレっと紹介されていた気がする。 その本は本当にC++の本なのか!? 本気で捨てろと言いたくなった本はそれが初めてだ。
44 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:56:25 ] その”const参照渡し”ってのは単に”ポインタ値渡し”に置き換えることはできないの?
45 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:58:19 ] >>42 この程度のことはググればすぐに分かるから自分で調べろ。
46 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 15:19:48 ] >>44 考え方が根本的に間違ってるよ。 ポインタ渡しは危険でバグの巣窟として有名。 この危険なコードを書かないように導入されたのが参照渡し。 ちなみにオブジェクトを最も安全に引数に渡せるのが「const付き参照渡し」なのでかなり重要です。
47 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 14:03:59 ] namespace { class kuzu { public: void muooon(void); }; } void kuzu::muooon(void) { } ↑これって定義の方にnamespaceつけなくてもそのファイル限定になる?
48 名前:デフォルトの名無しさん [2009/12/23(水) 07:37:49 ] ・・・
49 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 10:41:59 ] なる
50 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 12:52:02 ] >>42 オブジェクトを渡すときはほとんどconst参照渡し。速いし安全。 渡したオブジェクトを変更したいときだけ非const参照渡しだね。 const参照渡しを主にして、非const参照渡しを控えるのならまだわかるけど。const参照渡しの説明が少ないのは理解しがたいな。 >>44 参照はポインターに比べて安全に使用できる。 void func2(const int& d) { } void func() { int a; { int& b=a; //OK int& c; //エラー func2(a); //ok } } 参照は以上の例のように、初期化が必須なので参照先があることが文法上保障され、実体と区別なく安全に使える。 さらにスコープによって寿命が実体a>参照b>参照dになることが文法上保障されるから安全に使用できる。これは参照渡しでも同様。 だけど、この文法上の保障もポインタと併用すると安全性をぶち壊す危険な抜け道コードがいくらでも書ける。 これが文法上で危険性を排除できる参照と、自由だけど自己責任なポインタの大きな違いだと思うよ。
51 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 13:31:51 ] int& i = *(int*)NULL; // おk
52 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 15:29:05 ] >>50 それでも俺はint型といったオブジェクトではない変数はC++であっても参照ではなく ポインタで渡すべきだと思う。ポインタが危険とはいえプログラムの可読性はあきらかに ポインタ>参照 だ。 一方クラスといったオブジェクトはconst参照渡しを強く推奨する。 オブジェクトを渡すときはconst参照で渡すものという暗黙の了解が広く普及しているだろうし。
53 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 18:28:49 ] ポインタが*iじゃなくてiでアクセスできる文法ならそれでよかった
54 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 19:17:47 ] 結局のところ可読性と安全性・最適化のどっちを犠牲にするかだな 関数名とか文脈でだいたいわかるから俺は参照使うけど
55 名前:デフォルトの名無しさん mailto:sage [2009/12/23(水) 20:33:05 ] >>54 > 関数名とか文脈でだいたいわかるから それが我流プログラミングの始まりですわな(´・ω・`)
56 名前:43 mailto:sage [2009/12/23(水) 23:38:25 ] >>43 移行まじめに読んでないけど横槍レスしていいすか? > ポインタが危険とはいえプログラムの可読性はあきらかに > ポインタ>参照 明らかと言っていいかどうか分からんが、 思う思わないはまあ宗教論争だしなぁ。 ・・・あとテンプレートが大好きな俺としては参照じゃないと気持ち悪くて仕方ない。
57 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 01:26:52 ] >>52 intは値渡しだね。
58 名前:デフォルトの名無しさん [2009/12/24(木) 06:16:24 ] intをアドレス渡し(ポインタ渡し)や参照渡しするやつは何を考えてのことだろうか…? コピー渡し(値渡し)の一択だろ
59 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 10:12:49 ] >>58 無知が迷い込んで来たがな(´・ω・`)
60 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 14:51:09 ] WindowsAPIが混じっているのですがご了承ください。 以下、strの宣言が悪いといってコンパイルエラーになります。 LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_PAINT: HDC hdc; PAINTSTRUCT paint; char *str = "猫でもわかるプログラミング"; hdc = BeginPaint(hWnd, &paint); TextOut(hdc, 10, 10, (LPCSTR)str, strlen(str)); EndPaint(hWnd, &paint); break; 以下のように、{を追加するとエラーが出なくなります。どうして{が必要なのでしょうか? LRESULT CALLBACK WndProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam) { switch (msg) { case WM_PAINT: { ←★追加 HDC hdc; PAINTSTRUCT paint; char *str = "猫でもわかるプログラミング"; hdc = BeginPaint(hWnd, &paint); TextOut(hdc, 10, 10, (LPCSTR)str, strlen(str)); EndPaint(hWnd, &paint); break; } ←★追加
61 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 14:55:48 ] cはスコープの頭じゃないと変数を作れないのさ!
62 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 15:38:43 ] >>61 > cはスコープの頭じゃないと変数を作れないのさ! あ〜、初心者がよくやる間違いだよなw なんであんなへんてこな仕様にしたんだろう>変数の宣言場所は先頭部分のみ
63 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 15:40:54 ] switch (x) { case A: int z; //... case B: // いつのまにかzがあるぞ } C++でも case B に突入すること考えて文句が出るはず
64 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 15:46:14 ] >>60 コンパイラは何を使ってるの? 言語はC?C++? エラー内容は? VC++2008EEで試してみたけどコンパイルエラーは出なかったよ。
65 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 15:55:30 ] ウィンドウプロシージャなんだから省略した部分にcaseがずらずら書いてあると見るべきだろう。 >>60 C2360をググれ
66 名前:デフォルトの名無しさん [2009/12/24(木) 16:50:07 ] C++ってライブラリ豊富なの?特に文字列かんれん
67 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 16:54:32 ] 最悪だ
68 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 17:31:48 ] boostまで使えば
69 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 17:51:07 ] ど素人です。 oracleと接続してデータ取りたいのですが、 以下のソースで実行したところ途中までしかデータがとれません。 ※300000件中、16000件ちょいでデータがきれてしまう 何が原因かわかりますでしょうか? 切り貼りしたソースが足りなかったらすみません。 EXEC SQL OPEN CUR1; EXEC SQL WHENEVER NOT FOUND DO break; for (;;) { EXEC SQL FETCH CUR1 INTO :item_data; rows = sqlca.sqlerrd[2]; } rows = sqlca.sqlerrd[2]; for (i=0;i<rows;i++) { printf("%d\n", item_data[i].item_seqno, ); } EXEC SQL CLOSE CUR1;
70 名前:69 [2009/12/24(木) 17:53:50 ] 環境書くの忘れてました。 SunOS 5.6 Oracle 8.1.6 CCコンパイラ です。
71 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 18:21:37 ] あー Oracle スレ落ちてんのか。それにしても C/C++ の話じゃねぇな。 >EXEC SQL FETCH CUR1 INTO :item_data; 構造体の配列らしいが、なんで上書きしてんの?
72 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 20:20:47 ] template<typename T> struct Base { typedef T type; }; /* ○VC9/×GCC */ template<typename T> struct Derived : public Base<T> { typedef type type; }; /* ○VC9/○GCC */ template<typename T> struct Derived2 : public Base<T> { typedef typename Base<T>::type type; }; 前者の記法は非標準なのでしょうか?
73 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 20:46:01 ] >>57 > intは値渡しだね。 intを参照渡し、ポインタ渡しする人っている? そういうときはreturnで返すのが常套じゃね? 複数のint型変数を返すときはint型配列のポインタ渡しか参照渡しするか、 そうでなければ構造体の参照渡しかポイント渡しにするのがセオリーじゃないの?
74 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 20:57:08 ] >>66 豊富とは決して言えない 特に標準ライブラリは発狂物ww でもboostを筆頭とする各種無償ライブラリとか 商用ライブラリとかまで含めれば豊富と言っていいとは思う。
75 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 00:23:38 ] CやってからC++のstring比べれば天国だろ。
76 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 01:48:11 ] >>66 初めからなんでも用意してある環境が欲しいなら、C/C++はおすすめできない。
77 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:08:41 ] C++0xだと任意長テンプレートが組み込まれてるらしいですが、今はまだですよね make_tupleのように任意長のテンプレートはどうやって作ってるんでしょうか?
78 名前:デフォルトの名無しさん mailto:sage [2009/12/25(金) 12:42:33 ] >>73 つ[配列にするほどでも、構造体にするほどでもないとき]
79 名前:74 mailto:sage [2009/12/25(金) 20:23:31 ] >>75 確かにCやってからのstd::stringには泣いた。
80 名前:デフォルトの名無しさん [2009/12/26(土) 18:57:20 ] ふーん
81 名前:74 mailto:sage [2009/12/26(土) 19:16:32 ] >>80 お前も俺達と一緒に泣けよ!
82 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 11:39:50 ] 文字列すべてに MFC の CString 使ってるバカの所為で Linux への移植が大変だった、って意味では俺も泣いていいかな。
83 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 11:44:00 ] CString作っちゃえ
84 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 11:57:43 ] >>82 まて、そんなMFCのCStringだなんてクソと一緒にするな。 std::stringで書いてあればその苦労は全く無かったはずだ。全く。
85 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 09:47:25 ] ちょいと相談。 template<class T>class Settings { // }; struct Arecord { // }; class Asettings : Settings<Arecord> { // }; こんなクラス構造があると思いねぇ。勿論、Aの他にもBやCもある。 んでもって、一々Arecordとするのも業腹だから class Asettingsの中でstruct Record としてしまいたいってわけだ。 するってぇと、定義の順番の都合で巧くコンパイルできねぇ。 どうしたもんかね、こりゃ。
86 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 11:56:31 ] >>85 class Asettings が何か分からないから答えられぬ。
87 名前:86 mailto:sage [2009/12/29(火) 11:58:00 ] >>85 ごめんカンチガイした。 template<class T>class Settings { // }; struct Arecord; class Asettings : Settings<Arecord> { struct Arecord { // }; // }; これじゃだめなの?
88 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 13:09:02 ] >>87 ResTHX! それだとダメだった。 Arecordが::Arecordで宣言されて Asettings::Arecordで定義されるからだと思う。
89 名前:87 mailto:sage [2009/12/29(火) 16:10:09 ] >>88 > Arecordが::Arecordで宣言されて > Asettings::Arecordで定義されるからだと思う。 なるほど。たしかに。 Asettingsのクラス定義を分割できないって仕様がくせ者邪魔だなぁ。。
90 名前:87 mailto:sage [2009/12/29(火) 16:15:29 ] >>88 ttp://codepad.org/opJUGUor ここでは通ったけど 中身を実装するとやっぱダメっぽい?
91 名前:87 mailto:sage [2009/12/29(火) 16:17:33 ] >>88 ttp://codepad.org/YBqmrMtV こんなんも通ったよ。
92 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 17:13:14 ] >>91 残念ながら、これでアウト。外のArecordと内のArecordは別物なのよね。 ttp://codepad.org/eEpbQXgN
93 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 17:32:18 ] >>92 codepadでは確かに通らないが、 それはg++が古いからでは? 俺の g++ (TDM-2 mingw32) 4.4.1 および Comeauの www.comeaucomputing.com/tryitout/ このサイトでは通ったよ。
94 名前:>87 >93 ◆Nsutagdmm. mailto:sage [2009/12/29(火) 17:47:01 ] ちなみに VC++ 2008でもbcc5.5.1でも通ったよ。
95 名前:デフォルトの名無しさん mailto:sage [2009/12/29(火) 18:03:57 ] うーむ。gcc3が通らないのが問題なのか。情報THX!
96 名前:87 ◆Nsutagdmm. mailto:sage [2009/12/29(火) 19:03:18 ] ttp://codepad.org/XX7ZGdkK ちなみにこのソースはそちらの手元では通る?
97 名前:デフォルトの名無しさん [2009/12/30(水) 10:46:28 ] 私のコーディングスタイルって変ですか? structが引数になるときは参照渡し、 classの時はポインタ渡し、 としているのですが、変ですか? struct Point; class Object; Point Add(const Point &p1, const Point &p2); shared_ptr<Object> Get(Object* base); って感じなんですが・・・(^^;)
98 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 10:49:31 ] 変です
99 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 10:51:43 ] そういう風に区別する必要性がないと思うよ。 ほとんどの場合参照で渡せば問題ないはず。 ポインタで渡すのは、nullの状態を作りたい場合くらいかな。
100 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 11:00:29 ] structもclassも基本的には同じものだからね 区別する方がおかしい structで書いたらダメ出しする老害は死ぬがいいよ
101 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 11:06:32 ] structで書いてダメ出しされたのかw
102 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 11:12:52 ] classはprivateがデフォルト、structはpublicがデフォルトなのが微妙な位置づけの違いだろうね。 個人的には、structはデーター構造作るときにアライン合わせるときとか、ただのメンバ変数の集合体を作るときだけとしている。 boostのソース読むときはclassとstructがごっちゃになってるので読みづらいな。明確な使い分けの無いほぼ同じ機能の構文が複数あるのは勘弁してほしいよ。
103 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 11:31:46 ] そんなんがC++にはいっぱいあるよな(笑) 俺もstructはメンバ変数やメンバ関数含めほぼ全部publicにしているよ。 (つまりPODとまでは行かないが相当小さい簡易的なもの。) 全部publicでも大きなものはclassとしている。 逆に一つでもprivateにしたい場合はかなりの割合でclassとしている。 要は、読み手の受ける印象の違いだろうけどさ。
104 名前:97 [2009/12/30(水) 11:53:59 ] わたしもstructはデータ、classはクラス(?)と扱うものとしてます・・・ なんかそっちのほうが個人的には読みやすいので (^^; あと、クラスに参照だと基底クラスにキャストすることはできるのかな、とか思って。 趣味グラマなんでそこらへんがよくわかんないですm(_ _)m
105 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 12:15:07 ] >>104 あー、まだその辺な訳ね。 ずいぶんと因果な言語を選んだね君(笑) > クラスに参照だと基底クラスにキャストすることはできるのか 正確にはキャストじゃなくて暗黙の型変換の話だよね? できます。 生ポインタで渡すのはあまり綺麗なスタイルではないことが多い。 (わざとポインタにすることもあるけど) C++例外処理プログラミング ttp://www.02.246.ne.jp/~torutk/cxx/exception/programming.html この辺も読んだ方が良いかも。
106 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 12:15:28 ] >>104 できるよ!!だから安心して参照を使ってね♥
107 名前:デフォルトの名無しさん [2009/12/30(水) 14:48:51 ] すごく基本的な質問ですが・・・ char **c = new char*[5]; と char *c[5]; って、どういう違いがあるんでしょうか? deleteはどっちの場合も必要?
108 名前:97 [2009/12/30(水) 14:52:20 ] レスありがとうございます♪ そういえば参照を使う時でもshared_ptrは値渡しでいいんですよね??
109 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 15:04:54 ] >>107 newとdeleteは1対1で対応するべきものです newが無いのにdeleteしていたり、newしているのにdeleteが無いのは、どこか間違っている可能性が高いです
110 名前:105 mailto:sage [2009/12/30(水) 15:05:06 ] >>108 値渡しじゃなくて、 「値渡しと同じ書き方」ね。 いいよ。 というかそれができるのが参照の利点なのさ。
111 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 15:05:53 ] >>107 まず > char *c = new char[5]; > と > char c[5]; で考えてはいかがですか?
112 名前:107 [2009/12/30(水) 15:31:31 ] 回答ありがとうございます。 char *c = new char[5]; と char c[5]; の場合は、後者には他の文字列ポインタを代入できないというくらいで 基本的には同じような扱い方でOKなんですよね? で、関数を抜けるときは前者のみdeleteが必要ということですよね? char **c = new char*[5]; と char *c[5]; の場合のnewとdeleteの対応ですが、 後者はポインタの配列になると思うのですが 各要素に個別にnewを使っていた場合は、 また個別にdeleteしていくしかないということになるんですか? 関数を抜けるときに配列自体が開放される(?)ので ついでに要素についても自動的に開放されるということはないのでしょうか?
113 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 15:32:20 ] 無いよ
114 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 15:40:03 ] std::string使え
115 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 16:05:48 ] >>112 前者に文字列ポインタを代入していいなんてどこに書いてあった? ここにそれを晒した上で窓から投げ捨てろ
116 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 16:39:41 ] >>112 配列のdeleteはdelete[]だから。 たとえば char* c=new char[5]; に対するデリートはdelete[] c;だよ。 個別というのが char* c[5]; c[0]=new char; という意味だったら、 delete c[0]は必要だから。 スコープから抜けるときに配列は消えるけど中身は消えないからね。 スマートポインタをぐぐると便利だよ。
117 名前:デフォルトの名無しさん [2009/12/30(水) 16:56:59 ] だれか絵を描いてうpしてやれ
118 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:06:25 ] > ついでに要素についても自動的に開放されるということはないのでしょうか? そんな親切な言語じゃないところがC++のいいところであり悪い所でもある。
119 名前:107 [2009/12/30(水) 17:21:56 ] みなさんご回答ありがとうございます。 おかげさまで何となく理解できた気がします。 ポインタ関係はややこしいですね。 >>115 char *a = "abcd"; char b[5]; char *c = new char[5]; b = a; // エラー c = a; // 一応OK 上記のような意味で書いたのですが、用語の使い方を誤っていたかもしれません。
120 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:23:38 ] >c = a; // 一応OK OKじゃねーよ。 newしたバッファはどっかいっちゃうぞ
121 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:26:18 ] 文法上は正しいが、やってはいけないことだな
122 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:33:35 ] ハッ!107はchar*はすべて文字列ポインタと呼んでるのか そんな呼び方は窓から(ry
123 名前:111 mailto:sage [2009/12/30(水) 17:39:59 ] >>107 はちゃんと一応OKって言っているじゃん。 確かに一応OKなんだよ。 リソースを開放する気がないんなら。 そういう嫌がらせプログラムを組みたくなったときに必要な知識だ。
124 名前:107 [2009/12/30(水) 17:51:20 ] 何度もすみません。 もう1点いいですか? char *b[5]; と char (*c)[5]; は別物になるんですか? どちらもポインタの配列なのではないかと思ったのですが、 入れ替えるとコンパイルが通らなくなるので・・・。 >>122 「文字列ポインタ」がまずかったですか?
125 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 17:58:15 ] >>124 前者はcharの*(ポインタ)が5個の配列 後者は、char が5個の配列の*(ポインタ)
126 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 18:52:27 ] まぁ、初心者が一度はドツボにはまるところだから仕方ない。 一度もはまらなかったらそれはそれで怖いし。
127 名前:107 [2009/12/30(水) 19:04:09 ] ありがとうございます。 なるほど、配列のポインタになってしまうんですね。 実験してみたところ、 char *(c[5]); だとポインタの配列で char (*c)[5]; だと配列のポインタという感じでした。 なんか直感と逆な感じがしますが・・・。
128 名前:111 mailto:sage [2009/12/30(水) 19:26:55 ] >>127 よし。 type ttp://wwws.kobe-c.ac.jp/deguchi/c/type.html 俺はこのページを紹介できる時を待っていたんだ(笑) とても分かりやすかったんで必見!!
129 名前:107 [2009/12/30(水) 20:44:54 ] とても有用なページを教えていただきありがとうございます。 つまり、char (*c)[5]; と宣言された変数cがあったとしたら、 そのcに対して (*c)[5] という操作をすれば char 型になるという意味なんですね。 ようやく飲み込めた気がします。 ですが、さらに疑問点が出て来ました(何度もすみません)。 1 : char (*a)[5]; // 配列のポインタ 2 : char *(b[5]); // ポインタの配列 3 : char c[5]; // 配列(のポインタ) 4 : char *d = "abcd"; // 配列のポインタ 5 : char **ea = a; // NG 6 : char **eb = b; // OK 7 : char **ec = &c; // NG 8 : char **ed = &d; // OK また気になって上記のような実験をしてみたのですが、 予想に反して結果がぜんぜん一致しません・・・。 5、6行目に関して: char **x; という形だけを見れば 配列のポインタでもポインタの配列でもいけそうな気がしますが、 この場合は特別にポインタの配列と決められているということなのでしょうか? 7、8行目に関して:どっちも同じだと思うのですが、何か違うのでしょうか? 何度も申し訳ありませんが、ご教示よろしくおねがいします。 結局、教えていただいたページをちゃんと理解できていないかもしれませんが・・・
130 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 20:47:21 ] 型が違う
131 名前:デフォルトの名無しさん mailto:sage [2009/12/30(水) 22:47:53 ] >>129 5行目 配列へのポインタなんだから、 ポインタのポインタとは違うでしょ? a --> [ char型 ] ea --> [ char*型 ] --> [ char型 ] [ char型 ] [ char型 ] [ char型 ] [ char型 ] 7行目 &c は c 、あるいは &c[0] と同じ意味を持つから
132 名前:デフォルトの名無しさん [2009/12/31(木) 08:31:19 ] void kakuhoMemory(); int main(void){ int row = 0; char **url; url = (char **)calloc(1,sizeof(char *))) == NULL); url[0] = (char *)calloc(1000,sizeof(char))) == NULL); for(row = 2;row < 10;row++){ kakuhoMemory(url,row); printf("%p---%p\n",url,url[row - 1]); }} void kakuhoMemory(char **url,int row){ char **tmp; if((tmp = (char **)realloc(url,sizeof(char *) * row)) == NULL){ exit(1);} url = tmp; if((url[row - 1] = (char *)calloc(1000,sizeof(char))) == NULL){ exit(1);} }
133 名前:デフォルトの名無しさん [2009/12/31(木) 08:39:07 ] 続き: 1つずつポインタの配列を増やしていき、 新しく追加された変数にcharの配列のアドレスを代入したいのですが コンパイルして実行するとなぜか3回目でアドレスが短くなってしまい、 更にそれ以降はnilと表示されてしまいます。 以下に示します。 0x9da3008---0x9da3408 0x9da3008---0x9da37f8 0x9da3008---0x3f0 0x9da3008---(nil) 0x9da3008---(nil) 0x9da3008---(nil) 0x9da3008---(nil) 0x9da3008---(nil) どこか間違っているのでしょうか。よろしくお願いします。
134 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 09:17:57 ] >>133 ぱっと見変なとこ。 if((tmp = (char **)realloc(url,sizeof(char *) * row)) == NULL){ //呼び出し元ですでに確保してるはずだね。 url = tmp; // 引数のurlを上書きしてる。 if((url[row - 1] = (char *)calloc(1000,sizeof(char))) == NULL){ //上書きしたurlに保存しても呼び出し元には返せないね。
135 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 11:10:27 ] classの中で定義するtypedefってなにか呼び方があったような気がするんですが、何か知りませんか? 誘導型?とかそんな感じの
136 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 11:30:55 ] >>132 関数を void kakuhoMemory(char ***url, int row) { char **temp; if((temp = (char**)realloc(*url, sizeof(char*) * row))==NULL) exit(1); *url = temp; if((url[row-1] = (char*)calloc(1000, sizeof(char)))==NULL) exit(1); } にして、呼び出しを kakuhoMemory(&url, row); にする。
137 名前:107 [2009/12/31(木) 14:03:57 ] >>130 >>131 お返事が遅れてしまいましたが、回答ありがとうございました。 なるほど a も &c も配列のポインタのポインタをとっても 結局は配列の一次(?)のポインタとして扱われるということなんですね。 1 : char (*a)[5]; 2 : char c[5] = "abcd"; 3 : a = c; // NG(以下、この行は無視してコンパイル成功したものとする) 4 : a = &c; // OK 5 : printf("a : %d , *a : %d , c : %d , &c : %d\n", a, *a, c, &c); // 全部一致する 6 : printf("a[1] : %c , (*a)[1] : %c , c[1] : %c\n", a[1], (*a)[1], c[1]); // a[1] はうまくいかない くどいですが、実験してみたら上記のようになりました。 "[]"を単にアドレスから値を取得する演算子だと理解していたのですが、 かなり甘かったようです・・・。
138 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 15:19:22 ] 5:ポインタの書式指定子は%dじゃなくて%pだ 6:a[1]はアクセス違反。他と同じ場所を指すのはa[0][1]
139 名前:131 mailto:sage [2009/12/31(木) 15:22:30 ] >>137 ちょっと >>131 の最後の一文について訂正。 char c[5]; において、c と &c[0] は等価なんだけど ANSI-C以降の場合、&c は配列へのポインタなので、c と &c は同じじゃない。 K&Rだと同じなんだけどね 多分、配列とポインタを混同してると思うので、C-FAQを読むといいよ www.kouno.jp/home/c_faq/c6.html#0
140 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 17:16:48 ] モノステート シングルトン 使い分けがわからん ぐぐると >シングルトンパターンは汎用性、可搬性が必要なクラスに使用すべきでしょう。 >モノステイトパターンは元々「状態が不変」であることを表すパターンだと思うので、 「実体が一つであることを保証する」といった使い方には適さないでしょう。 具体的にどういう場面で使い分ければいいんだ?
141 名前:107 [2009/12/31(木) 19:15:54 ] ご回答ありがとうございます。 なるほど・・・今度こそ理解できたような気がします(自信なし)。 char (*a)[5]; char c[5] = "abcd"; a = &c; とした場合、printfとかで内容だけ見ると a == *a == c == &c となるけど、 実際は a と &c は配列へのポインタであり そして *a と c は配列の最初の要素へのポインタということで、型が違うことですかね。 & や * という演算子は値→アドレス、アドレス→値の変換をする演算子だと 思っていましたが、この場合は例外的に型の変換が行われるわけですね。 C/C++ 難しすぎです!
142 名前:デフォルトの名無しさん [2009/12/31(木) 19:19:27 ] >>134 さん >>136 さん お二方のおかげでわかりました。 url=tmpじゃ確かに呼び出し元のurlの値は変わらないですよね。 それと>>136 さんの if((url[row-1] = (char*)calloc(1000, sizeof(char)))==NULL) exit(1); の行のurl[row-1]の部分は(*url)[row-1]ですよね?
143 名前:デフォルトの名無しさん mailto:sage [2009/12/31(木) 19:43:56 ] そうだね
144 名前:デフォルトの名無しさん mailto:sage [2010/01/01(金) 23:18:27 ] >>141 > C/C++ 難しすぎです! うん、これら2つ、特にC++は難しいことで有名。 どのくらいの趣味グラマになりたい? 正直 将来の職業にする気が全く無く、 楽しみたいだけならPythonとかRubyとかのような もっと高級言語が良いんじゃないかと思うんだけど。
145 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 00:19:47 ] それは高級なのか?
146 名前:144 mailto:sage [2010/01/02(土) 11:05:10 ] >>145 俺は C言語は低級言語、PythonとRubyは高級言語といって 恥じない代物だと思っているんだけど、 君はどう思う?
147 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 11:22:09 ] むしろ君の方が恥ずべき代物
148 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 16:57:22 ] Cが高級言語のなかでは、低級よりだってのは、誰しも認めるところだと思ってたけど。
149 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 17:01:13 ] >>147 意味不明な煽りは止めてくれない? asm と c しか無かった時代とはもう違うのだよ。
150 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 17:32:56 ] そんな時代、いつあったんだろう…
151 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 17:56:59 ] >>150 「しか」は言い過ぎたけど、 まあ察してくれよ
152 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 19:39:50 ] >>144 PythonやRubyを高級言語と分類することには特に異論はないが、 プログラミングを職業とするということへの誤解を生む表現だな。
153 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 20:03:54 ] こいつをご覧くだせー。 #include <stdio.h> #define VIEW() printf("a = %d\n", a) int a = 0; void func(void); int main(int argc, char *argv[]){ int a = 10; VIEW(); { int a = 20; VIEW(); } VIEW(); func(); ::a = 30; /* (1) */ func(); return 0; } void func(void){ VIEW(); return; } まあ、見ていただければわかると思うが、変数名についての実験を行った。 グローバル変数と同じ名前のローカル変数を使うと、そのグローバル変数を参照するには :: を使えばよい。 ところで、この :: (グローバル名前空間) って純粋 C でも使える?
154 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 20:22:30 ] >>153 C言語にはnamespaceすらない んだったきがするが。
155 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 20:33:43 ] >>153 グローバル変数を使わなければよい。
156 名前:デフォルトの名無しさん mailto:sage [2010/01/02(土) 20:46:56 ] >>154 そうか... Thanks! >>155 ぐろ〜ばる☆
157 名前:107 [2010/01/03(日) 00:50:30 ] >>144 まあ職業はともかく、実際C/C++で書かれているプログラムは多いですし 是非しっかり使えるようになりたいですね。 回答していただいた皆さん、ありがとうございました。
158 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 02:43:09 ] CRITICAL_SECTIONはグローバル変数じゃないといけないの? ネット上のサンプルのほとんどがグローバル。 スレッド生成のときに渡すのは駄目なの?
159 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 09:31:46 ] >>158 Win32APIのCRITICAL_SECTION構造体かな? グローバルにおく必要は無いよ。普通はメンバー変数に置く。 スレッド間の同期に使うものだからスレッド作成前に作ってかまわない。 CRITICAL_SECTION構造体はコピーできないからポインタ渡しで渡すこと。 ただ、質問のようにスレッド生成時に渡すものではなく、スレッド間で競合するリソースをアクセスするときに、そのリソースが持ってるCRITICAL_SECTIONの構造体を参照してクリティカルセクションに入るようにする。
160 名前:デフォルトの名無しさん [2010/01/03(日) 20:41:46 ] 初心者質問ですいません bool false の読み方が良くわからないので正しい読み方を教えて欲しいです
161 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 21:04:33 ] >>160 public.research.att.com/~ttsweb/tts/demo.php このサイトで聞きなさい。
162 名前:デフォルトの名無しさん [2010/01/03(日) 22:16:14 ] >>161 まったくわかりませんでした
163 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 22:17:32 ] 流暢な英語すげぇ
164 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 22:20:09 ] bool ブール false フォールス
165 名前:デフォルトの名無しさん [2010/01/03(日) 22:36:43 ] >>164 ありがとうございます フォルスって読んでました
166 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 22:37:57 ] >>161 長年のchar論争に決着が…!
167 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:03:37 ] >>166 まさかcharを こう発音されるとは思ってなかったわw
168 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:07:57 ] >>165 フォルス=陰茎
169 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:19:00 ] char論争なんて無い 当然チャーだ
170 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:27:20 ] >>168 それは間違い
171 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:28:25 ] > Phallus > ギリシャ語で「ふくらんだもの」のこと。 > 男性の性器、男根を意味する言葉。特に勃起した状態を指す > なお発生学においては、男性の陰茎だけでなく女性の陰核も指す。
172 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:33:29 ] phallusはファルス
173 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:43:07 ] >>169 は?シャアに決まってるだろJK
174 名前:デフォルトの名無しさん mailto:sage [2010/01/03(日) 23:45:39 ] うけると思った?
175 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 00:23:59 ] チャじゃねーの
176 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 02:31:57 ] 質問です。 std;;string str;の中に例えば test,abcd,efg と格納されていた場合、「 , 」の後だけを個別に取得出来ないでしょうか?
177 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 03:23:17 ] find() して substr()…あ、いや >std;;string str; ↑なんぞ
178 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 13:03:52 ] >>177 ただのミスですw ありがとうございます、ちょっとやってみます。
179 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 13:31:30 ] >>177 うおおお!ありがとうございました! 簡易スクリプトのコマンドで悩んでいましたが、無事にコマンドと引数を取得出来ました。 凄い勉強になりました!ありがとう!
180 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 15:33:04 ] 何か引数のポインターがNULLだったときは例外投げろと言われたのですが、 JAVAのNullPointerExceptionみたいなのないですか。 どこをどう探してもC++にNULLっぽい例外がないのですが
181 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 15:35:01 ] ない。自分で例外投げろ
182 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 16:22:56 ] これで良い? ぬるぽ /** * JavaのNullPointExceptionに相当する例外クラス. */ class null_point_error : public std::logic_error { public: null_point_error (const std::string& what) : logic_error(what) {}; };
183 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 17:15:58 ] ∧_∧ ( ・∀・) | | ガッ と ) | | Y /ノ 人 / ) < >__Λ∩ _/し' //. V`Д´)/ (_フ彡
184 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 19:07:32 ] >>180 C++にはOSが検出するNULLポインタ例外またはアクセス違反例外は無い。しかし、VC等のベンダ拡張で構造化例外を使うとそれらの例外はキャッチできる。 C++の参照やイテレータはNULLを排除してるし、C++では特にNULLは使わなくっても設計できなくはない。
185 名前:デフォルトの名無しさん [2010/01/04(月) 19:24:19 ] MFCでダイアログベースの開発を行っています。 今回、クライアント側の要望で、ダイアログ、ウィンドの背景や、ボタンなどいろいろなアイテムを スキンを使用したGUIにする要望がありました。 要は見た目の話ですが・・・・ そこで、市販のスキンライブラリー(スキン作成ソフト)を使用しようといろいろ探してみたのですが、 海外のものしか見つかりませんでした。 過去の業務で同じようなスキンライブラリを使用、または検討した人がいましたら、そのソフト(ライブラリー名)を ご教授お願いできないでしょうか?一長一短もありましたら教えていただければうれしいです。 自分で探したところ、SkinCrafter(デモ版)が少し使いやすかったです。 ボタンなどのイメージを1枚ずつ1ファイルとして登録するのが少し面倒でしたが・・・
186 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 19:27:21 ] ダイアログを変えたいならリソースDLLを使えばいいんじゃね?
187 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 22:14:14 ] >>184 いや引数で Hoge* hoge みたいなのがあって 間違えてNULLを渡したら例外飛ばせコラーって上から言われたのですよ
188 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 22:32:19 ] Hoge& hoge
189 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 22:37:57 ] ウィンドウプロシージャのサブクラス化するために(www.geocities.jp/ky_webid/win32c/064.html SetWindowLongでクラスのメンバ関数を渡そうとすると型が違うらしくコンパイルエラー メンバ関数をstaticつけて静的にするとコンパイル通る、普通の関数でもおk 動的なクラスのメンバ関数のアドレスを(LONG)(LONG_PTR)に変換する方法ない?
190 名前:デフォルトの名無しさん [2010/01/05(火) 13:03:14 ] IEのプラグインを作成を考えています。 作成するのは初めてです。 プラグインdllが、外部のファイル操作(DB参照)、レジストリのパラメータ取得することは可能でしょうか?
191 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 16:26:25 ] 質問です。 以下のコードを実行するとx,yがそれぞれ 00000000, 00000001になるのですが これはどういうことなんでしょうか? コンパイラはGCCとVS2008Expressで同じ結果でした。 unsigned int i = 32, x, y; x = 1u << 32; y = 1u << i; printf("%08x %08x\n", x, y);
192 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 16:31:15 ] >>191 ECC6.2.1では00000001, 00000001 32bitモードでの32回以上のシフトは80286以上で未定義
193 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 16:39:39 ] >>192 未定義なんですか。 ということは言語や処理系の問題ではないという事でしょうか? 左シフトは0埋めされるので必ず0になると思っていたんですが。 勉強になりました。
194 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 16:51:37 ] >>193 IntelとかAMDからPDFをDLして嫁
195 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 17:12:33 ] epollのEPOLLET相当のことをkeventでやりたいんだけどフラグとかってあります? それともデフォルトでエッジトリガだったりしますか
196 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 20:36:48 ] プロジェクトで使う定数一覧みたいなヘッダーファイルってなんて名前にしてますか どうにも良い名前が考えつかない。
197 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 20:46:23 ] >>196 constants.hpp これじゃだめ?
198 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 20:47:47 ] >>196 macros.h
199 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 20:49:56 ] >>198 マクロかよw
200 名前:196 mailto:sage [2010/01/05(火) 20:50:47 ] constants.hpp macros.h イマイチ
201 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 20:52:48 ] common.h global.h
202 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 21:03:20 ] CONSTS.H
203 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 22:12:21 ] typedef、定数、基底クラスのインタフェース このあたりはいつも foundation.hpp としてまとめてる。
204 名前:196 mailto:sage [2010/01/05(火) 23:06:38 ] constants.hpp macros.h common.h global.h CONSTS.H foundation.hpp イマイチ
205 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 23:08:52 ] stdafx.h
206 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 00:56:59 ] 「プロジェクトで使う定数」なら $(プロジェクト名)_constants.h 何に使う定数なのか自覚してるなら迷うわけがない ただファイル数を減らしたいために関係ない定数を同じヘッダに書くのはどうかと
207 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 01:03:53 ] >>187 何の例外投げればいいか上に聞け 何も指定されなければ他のコード見て真似しろ 分からなければstd::runtime_errorかstd::invalid_argumentでも投げとけ
208 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 01:14:54 ] >>189 ない。だから、少し間接的な方法をとる。 ウィンドウハンドルに好きな値を関連付ける機能があるので、オブジェクトへのポインタを登録しておくというもの。 こんな関数をグローバルまたはクラスの静的メンバ関数として定義し、 SetWindowLongPtr(hButton, GWLP_WNDPROC, (LONG_PTR)ButtonSubWndProcEntry)のように渡す。 (この問題とは直接関係ないが、SetWindowLongPtr使え) あと、SetWindowLongPtr呼ぶ前に、SetProp(hButton, TEXT("MyClass object"), オブジェクトへのポインタ);する。 LRESULT CALLBACK ButtonSubWndProcEntry(HWND hwnd, UINT msg, WPARAM wp, LPARAM lp) { MyClass* p = static_cast<MyClass*>(GetProp(hwnd, TEXT("MyClass object"))); return p->ButtonSubWndProc(hwnd, msg, wp, lp); }
209 名前:1889 mailto:sage [2010/01/06(水) 04:17:13 ] >>208 thx、打開できそうだ
210 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 13:15:21 ] >>204 ore_project_consts.h
211 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 14:45:50 ] boost::shared_ptrはスレッド対応してるらしいんですが、std::tr1::shared_ptrのほうもスレッド対応してるんでしょうか?
212 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 19:55:19 ] >>211 C++にはスレッドとかそういう概念自体が存在しないんじゃない? もしそうだとすると > std::tr1::shared_ptrのほうもスレッド対応してるんでしょうか? 実装次第ということになりそうだが。。。
213 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 20:49:34 ] MT-safeかどうかを訊ねてるに決まってるだろ
214 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 20:57:02 ] だから実装次第つってんだろ・・・
215 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 21:06:55 ] >>198 Fortranだと、Macross.Fだな。
216 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 21:18:28 ] >>211 VCのTRはスレッドセーフみたいだね。 C++0xはスレッドに対応するからスレッドセーフだと期待してるんだけどね。 boost::shared_ptrとstd::shared_ptrの違いとかどっかに書いてないかなあ?
217 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 21:44:46 ] >>213 こいつ、死ねばいいのにね。
218 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 21:51:06 ] ひどいこと言わないで
219 名前:デフォルトの名無しさん mailto:sage [2010/01/06(水) 21:59:39 ] まあ、実装依存っていう回答は無いわな・・・
220 名前:217 mailto:sage [2010/01/06(水) 23:04:11 ] >>219 おい 他人のふりしないではっきり言えよ。 じゃあお前は std::numeric_limits<int>::max()はいくらを返すのですか? って言われたらなんて答えるんだよ?
221 名前:デフォルトの名無しさん [2010/01/09(土) 21:21:43 ] 本家sourceforgeがすごくつながりづらいんだけど俺だけ?
222 名前:217 mailto:sage [2010/01/10(日) 23:14:50 ] >>219 おい、逃げないでちゃんとレスしろよ。 最近はバカが根性も失って、負けるとしっぽを巻いて逃げるから もうどうしようもないな。
223 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 12:30:45 ] こういうコードを見つけました。 glMaterialfv(GL_FRONT_AND_BACK, GL_AMBIENT, (float[]){0.3f, 0.3f, 0.3f, 1.0f}); {}で数値を囲んで関数に配列わたしてます。 gccだと、似たようなことしてコンパイル通りました。 これって、純粋なCの文法なんですか?
224 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 14:40:43 ] >>223 void func(int*a){} int main(void){func((int[]){1,2,3});} を、gccで-pedanticオプションつけたら foo.c:2: 警告: ISO C90 forbids compound literals って出たから、C90じゃダメみたいだよ。 C99ではどうやら認められてるみたいだが。
225 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 15:53:29 ] >>223-224 うん、C99の機能。
226 名前:デフォルトの名無しさん mailto:sage [2010/01/11(月) 18:16:26 ] explicitって引数2こ以上とvoidには無意味?
227 名前:デフォルトの名無しさん mailto:sage [2010/01/12(火) 00:19:38 ] >>226 voidってデフォルトコンストラクタのことを言いたいの? なら君の言う通り。・
228 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 20:30:14 ] コンストラクタやデストラクタにvoidって書いたらエラーにならなかった?
229 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 23:31:28 ] なんないでしょ
230 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 23:36:19 ] >>229 なるよ。
231 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 23:39:41 ] >>229 なるだろ
232 名前:デフォルトの名無しさん mailto:sage [2010/01/13(水) 23:58:41 ] class T { void T(); //エラー T(void); //エラーじゃない }; >>226-228 の流れ、特に>>226 は明らかに引数の話
233 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 00:01:23 ] >>232 そうか。 よく読んでなかった。
234 名前:デフォルトの名無しさん mailto:sage [2010/01/14(木) 00:10:26 ] というか>>226 が質問丸投げで出て来ない以上、 適当な返事になってもいたしかたあるまい。
235 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 12:26:33 ] template <class func_t> struct Hoge; template <class ret_t, class arg_t> struct Hoge<ret_t (*) (arg_t)> { ... }; @ template <class ret_t, class arg_t> struct Hoge<ret_t (arg_t)> { ... }; A @とAって明確な違いってありますか?
236 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 23:27:43 ] >>235 なんじゃこりゃ? 難解だなぁ〜。っていうかこういうの出来るのかな? Hogeの中のfunc_tの型が、「@」はret_t型を返し、arg_t型の引数を取る関数へのポインタで、 「A」はret_t型を返し、arg_t型の引数を取る関数に特定されるということ? 一応違うバリエーションが作られるのではないだろうか?
237 名前:デフォルトの名無しさん [2010/01/16(土) 21:09:25 ] 複数のif文とelse if文の上手な書き方を教えてください。
238 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 21:32:15 ] 条件から整数を導出する関数かクラスを作ってswtich caseか関数テーブルで分岐する。
239 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 02:18:13 ] 画面に表示されているものを全部消すにはどうしたらいいですか? エスケープシーケンスを使った方法(printf("\x1b[2J");)では出来なかったので他の方法があれば教えてください
240 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:29:26 ] 環境を説明せずに、エスパーでも求めてるのか? どの環境でも出来ることは、画面の行数分改行しろ、流れて消えるからw
241 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:32:07 ] ディスプレイの電源を切る。
242 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:40:15 ] うまくいきました! ありがとうございました。
243 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:40:42 ] どういたしまして
244 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 13:47:24 ] 行数分解行なのか? マジ正解だったか、エスパーになったのか俺w
245 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 15:08:42 ] >>239 for (i = 0; i < 1000; i++) printf("\n"); コンソールの行数が1000行以上だと使えないんで、環境依存になるけど。
246 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 15:42:04 ] >>244 初心者用プログラミングスレに長く居るとエスパーになるらしいよ。 もしかして君も?
247 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 17:50:38 ] あるサイトの画像掲示板にアクセスすると 広告と画像が表示されるので 画像のみの直リンのURLを生成してアクセスすると403となるのですが、 これを回避する方法はないでしょうか?
248 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 18:32:36 ] そのサイトが何を見て403にしてるのか調べてそこをうまくやればいいんじゃない?Referrerとか。 プログラムの質問かそれ?
249 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 14:47:14 ] システムフックについて質問です コンパイラは Borland C Compiler 5.5.1 OSはWindows XP SP2 ここに全部コード貼れないのでzipでうpします。 ソース(DLL用と、呼び出す本体):www.dotup.org/uploda/www.dotup.org575327.zip_4DPKVJyH4VjgO7MaoGhC/www.dotup.org575327.zip キーボードをフックして、printf関数で何が押されたか、を見たいんですが フォーカスがそのプログラムのウィンドウに来てるときじゃないと何故か反応しないんです。 何故でしょう。 日本語不自由ですみません。
250 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 18:27:23 ] 母国語でOK
251 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 18:37:30 ] 自分のプロセスだけなら共有データセグメントあたりだろ
252 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:18:38 ] >249 ・フック関数は、フックされた側のスレッドで実行される。 ・GUI アプリでは stdout が開かれていないため printf は 使用できない。 ・どうしてもコンソールに表示したいなら、 フックされた側(フック関数)から、プロセス間通信でフックした側ににデータを送信する。
253 名前:249 mailto:sage [2010/01/20(水) 04:43:19 ] >>252 なるほど、だからビープ音は鳴るけど表示はされないのか・・・ やってみます、本当にありがとうございます。