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
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
184 名前:デフォルトの名無しさん [2008/01/19(土) 10:09:32 ] 勉強で簡易Stringクラスを作ろうとしてます。 ところがコンストラクタだけの段階で、実行時に アクセス違反の例外で死にます。なんで? #include <cstring> class String { int len; char* s; public: String (const char* ch_ini) { len = (int) strlen(ch_ini); strcpy(s,ch_ini); } }; 実行は String k1("kkkkk1"); だけ(作っただけのつもり)。 これで死にまする。
185 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:12:37 ] 土曜の朝から釣りか char *sの指してる領域はどこなんだよ?
186 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:13:18 ] >>184 そのコードじゃstrcpyで死ぬわ。 char* sはどこを指してるのかね?
187 名前:デフォルトの名無しさん [2008/01/19(土) 10:17:02 ] unsigned long型 = 256 * unsigned char型の計算をしています。 unsigned char型の変数に入る値はランダムで0〜150くらいの値が入るのですが、大体100以上の値が入ったときに4,294,967,295などの変な値になります。 なんで正しい値が入らないのでしょうか?
188 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:27:09 ] わかりました。あなたは世界を革命するしかないでしょう。
189 名前:184 [2008/01/19(土) 10:28:34 ] どこも指してない!? どーすればよいのでしょうか。
190 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:29:29 ] 古っ
191 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:29:53 ] >>189 その辺はポインタの基本中の基本なんだから、本でも読んで勉強してくれ。
192 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:39:07 ] >>187 本当に unsigned char なのかね? 符号つきになってないか?
193 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:44:12 ] >>189 正直自作クラスとか以前の問題。 文字列やポインタなどの基本から学び直してからのほうが良い。
194 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:46:26 ] >>187 ソースを晒すんだ
195 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:53:04 ] 産業スパイか
196 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 10:57:22 ] (int)4294967295u == -1
197 名前:187 [2008/01/19(土) 11:32:13 ] 処理の部分だけ抜き出して見ました。 traは0〜255が入ります。 unsigned char tra_undf = 0; unsigned char tra_buff = 0; static unsigned long ValuePuls = 0; void main (void){ while(1){ if (tedgf_tracr == 1) {tra_buff = tra; flag_edge = 1; tedgf_tracr = 0;} if(tundf_tracr == 1) {tra_undf++; tundf_tracr = 0;} if(flag_edge == 1) {Sort(); tra_undf = 0; flag_edge = 0;} : }} void Sort(void){ValuePulse = ((256 * tra_undf) + (255 - tra_buff));} 結果は tra_undf=189のときにValuePulse=4294950301 tra_undf=234のときにValuePulse=4294961868 念のため+ (255 - tra_buff)の部分を消して見ましたが tra_undf=223のときにValuePulse=4294958848 でした。
198 名前:デフォルトの名無しさん [2008/01/19(土) 12:01:07 ] >>184 何の本読んで勉強してんだ さらしちまえ
199 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 12:49:14 ] >>197 コンパイラは?
200 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 12:56:10 ] int と size_t はどういう違い、あるいは、どのように使い分ければよいのでしょうか?
201 名前:デフォルトの名無しさん [2008/01/19(土) 13:02:40 ] >>197 ソースを晒すんだ
202 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 13:09:31 ] >>197 >念のため+ (255 - tra_buff)の部分を消して見ましたが >tra_undf=223のときにValuePulse=4294958848でした。 intが16bitの環境か? 256がintなのでtra_undfがintに格上げされ乗算され0xdf00になるが これはintでは負数になる。 でunsignd longに代入されると符号拡張され0xffffdf00になる。 これは符号無しだと4294958848になって一致する。
203 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 13:52:20 ] LSI_C 試食版の悪寒
204 名前:187 [2008/01/19(土) 13:57:43 ] >>202 ありがとうございます。 NC30というコンパイラを使っているのですが、調べたらintは16bitと書いてありました。 回避方法は256の前に(unsigned)を付けるんで大丈夫ですか?
205 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:02:10 ] 256u でおk。
206 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:03:11 ] (unsigned long) にしないと一緒じゃね?
207 名前:206 mailto:sage [2008/01/19(土) 14:03:49 ] そんなことないか、(unsigned)でもいいかも
208 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:06:30 ] 256 * unsigned char 値 なら一応 16 ビットに収まるしな。 別に 256lu にしてもいいとは思うが。
209 名前:187 [2008/01/19(土) 14:15:25 ] 助かりました! 本当にありがとうございます。
210 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:20:37 ] まだはじめたばかりなんですが、short int とかlong、double longなどの意味が分かりません。 無視して進んでも大丈夫ですか? どんな場合に使うのかなどが把握できていない状況です。
211 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:26:14 ] 必要になれば使うし、必要にならなければ使わない。 それだけの話。
212 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:26:16 ] ビールをグラスに入れるか、ジョッキに入れるか、ピッチャーに入れるかの違いだ。
213 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:31:33 ] SFCで遊ぶか、PSで遊ぶか、PS2で遊ぶかの違いくらいか?
214 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:35:10 ] 現在「猫でもわかるC言語」で勉強しています。 #include <stdio.h> #include <stdlib.h> int main(int argc, char *argv[]) { double pai=3.14159265358979; int mon=2; float flt=1.2f; printf("%5.2hf\n",flt); ←ここだけtypeのプレフィックスの「h」を使っているのか分からないです。 printf("%-5.2f\n",flt); printf("%05.2f\n",flt); printf("%+08.2f\n",flt); printf("%-08.2f\n",flt); printf("%d\n",mon=3); printf("%e\n",pai); printf("%08.2f\n",pai); printf("%05d\n",mon); printf("円周率は%fです\n",pai); printf("円周率は%1fです\n",pai); printf("もう少し詳しい値は%10.8lfです\n",pai); printf("もう少し詳しい値は%15.13lfです\n",pai);←ここの2行も「l」が使われていますが何のために使用しているのか分かりません。 printf("もう少し詳しい値は%20.18fです\n",pai) system("PAUSE"); return 0; } 見難いと思いますが、現在このような感じで悩んでます。 質問の内容がおかしかったらすみません。
215 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:44:13 ] hとl(長さ修飾子)そのものがわからないのか それともどうしてそのタイミングで修飾子を使っているのがわからないのか 前者ならprintfでぐぐると一番上に出てくるけど
216 名前:デフォルトの名無しさん mailto:sage [2008/01/19(土) 14:45:01 ] >>214 www.linux.or.jp/JM/html/LDP_man-pages/man3/snprintf.3.html 長さ修飾子 h 整数変換に対応する引き数が short int か unsigned short int で、 n 変換に対応する引き数が short int へのポインタであることを示す。 そこで h はおかしくね?