- 1 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:37:43 ]
- C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。 IDE (VC++など)などの使い方の質問はその開発環境のスレに お願いします。
- 2 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:38:18 ]
- ■基本■
[C++ FAQ] www.parashift.com/c++-faq-lite/ www.bohyoh.com/CandCPP/FAQ/ (日本語) Cとその仕様を比較しながらの解説なので分かりやすい。 ***** 質問の前に必ずこの二つに目を通してください ***** [C/C++ リファレンス] www.cppreference.com/ (英語) www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映しない) [禿 Stroustrup] public.research.att.com/~bs/ [C++ International Standard] www.iso.org/iso/iso_catalogue/catalogue_tc/catalogue_detail.htm?csnumber=38110 [JTC1/SC22/WG21 - C++] www.open-std.org/jtc1/sc22/wg21/ ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。 [JIS X3014] www.jisc.go.jp/app/pager?&RKKNP_vJISJISNO=X3014 ISO規格の日本語訳。JIS X 3014:2003はISO/IEC 14882:2003 (E)に対応。
- 3 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:38:41 ]
- ■Books(Templateまわり)■
Effective STL www.amazon.com/exec/obidos/ASIN/0201749629/ www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳) Modern C++ Design www.amazon.com/exec/obidos/ASIN/0201704315/ www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳) C++ Templates www.amazon.com/exec/obidos/ASIN/0201734842/ C++ Template Metaprogramming www.amazon.com/exec/obidos/ASIN/0321227255/
- 4 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:39:05 ]
- ■Libraries■
[Boost] Boost www.boost.org/ (日本語) www.kmonos.net/alang/boost/ (日本語) shinh.skr.jp/boost/ [標準ライブラリ] SGI-STL www.sgi.com/tech/stl/ STLport stlport.sourceforge.net/ GNU libstdc++ gcc.gnu.org/libstdc++/ Apache STDCXX incubator.apache.org/stdcxx/ STLFilt www.bdsoft.com/tools/stlfilt.html (日本語) www005.upp.so-net.ne.jp/episteme/html/stlprog/ (日本語) www.wakhok.ac.jp/~sumi/stl/ [Loki] sourceforge.net/projects/loki-lib/ LokiPort-MSVC6sp5 fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
- 5 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:39:25 ]
- STLつかうと一気に実行ファイルサイズが10倍に?!
環境によるだろ。 俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力 ランタイムを使用するようにして使っているが、例えばstd::vectorを 使っても使わない時と比べ10Kほどしか増えない すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。 C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。 とかいうエラーが出るんだけどこれってどうすればいいの? #include <stdafx.h> 後死ね。 言葉が悪いな。それで教えているつもりか。 まぁヒントぐらいにはなったな。 うむごくろう。
- 6 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:43:29 ]
- 前スレ
C++相談室 part60 pc11.2ch.net/test/read.cgi/tech/1200044614/
- 7 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 19:46:54 ]
- >>6
サンクス、連投で制限食らった
- 8 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:02:21 ]
- >>前スレ1000
とりあえず、お前が俺の言っていることを理解出来ていないことだけは分かった お薦めの本があって、それを教えることには全く反対しないが、 自分で調べたり、情報を探したりしようとしない奴は 大体どうしようもない 一応補足 前スレ984のように聞いてみること自体は別に良いと思う 本を紹介してもらわないと先に進めない、ということでなければ
- 9 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:05:41 ]
- お前のポリシーはどうでもいいよ
- 10 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:06:48 ]
- そういや、こういうヤツがいるから初心者歓迎スレが出来たんだったな
- 11 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:14:48 ]
- ポリシーじゃねぇよ・・・
無能にレスしても無駄のようだな・・・ >>10 初心者に本だけでなく入門サイト探してみたら?って言うのは アドバイスにならないのか? 自分自身の経験から言っているんだけど ある程度理解出来てくるとcppllのアーカイブとかも参考になるし
- 12 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:31:24 ]
- おとなしく初心者歓迎スレかオススメ図書スレに誘導してやれよ
今回の様な議論が過去あったからこそそういったスレがあるんだから
- 13 名前:デフォルトの名無しさん mailto:sage [2008/03/09(日) 20:40:52 ]
- 誘導済みだろ?
俺は別に質問者にレスしてるつもりないし・・・ 前スレの985のレスが気に食わない人が居るようなので、 レス返してるだけ
- 14 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 00:04:40 ]
- >>13
案外質問した人が突っ掛ってたりしてなw んなわけないか。
- 15 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:09:34 ]
- 他スレでis-a、has-aで継承やメンバを考えるみたいな話が合ったんですが、
doはどういう風に処理したらいいでしょうか アクションゲームとかでAn enemy moves.(敵は動く)とした場合、 moveメソッドはenemyオブジェクトの位置を示すメンバ変数を操作すると思います。 すると、moveはenemyオブジェクトのメンバ関数であるべきと思えるのですが、 他のオブジェクトの位置とかが影響する場合、 enemyオブジェクトをメンバにもつクラス(WorldとかGameとか)に、 全てのオブジェクトを動かすメンバ関数を用意した方が、 他のオブジェクトを参照でき適切に処理できそうです このような機能を持つメソッドを、皆さんはどの位置に配置していますか?
- 16 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:17:01 ]
- enemyのmoveメソッドはそのままで
WorldやGameからすべてのenemyのmoveメソッドを呼ぶ様にすればいいんじゃね? ていうかC++関係ないな
- 17 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:23:43 ]
- >>15
もし本当にゲームのことだったら pc11.2ch.net/test/read.cgi/gamedev/1155209226/ とかで聞いた方が良さそう。 それかこの板のクラス設計とかのスレ。 俺だったら、大まかにStrategyパターン的な感じで書くかな。 enemyとかのユニット情報を持った環境(orフィールド)オブジェクトを 参照していじる敵戦略クラス・・・とか。
- 18 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:31:46 ]
- >>16
すみません、自身がCからC++に移行して、 クラス設計に右往左往しているもので、ここで聞いてしまいました >>17 あ、そんなスレがあったとは知りませんでした moveメソッドは引数にしたがってオブジェクトの変数を変えるだけ moveメソッドに渡す引数を敵戦略クラスないし、Worldクラスで決定するって方向で考えて見ます (moveメソッドの内容が二行で終わりそうだ……。他のメソッドとまとめよう) ありがとうございました
- 19 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:34:51 ]
- >>18
ちなみに、17のはゲ製板のスレね。
- 20 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 01:40:44 ]
- 飛んできたのはおそらく同じ板のシューティング製作スレだなw
- 21 名前:17 mailto:sage [2008/03/10(月) 02:11:11 ]
- ターン制で移動先選択→攻撃みたいなの想定してました/(^o^)\
敵戦略クラスは忘れた方が良いw
- 22 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 03:05:22 ]
- Class().Method();
なんて書けたんだね、、、知らなかったよ(;´Д`)
- 23 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 03:20:08 ]
- 式が何を意味するかによる。Class()がインスタンスなら当然ドットを付けてメンバにアクセスできる。
一通り文法をかじったなら、今度は仕様書を読んでそれを確かなものにした方がいい。流れとしては。
- 24 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:21:40 ]
- ぁぁ、ごめん。はしょりすぎた。
class Class { public: int Method(); }; こんなので、 void F() { printf( "%d\n", Class().Method() ); } な感じ。
- 25 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:38:15 ]
- printf("%d\n", int(5));
な感じ?
- 26 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 22:47:08 ]
- 一時オブジェクトが近々move semanticsな感じ?
- 27 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:37:58 ]
- 異なるクラスのオブジェクトをひとつの配列(vector,list)で管理することは出来ないのでしょうか
a[0]はclassA,a[1]はclassB,a[2]はclassC、……という風に classA、classBは同じpublicなメンバを持っているのですが、 メンバ関数の中身とそこで使うprivateなメンバが異なっています
- 28 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:49:47 ]
- >>27
そういうのこそ、ポリモーフィズムでしょ
- 29 名前:デフォルトの名無しさん mailto:sage [2008/03/10(月) 23:59:11 ]
- >>28
関数の多重定義のことでしょうか ClassAとClassBの異なるメンバもひとつのクラスにまとめて、 使わないメンバがあっても気にしない、という方針でもいいんですが、 無駄にメモリを消費するのがイヤなもので
- 30 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:01:24 ]
- 全く関連のないクラスを1つの配列に入れるという時点でかなりおかしいと思う。
関連というか共通項があるからこそ1つの配列に入れるんだろう?
- 31 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:06:44 ]
- >>29
仮想関数ってやつだ。 class Base { public: virtual ~Base() {} virtual void func() = 0; // 共通のメンバ関数 }; class A : public Base { public: virtual void func() { /* classAの処理 */ } private: /* classAのメンバ変数 */ }; class B : public Base { public: virtual void func() { /* classBの処理 */ } private: /* classBのメンバ変数 */ }; このようにしておいて、たとえば Base* p1 = new A; Base* p2 = new B; とすれば、 p1->func(); // A::funcが呼ばれる p2->func(); // B::funcが呼ばれる となる。 あとはvector<Base*>にすれば万事解決では。
- 32 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:09:10 ]
- boost::ptr_vector だと勝手に delete してくれるから楽だよ。
- 33 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:43:37 ]
- >>30
アクションゲームで A:単純な移動しかせず体当たりでダメージを生む敵 B:主人公の位置などを頼りに複雑なアルゴリズムで動き多彩な攻撃をする敵 こんな感じでAの方が圧倒的に必要なメンバ変数が少なく、 かつAの方が数が多いので、Bに合わせてメンバ関数を増やすとメモリを食らってしまうのです >>31 >Base* p1 = new A; AがBaseを継承していると、こんな代入も可能なのですか…… ありがとうございました >>32 ググってみましたが、new演算子を使いまくるなら、便利そうですね 仕様に慣れるよう練習してみます あちがとうございました
- 34 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 00:44:13 ]
- 誤字修正
×Bに合わせてメンバ関数を ○Bに合わせてメンバ変数を
- 35 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 02:31:06 ]
- >>33
とりあえず 継承、多態(ポリモーフィズム)、オーバーライド 等を調べるんだ AとBの共通する部分を基本クラス(やinterface)としてくくりだせ
- 36 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 11:10:02 ]
- エピステーメー氏の「C++言語のカラクリ」の話題出た?
なめて読んでたら「自己記述の必然性」が全く理解できない。 どうにか「だから単純なC++→C」のコンバーターじゃ駄目なんだよって 一言で説明できないか?
- 37 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 11:49:30 ]
- C++をC++で記述できないとだめだということ?
何だかよく分からないな。でもあの人はたまに哲学よりのトンデモを平気で書いたりするから気にしちゃいけないよ。
- 38 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:02:24 ]
- Cだけではtrr..catch..throwが実現できなかったって話だろ。
でも話題が古いなあ。
- 39 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:23:12 ]
- 自己記述できることが○○だ(スバラシイとか完備だとか)
って誰かに刷り込まれたんかな 頭悪いな
- 40 名前:デフォルトの名無しさん mailto:sage [2008/03/11(火) 12:26:33 ]
- コードジェネレータ通すとデバッグがやりにくそう
- 41 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 00:28:22 ]
- VMのスタック上で記号処理を介せば
殆どの言語は自己記述可能だが と書けばミもフタもないのか
- 42 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 02:44:49 ]
- IO機能がないんですがどうすればいいですか。
- 43 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 05:26:59 ]
- www.google.com/search?q=iostream
- 44 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 05:33:36 ]
- 42は41へのレスなんじゃなかろうか
- 45 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 05:48:23 ]
- orz
- 46 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 10:24:06 ]
- 自己記述ってどんなの?
- 47 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 11:16:52 ]
- ある言語やその処理系でその言語を実行できる処理系を書くことだお
- 48 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 13:28:47 ]
- 多分要はメタプログラミングは必要だから出てきたんだ、偶然や酔狂じゃない。
ってことを言いたいんだろ?読んでないけど。
- 49 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 21:59:43 ]
- あれ?なんかtemplateで遊んでたらメタプログラミングできちゃったぞ
って感じ
- 50 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:01:01 ]
- typedef std::map<size_t,Dummy> DummyMap;
DummyMap dmap; .... DummyMap::iterator it = dmap.find(index); Dummy& dummy = (it != dmap.end()) ? it->second : dmap[index]; っていうこと(イメージ)をしたいんだが、\ findして、insertすると少なくとも2回の走査が行われていて、無駄な感じがする。 どうすべきか、アドバイスをくだされ。
- 51 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:02:34 ]
- 趣旨を間違った。
これじゃ普通にdmap[index]すればいいじゃねーか。 出直してくる。
- 52 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 22:41:37 ]
- 韓国人宇宙飛行士が国際宇宙ステーションに搭乗する際の活動に関する日本韓国間の協力について
www.enjoykorea.jp/tbbs/read.php?board_id=teconomy&page=3&nid=3433452&start_range=3433445&end_range=3433484 日本の大事な税金で作ったものを何で韓国人にタダでつかわせるんだ! 苦情メールを送ろう! JAXA www.jaxa.jp/pr/inquiries/index_j.html 文部科学省 www.mext.go.jp/mail/index.htm 御意見・お問い合わせ専用メールアドレス voice_atmark_mext.go.jp 全く他人事じゃないんですけど>ロシア 宇宙ステーションをただで使わせて写真とらせるとかいってますが・・ 抗議してくれ。 朝鮮人どもまじで死んでくれ。
- 53 名前:デフォルトの名無しさん mailto:sage [2008/03/12(水) 23:42:33 ]
- >>51
定型はこう、かな iterator it = map.lower_bound(key); if(it == map.end() || it->first != key) { it = map.insert(it, Dummy()); } Dummy &d = it->second;
- 54 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:02:54 ]
- > it->first != key
これは問題なければ良いんだけど、正確にはlessを使えとかそういう話、無かったっけ?
- 55 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:24:47 ]
- it->first != key
lower_boundの戻り値はpairじゃないよな。確かキーだよな。 ソート基準がデフォのlessならこうか。 if(it != map.end() || !(key < *it)) { //found } else { //not found }
- 56 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:26:26 ]
- ||じゃなくて&&だわ
if(it != map.end() && !(key < *it)) { //found } else { //not found }
- 57 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:37:32 ]
- >>55
lower_bound()の戻り値はpairだよ。 ・・・というより、map<k, v>::value_typeがpair<k, v>だ、と説明するほうが、根本的で適切かな。 std::コンテナ::iteiratorは、std::コンテナ::value_typeのポインタ的に動作するわけだから。 >>53-54 「厳密には」こう書くべき。 if (it == map.end() || map.key_comp()(key, it->first) {
- 58 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:38:36 ]
- ごめん訂正。
- map<k, v>::value_typeがpair<k, v> + map<k, v>::value_typeがpair<const k, v>
- 59 名前:デフォルトの名無しさん mailto:sage [2008/03/13(木) 00:46:26 ]
- >>57
ああ、そうだね。elementの型がpairだた。スマソ。
- 60 名前:デフォルトの名無しさん [2008/03/16(日) 05:51:19 ]
- テスト
- 61 名前:デフォルトの名無しさん [2008/03/16(日) 05:55:48 ]
- class B;
class A { B b; }; class B { A a; }; と書いたところ、 エラー出ます><。 どう対処すればいいですか?
- 62 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 06:04:28 ]
- よく考えようぜ。
A の中に B がある。 その B の中に A がある。 その A の中に B が・・・ あり得ない。 とりあえず何をしたいのか整理しよう。 大抵の場合は、 1. クラス設計を変更する。 2. a と b のどちらかを参照にする。 のどちらかになる。
- 63 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 06:31:59 ]
- haskellを使う
- 64 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 07:41:30 ]
- >>61
Aの中に持ちたいのはBそのものじゃなくて、Bの参照なんじゃね?
- 65 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:02:01 ]
- >>62
循環して持ちたいのはよくあること。 やるなら>>64のようにすればいい。 同じような質問見つけてきたんで参考にどうぞ。 www.atmarkit.co.jp/bbs/phpBB/viewtopic.php?topic=36231&forum=7
- 66 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:45:33 ]
- 62にそう書いてるじゃん
- 67 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 03:49:28 ]
- くだらない質問で申し訳ないのだけど、どなたか教えてください
クラスのコンストラクタで関数名の後ろにつけている初期化みたいなものの意味を教えてください hoge::test() : a(0),b(0),c(0) { ... } この場合だとa=0,b=0,c=0? だとしたらなぜ...のところに書かないのですか?
- 68 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:07:50 ]
- test
- 69 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:11:10 ]
- test()じゃエラー出ると思う
hoge::hoge() : a(0),b(0),c(0) { ... } のことだよね aが変数だと問題ない?けど aがクラスの場合、aのコンストラクタに0という引数渡すということ。 class a{ public: a(int value); }; みたいなクラスの場合、aのコンストラクタに数値渡さないと作成できないし
- 70 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:29:44 ]
- 変数とクラス名が同じだとエラー出るや
class A{ public: A(int value); }; class hoge { A a; public: hoge() : a(0) { ... } }; ってこと この場合 ...の所に a = 0; って書けない
- 71 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 08:54:36 ]
- >>67
前者は初期化で、後者は何らかの初期化、または未初期化で構築の後、代入だな。 どちらでも良い場合はあるけど、意味は明確に違う。 例えばconstが絡んだ場合とか、 class hoge{ const int a; //constなので代入できない。 }; >>69のようにメンバの構築に引数が必要な場合とか。 未初期化な変数を嫌ったり、デフォルトコンストラクタの後に代入するような 効率の悪さを嫌ったり、色々あるからできるだけ初期化を使う。
- 72 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:11:47 ]
- CとC++の違いを徹底解説!みたいな本に
Class::Method():field(0),field1(0) { } なんて書いてあってさ、 何だよコンパイラバグってんじゃねーか!とか思ったころがあった
- 73 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:39:23 ]
- >>72 本の名前晒しといてくれ。
- 74 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:40:42 ]
- ていうかさ、constメンバや参照メンバもそうだけど
基底クラスの初期化も、この形式じゃないと出来ないよ。 もちろん、引数なしのデフォルトコンストラクタでの初期化は可能だけど。
- 75 名前:72 mailto:sage [2008/03/17(月) 11:55:05 ]
- 「オブジェクト指向言語C++入門 Cとの違いを徹底追求」
これかな。 やっぱり古いのもあってか、<string.h>とか、 namespace、例外の話はまったくなかった。 それ意外と、多少の誤植を除けば、解り安くもなければ解りづらくもない中立的な本だった。 まぁ、今となっては読むべき本じゃないわな
- 76 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:02:50 ]
- 低レベルな質問は初心者スレでやれ
- 77 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:16:38 ]
- >>76
おまえが、↓に行け C++上級者が集まるスレ pc11.2ch.net/test/read.cgi/tech/1095113801/
- 78 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 16:49:26 ]
- 関数の戻り先アドレスがバッファオーバーランで壊されているようなんですが、どこで壊されているのかが分かりません。
a(){ b(); } b(){ // ログに戻り先アドレスを記録 /* 処理1 */ // ログに戻り先アドレスを記録 /* 処理2 */ // ログに戻り先アドレスを記録 return; } あたりをつけるために、上のように処理の区切りで関数の戻り先アドレスをログにはき出そうと思うんですが、 戻り先アドレスをどのように参照していいかが分かりません。 もし分かりましたら、参照方法を教えてください。 よろしくお願いします。
- 79 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:02:46 ]
- 環境に依存します
- 80 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:17:10 ]
- >>78
そこまで推測できているならデバッガでスタックにトリガ張ればすぐだろうし、 そうでなくてもコンパイラにスタックのチェックをするオプションがあったりしないか? そもそもバッファオーバフローだと判っているなら関数内のポインタを全部洗えばいいだけじゃん。 # 巨大関数だったらしらねw
- 81 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:27:32 ]
- >>79
失礼しました。 Windows2000 VC++6です。 >>80 それが、1ヶ月に1度位しか発生しないエラーなのでトレースが困難なんです。 各所にログを埋め込み、関数から戻ってこないのは確認できたので、戻り先アドレスが壊されているらしいと推測したんです。 次はどこで壊されるかをログに記録し、また1ヶ月待ってみようと思いましてw
- 82 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:30:16 ]
- espでも記録しておくとか
- 83 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 17:46:56 ]
- >>81
>79の時点でスレ違いだと気付こう。 >そうでなくてもコンパイラにスタックのチェックをするオプションがあったりしないか?
- 84 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 18:21:17 ]
- >>83
申し訳ありませんでした。 色々なアドバイスありがとうございました。
- 85 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:45:50 ]
- const T &なメンバをもつクラスを作ったんだが、
ひょっとして、コピーする手段がない?
- 86 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:51:54 ]
- クラス初期化にしかconst T &は初期化できないから
まぁなんというか頑張れ
- 87 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:03:17 ]
- コピーコンストラクタならおkだが、operator=はダメだろうな
- 88 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:47:28 ]
- const_ca
- 89 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:27:05 ]
- なんで&があるん?
*だけじゃ駄目なん?
- 90 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:01:24 ]
- 駄目です
- 91 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:23:09 ]
- なんで
- 92 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:24:56 ]
- インラインアセンブラ使えばコピーできないことはないだろうが
当然おすすめはしない。
- 93 名前:デフォルトの名無しさん [2008/03/18(火) 01:32:09 ]
- 関数gがコンパイルエラーになります。なぜですか?不可解です。
class X { protected: int val; }; class Y : public X { public: void f(Y* p) { p->val = 0; } // OK void g(X* p) { p->val = 0; } // エラー };
- 94 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:53:29 ]
- X::valはYから見ればprivate
Y::X::valはYから見ればpublic
- 95 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:55:26 ]
- あ、いや、privateというべきじゃなくprotectedでいいのかな。どっちだろ。
いずれにせよYからX::valは触れない。Y::X::valなら触れる。
- 96 名前:93 mailto:sage [2008/03/18(火) 02:05:40 ]
- >>95
やっぱりそうですか。なんとなく奇妙な言語仕様に思えるのですが。。。
- 97 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:21:17 ]
- じゃなぜこういう風に難解なルールになっているか逆に考えてみればわかる。
class Y2 : public X { void f(Y* p) { p->val = 0; } }; というXを継承した別のクラスを作ってみよう。YとY2は別のクラスなのでY2から Yのprotected属性のメンバ変数が変更出来てはまずいのに、もしこのような ルールがなかったら上の例で可能になってしまう。 モジュールの隠蔽が破られないように特別なルールが作られているわけだ。
- 98 名前:93 mailto:sage [2008/03/18(火) 02:33:25 ]
- なるほど。なんとなくですが、分かりました。
- 99 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 07:13:26 ]
- fseekgでstr.length()分を戻したいのですけど、
単にマイナスをつけて、-str.length()とするとイミフな数値しか出ません。 何でうまくいかないんでしょうか?
- 100 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 07:39:13 ]
- 事故解決しました。 length()が返すのはsize_typeで、
size_typeはsize_tのunsigned intみたいだからですね。
|

|