1 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 15:14:51 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.46【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1198755167/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
83 名前:コンパイルできた [2008/01/17(木) 15:48:54 ] <82の続きです> ちなみにstring2int()は以下のように定義しました。 class string2int : public unary_function<string,int> { public: unary_function<string,int>::result_type operator() (unary_function<string,int>::argument_type str) { if (str == "-")return 0; else return static_cast<int>(atoi(str.c_str())); } }; いやー、すげえ感謝感謝。今回答えてくれた方々には昼飯一回おごってもいいくらいス。
84 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 15:57:07 ] 昼飯一回程度の感謝
85 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:04:00 ] >>83 もうちょっと本買って読んだ方がいいな
86 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 16:04:23 ] 名無しの書き込みから個人を特定して昼飯をおごる程の感謝 えらく大変だな
87 名前:76 mailto:sage [2008/01/17(木) 17:44:29 ] >>83 昼飯はいいから俺がニート脱出できるように神様にお願いしといてください。
88 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:00:30 ] #include <iostream> #include <cstdio> char ch[10]; int main() { while ((cin.getlie(char, 10)) != EOF) { } } これをコンパイルしようとするとwhileの行でエラーが出るのですが、 何がいけないのでしょうか??
89 名前:88 mailto:sage [2008/01/17(木) 20:02:08 ] すいませんwhileの行のcharはchの間違いです。
90 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:03:38 ] >>88 余分なものが付いているk 「ar」 a
91 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:04:32 ] getlie
92 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:04:36 ] getlie ではなくて getline な。 分かってるとは思うけど
93 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:04:38 ] >>88 std:: n が足りない
94 名前:88 mailto:sage [2008/01/17(木) 20:12:05 ] 回答くださった方ありがとうございます。 すいません色々抜けていました。。orz 正しくはこれです。 #include <iostream> #include <cstdio> using namespace std; char ch[10]; int main() { while ((cin.getline(ch, 8)) != EOF) { cout << "test"; } } これでもコンパイルできないのです。 whileの行でエラー出ます。
95 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:14:35 ] >>94 != EOFこれが不要。 質問するときはエラーの内容も書いてくれ。
96 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:14:54 ] >>94 #include <iostream> char ch[10]; int main() { while (std::cin.getline(ch, 8)) { std::cout << "test"; } }
97 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 20:35:00 ] #include <iostream> int main() { char ch[10]; while (std::cin.getline(ch, sizeof ch)) { std::cout << "test"; } }
98 名前:デフォルトの名無しさん [2008/01/17(木) 21:21:43 ] Fedora6 gcc でファイルの更新を検知するプログラムを作りたいのですが、 更新までブロックする関数を教えてください。 if (ファイルの更新までブロック) { //更新された read(); ... } みたいなカンジです。 ちなみにtailのソースを見てみたのですが、 1秒毎にファイルが更新されたかチェックして処理をしているようです。 何秒毎にチェックするのではなく、更新までブロックできる関数がわかればいいです。 よろしくお願いします。
99 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:29:34 ] なんでそんなものが存在するという前提で物事を進めようとするの?
100 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:38:03 ] てゆーかチェックせずに、更新されると発見してほしいのかよwwwwwwwww
101 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:42:18 ] Windows だとディレクトリの更新を検知してシグナル送ってくれる FindFirstChangeNotification/FindNextChangeNotification って API があるから 他の OS でもそういう API があるんじゃないかと思う気持ちも分からんでも無い。
102 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 21:53:22 ] >>98 Linuxなら可能。 dnotify inotify といったキーワードで調べてみて。
103 名前:デフォルトの名無しさん [2008/01/17(木) 22:30:53 ] プログラムって教科で分けると数学ということですか?
104 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:35:11 ] >>103 いや、国語だろ
105 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:38:31 ] 普通に、技術家庭科。 実際、技術家庭科の時間にVBプログラミングやらされてたし。
106 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:39:31 ] 情報だろ
107 名前:デフォルトの名無しさん [2008/01/17(木) 22:45:09 ] 統一された見解が無いということですか? 哲学っぽいですね。
108 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:47:06 ] 分野でいうと情報処理だろうな。 つか、いちいちageんなって。
109 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 22:51:45 ] >>99 Winだと tp://www.google.co.jp/search?hl=ja&q=ReadDirectoryChangesW&lr= みたいな感じで、存在するんだよ。だから、98もそこから、Linuxにも存在すると期待してるんじゃないかな…… ちなみに、俺は知らん。
110 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:01:49 ] 高専だと、情報基礎以外に、制御とか計算機科学、電子、通信、ソフ技、ハード技、プロ技 至る所でプログラミング漬けだったけど。時代遅れのw
111 名前:デフォルトの名無しさん [2008/01/17(木) 23:02:50 ] >>102 具体的にありがとうございます。 手詰まりだったので、大変助かりました。 ありがとうございました。 >>100 何が言いたいのか分かりません。
112 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:15:41 ] >>110 そういえば親戚に情報基礎の教科書見せてもらったら15年前と大差なくてワロタ
113 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:17:49 ] 15年前って言うと、数学の教科書の後ろの方に載ってる、 実際には授業で何にも使われない BASIC のことか?
114 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:20:48 ] 基礎は不滅です。
115 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:23:16 ] 流動的なものは情報Aなんかに任せとけば良いよ。
116 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:30:52 ] >>113 入力・出力・制御・演算・記憶 FFの応用回路・BASIC・CASL のあたり。
117 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:46:44 ] ああ、高専の教科書か。 それは・・・知らんから何とも言えん。
118 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:51:09 ] 情報関係の教科書書いてる教授がwinの基本操作とかCDの焼き方きいてくるからね〜(実話
119 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:52:34 ] VC++にtypeof()みたいのはないですか?
120 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:56:19 ] BOOST_TYPEOF
121 名前:デフォルトの名無しさん mailto:sage [2008/01/17(木) 23:56:28 ] 標準C++的にはtypeid演算子 あとMFCがなんか持っていた気がする。 C++/CLIなら当然.NET Frameworkのリフレクションが色々使える。
122 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:12:51 ] #define foreach(t, o, i) for(t::iterator (i)=(o).begin();(i)!=(o).end();++(i)) な感じのマクロの場合、それを使うと方を渡さなくて良くなりますか?
123 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:15:49 ] そんなマクロを作るな。 制御文をマクロ化すると 自分以外に読みづらいので 悪い作法だと言われている。
124 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:24:10 ] Cの文法で基本的な事かもしれないのですが、Linux のカーネルソースを読もうとして 挫折してしまったんですが、例えば struct hw_pci mr300_pci __initdata = { .nr_controllers = 1, .preinit = mr300_pci_preinit, .swizzle = pci_std_swizzle, .setup = ixp4xx_setup, .scan = ixp4xx_scan_bus, .map_irq = mr300_map_irq, }; のような struct 宣言が書いてありましたが、 .(dot)var = 値 のような記法って、そのメンバーの初期化という意味になるのでしょうか? 手元のCの文法書に見つからなかったのですが、この記述の説明文献ってありますかね?
125 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:25:09 ] C99 から導入された文法。 そのメンバの初期化という意味でおk。
126 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:26:17 ] C99 はここに簡単にまとめられてる。 seclan.dll.jp/c99d/
127 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:31:36 ] >>125-126 ありがとうございました。逝ってみます。
128 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:34:13 ] >>123 便利って書いてあるよ。 www.jah.ne.jp/~naoyuki/Writings/STL.html
129 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:41:39 ] >>122 BOOST_FOREACH
130 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 00:54:48 ] >>129 むり
131 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 01:05:40 ] 122はコンテナの型、BOOST_FOREACHは要素の型を渡す必要がある点では、どっちもどっち。
132 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 01:12:38 ] 長いのよ
133 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 01:41:49 ] 適当にマクロで短い名前を付ければいいだろ。
134 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 03:06:16 ] VC++2005、WinXPです。 チェックボックスつきのツリーコントロールを作りたいと考えています。 チェックボックスでは三つのチェック状態をあらわしたいと思っておりまして、 ちょうど、VCをカスタムインストールする時に出てくるチェック付きツリーコントロールのような物を考えております。 これを実現する簡単なAPIないし、クラスはないでしょうか?
135 名前:デフォルトの名無しさん [2008/01/18(金) 04:20:09 ] xcode環境でc++を開発している人はいますか? emacsよりもイイですか?
136 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 04:45:13 ] >>135 そもそもIDEとエディタを単純比較するのが間違ってる気がするよ! 気持ちは分かるけど・・・・・・
137 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 05:43:59 ] newでメモリを確保してdeleteをせずプログラムを終了した場合ってそのまま ずっとメモリ確保されたままになるの?
138 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 05:45:44 ] cout って何の略なんですか?
139 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 05:46:08 ] 大抵はOSが何とかしてくれる
140 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 05:46:38 ] >>138 console out
141 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 06:06:10 ] >>139 ありがとう 再起動するまでずっと無駄に領域とられたままかと思ってたけどOSがどうにかしてるのね
142 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 07:08:07 ] >>138 console output
143 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 07:08:37 ] 極めて古い OS だと分からんけどね。
144 名前:デフォルトの名無しさん [2008/01/18(金) 11:36:39 ] >>136 emacs が好きなんですが、 class-name.<Tab>とか押すと、method-nameが選択できたり、 method一覧がかんたんに見れたり,そういう環境が羨ましい。
145 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 11:49:43 ] VB6、.NET言語のインテリセンスに比べればどうということはない。
146 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 11:51:24 ] インテリセンスは正直凄いと思う。
147 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 11:54:04 ] VCのは御馬鹿
148 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:20:50 ] eclipseとかもVC#のインテリセンス真似してくれればいいのにな
149 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 12:26:53 ] 糞lipseは重くて嫌いだ。
150 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 16:57:49 ] 最近のVSはC#だけインテリセンスがよく効く C++はおざなりってか
151 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 17:35:44 ] C++は複雑すぎるからな
152 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 18:59:29 ] てゆーか昔から
153 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 19:04:38 ] プリプロセッサ,テンプレート,ポインタの 置き換え,マッチング,追跡の大変さを考えたら, 今の IntelliSense ってすげぇとおもうが.
154 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 19:06:52 ] VB.NETとC#はおなじじゃない?
155 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 19:10:49 ] MessageBoxの上にカーソルのせたら WMessageBoxWにマクロで置換されてると教えてくれるけど。 肝心の引数がプロトタイプが見えないとか。
156 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 19:11:35 ] MessageBoxW
157 名前:デフォルトの名無しさん [2008/01/18(金) 19:25:42 ] 確かに引数のプロトタイプが見えないのは面倒だね たいてい関数の末尾にA、W付ければ良いって話だけど
158 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:36:51 ] VS使ってるなら、「(」書いたときにプロトタイプ出て来ないっけ? まぁ書いてるときじゃなくて見てるだけのときは面倒かもだけど
159 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 22:40:28 ] >>134 お願いします。
160 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:19:55 ] public: template <class T> class templateA { protected: T value; public: 各種メソッド }; template <class T> class templateB { protected: T value; public: 各種メソッド } class child : templateA<templateB<type> >{ 追加メソッド } 以上のようなクラスを作成し、 子クラス内でthis->value.valueでテンプレートクラスB内の値にアクセスしようとしたのですが、protectedの要素にアクセスできないというエラーが出ます。 どこを直せばよいのか分かりません。 どなたかご教示下さい。 宜しくお願いします。
161 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:30:06 ] templateBのvalueをpublicにすれば良い childはtemplateBを継承してないんだからtemplateBのprotectedメンバにはアクセスできない
162 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:31:45 ] 安易にpublicにしていいのだろうか。
163 名前:デフォルトの名無しさん mailto:sage [2008/01/18(金) 23:47:24 ] なら安易にアクセスすんなよw
164 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:05:00 ] public にするくらいなら friend にするわ。 でも、設計をもうちょっと考える事をまず検討した方がいい気がする。
165 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:45:04 ] >>161-164 様、ありがとうございます。 それぞれのテンプレートクラスにgetメソッドを追加して、要素にアクセスできるようにしてみました。 あまり綺麗な方法とは思いませんが、ひとまずこれで妥協しておきます。 C++初学者なので、friend関数の存在は知っていますが、使った事がないので、こちらも少し勉強してみようと思います。 オブジェクト指向が少しずつ理解できるようになってきて、数ヶ月前に作ったクラスのリファインが楽しすぎて困ります。 お陰で研究が全然進まないYO...
166 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:47:56 ] おすすめ 設計見直し > get > friend > public おすすめしない って順かな。
167 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:51:39 ] friendもpublicも大差ない気がするけどな 研究とかならいっそstructでもいい気がする
168 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 00:57:23 ] 一応公開する相手が制限されてる分、public よりマシだとは思うが、 決しておすすめはできないという点では確かに似たようなもんだな。
169 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:01:32 ] >>166 getは○〜△というところでしょうか。 一応意図したものにはなったので、取りあえずこれで行ってみます。 >>167 この先数年使う可能性があるので、ある程度しっかりしたものが作っておきたかったのです。 最悪の場合、お上に献上しないといけないものなのでw リファイン前は各変数毎にgetメソッドとsetメソッドを用意していました。 これではあまりにも酷いと思いまして。 >>168 難しいですね。 自分の知識がついてきたら、またリファインすると思います。 そして無限ループへ…
170 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:08:37 ] 作る前に設計をよく練った方がよさそうな・・・ 設計に関する知識が無いならC++なんかやってないでそっちの勉強すべきだし
171 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:32:23 ] #include <stdio.h> class A{ public: virtual void func(){printf("A::func¥n");}; }; class B :public A{ private: virtual void func() {printf("B::func¥n");} }; int main (void) { A* b = new B; b->func(); //B::funcと出力される。privateなのにアクセスできる!? } 上記のコードについて、ご教授をお願いします。 gcc4.01で試したところコンパイルすることができました。 B::func()はprivateなのになぜコンパイルエラーにならないのでしょうか?
172 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:33:38 ] A::funcがpublicだから
173 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:53:13 ] >>171 class A の 仮想関数テーブルには void func(){printf("A::func\n");} の関数アドレスが配列0番に登録されている。 また、class B の 仮想関数テーブルには void func(){printf("B::func\n");} の関数アドレスが同じく配列0番に登録されている。 コンパイル時には静的な型であるAのfunc()が 調べられ、publicゆえにアクセスできることが 確認される。同時に仮想関数ゆえ、func()は 意味的には以下のようにコンパイルされる。 (b->vptr[0])(this); vptrは仮想関数テーブルへのポインタで、今の 場合、派生クラスBの仮想関数テーブルのアドレス が格納されている。仮想関数の呼び出しでは コンパイル時はあくまで静的な型でアクセス可能性 が決定されるのがポイント。 と思う。
174 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:56:50 ] >>171 こういうコードだと分かりやすいと思う。 B の実装なんて知ったこっちゃないのよ。 // a.h #include <stdio.h> class A{ public: virtual void func(){printf("A::func\n");}; }; // b.h #include "a.h" A* get_b(); // test1.cpp #include "a.h" int main (void) { A* a = get_b(); a->func(); } // b.cpp 略
175 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 01:57:24 ] 間違えた。こうだ。 // test1.cpp #include "b.h" int main (void) { A* a = get_b(); a->func(); }
176 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 02:04:01 ] 一般的なコンパイラの実装の仮想関数呼び出し メカニズムで理解しておいたほうがいいんじゃね? 静的な型でアクセス可能性が決まるというのが 真実だと思うが。
177 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 02:15:42 ] >>171-176 さん、ありがとうございました。 Final Draft IS に、そのまんまの答えがありました。 www.kuzbass.ru/docs/isocpp/access.html#class.access.virt >静的な型でアクセス可能性が決まるというのが >真実だと思うが。 そういうことになりますね。
178 名前:デフォルトの名無しさん [2008/01/19(土) 04:15:38 ] typedef{ int x,y; }data; ・・・ hogehoge(std::vector<data>dist); こんな使い方はできるんでしょうか? また、こんな使い方はトリッキーなんでしょうか?
179 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 04:22:37 ] >>178 vectorにユーザー型を入れれるのか? ということであれば、普通に使えます。 その書式はおかしいけどな
180 名前:デフォルトの名無しさん [2008/01/19(土) 04:33:56 ] >>178 structかclassつけーや
181 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 09:07:21 ] struct a { ... }; typedef t_a { ... } a; C++コード上で下の利点ってどういったものがありますか?
182 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 09:12:45 ] >>181 C でも使えるコードを書くのでなければ特に何の意味もない。
183 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 09:21:06 ] d