1 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:08 ] エスケープシーケンスやWin32APIなどの環境依存な物でもOK。 ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.40【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1184717430/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
263 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:12:15 ] ソースを窓から放り投げるを開始するには、まず窓を開けます。
264 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:12:43 ] バッファオーバーフローであってスタックオーバーフローとは(ry
265 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:21:55 ] なぜこれがコンパイルエラーになるのですか? class A { public: void hoge(int i) { MessageBox(NULL, _T("A"), _T("hoge(int)"), 0);} virtual void hoge() = 0; }; class B : public A { public: void hoge() { MessageBox(NULL, _T("B"), _T("hoge()"), 0); } }; int _tmain(int argc, TCHAR **argv) { B b; b.hoge(1); // コンパイルエラー C2660 }
266 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:24:09 ] なんでそんなこともわからないのですか?
267 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:29:50 ] >>266 まぁそう言わんと。 >>265 EffectiveC++を読むことをお勧めしておきます。
268 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 13:47:53 ] >>266 初心者だからです。例えば、以下のJavaのソースはコンパイルが通るので、C++でも同様のことが可能かを考えています。 public class Test1 { public static void main(String[] args) { B b = new B(); b.hoge(1); } } abstract class A { public void hoge(int i) {System.out.println("A : hoge(int)");} public abstract void hoge(); } class B extends A { public void hoge() {System.out.println("B : hoge()");} } >>267 このあたりですか? ttp://www002.upp.so-net.ne.jp/ys_oota/effec/chapter6.htm#36kou 265のclass Aのhoge(int)はhogeImplのようにするこで解決できました。ありがとうございます。
269 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 14:09:57 ] >>265 ,268 hoge という名前の関数は B に 1 個あるので、それ以上辿って A まで探しには行かない で、見つかった hoge() は引数が一致しないのでエラー C++ と Java が一緒だと思ってるのが間違い
270 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 14:12:39 ] >>269 >hoge という名前の関数は B に 1 個あるので、それ以上辿って A まで探しには行かない なるほど。すっきりしました。ありがとうございます。
271 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:26:39 ] wavファイルの再生について質問があります。 PlaySoundを使う方法は簡単にできたのですが、wavファイルを実行ファイルに組み込むことはできるのでしょうか? できるなら、方法や資料を教えて頂けませんか? 宜しくお願いします。
272 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:44:38 ] とりあえずC/C++とは関係ない
273 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:46:19 ] 実行ファイルの種類による
274 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 16:47:42 ] PlaySound リソース でぐぐれば?
275 名前:271 mailto:sage [2007/08/14(火) 17:15:30 ] PlaySoundでできるとは思っていませんでした。 本当に助かりました。ありがとうございます。
276 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 19:59:40 ] 関数テンプレートの特殊化ってできないんですか? もしできないのなら、いずれ出来るようになる見込はありますか? template <typename T, typename U> void func(T&) {} template <typename T> void func<T,int>(T& u) {} error : partial specialization `Func<T, int>' of function template
277 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 20:24:53 ] >>268 そんなサイトあったのか、本買っちゃったよ
278 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 20:34:59 ] >>276 テンプレートパラメータの制限は関数とクラスで微妙に違う。 ただ、パラメータを常に指定するなら↓で同じことができるはず。 template <typename T, typename U> class func_object { explicit func_object(T&) { ... } };: template <typename T> class func<T, int> { explicit func_object(T& u) { ... } }; 使い方 func_object<A,B>(x); func_object<C,int>(y);
279 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 20:44:54 ] >>277 そのサイトはヒント程度だぞ。何やら勘違いに近い記述も見られるし、本は読むべき。
280 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 20:56:11 ] >>276 関数テンプレートの場合、完全な特殊化はできるが部分特殊化は出来ない。 代わりに関数オーバーロードが使える。
281 名前:276 mailto:sage [2007/08/14(火) 21:48:52 ] やっぱ無理なんすか テンプレート引数を汎用関数のtraitsとして利用したかったのですが… 変数の型を態々書くくらいなら関数オブジェクトとして作る方が良さそうですね
282 名前:261 mailto:sage [2007/08/14(火) 23:00:51 ] >>264 え?スタックオーバーフローなんて一言も言ってませんがなにか? ~~~~~~
283 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 03:27:58 ] >>282 コレは他人が装ってる釣りか? ちょっと釣られて見ますよ
284 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 04:00:47 ] 演算子の優先順位についての注意。インクリメント(++)/デクリメント(-- --)演算子と間接参照演算子(*) の優先順位は、間接参照の方が低い。だから、 while(1){ sub( *++p ); } というコードは頻出するが、単独の文 *++p; は間接参照の文が無意味である。(ポインタpをインクリメントした後で、ポインタが示す値を参照し、値を捨てる) って言う文があるのですが、 「単独の文 *++p; は間接参照の文が無意味である。」 ってどう意味なのでしょうか? 実例を挙げていただけないでしょうか。
285 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 04:12:51 ] >>284 間接参照演算子「*」 間接参照はポインタの先を「*」で参照すること。 int main(){ int a=10; int *p=&a; *p; /* <- この文意味ないべ? */ return 0; }
286 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 05:07:32 ] ああ、そういう意味だったんですか。 分かりました。 自分、日本語読む力が無いなぁ。
287 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 05:31:19 ] >>284 これおかしいな。 ここで例としてあげるべきなのは *p++ であって *++p ではない。 そもそも * と 前置 ++/-- とは優先順位が同じだ。
288 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 07:12:56 ] >>284 内容がひどいのでさらしておこう。 www.nurs.or.jp/~sug/soft/tora/tora6.htm
289 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:09:10 ] >sub( *++p ); >というコードは頻出するが こらこら、副作用があるコードを関数呼び出しで書いちゃ遺憾。 もしこのサイトにあるように頻出するとしたら、よっぽど腐った環境だ。 つーか、このサイト管理者、頭大丈夫か? www.nurs.or.jp/~sug/soft/index.htm
290 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:21:09 ] 別に書いていいだろう。 未定義動作でもあるまいし。 コーディングスタイルの話としても、 宗教戦争になる程度のこうじゃないといけないとは言えない内容だな。
291 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:29:14 ] >>290 その「sub()がマクロだったら」と考えてみてくれ。 いつ仕様変更でそのようなことになっても大丈夫なように副作用を発生させないのは常識だ。
292 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:35:04 ] それだったら*++pではない場合にもいえてしまうんじゃないの? マクロってなんなのかしらないけど
293 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:43:51 ] なんだ、ただのもの知らずか。たとえばこんなの。 #define sub(x) (x < 0 ? -x : x)
294 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:44:08 ] >>289 >こらこら、副作用があるコードを関数呼び出しで書いちゃ遺憾。 どいう意味?
295 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:56:22 ] >>293 なるほど、マクロって絶対値ってことか
296 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:58:23 ] そうだよ。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
297 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:11:47 ] >>296 いや、違うでしょ?
298 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:12:45 ] >>297 そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
299 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:14:25 ] 初心者歓迎とかスレタイにあるのに何やってるの
300 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:21:19 ] >>299 そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
301 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:27:40 ] 恥ずかしいからってそんな連投しなくてもいいのに
302 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:30:09 ] あんああんあんああんあん
303 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:30:30 ] >>301 そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
304 名前:292 mailto:sage [2007/08/15(水) 09:35:28 ] >>300 ,>>303 あなたの相手は僕でしょ?
305 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:36:37 ] >>304 そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで
306 名前:292 mailto:sage [2007/08/15(水) 09:38:05 ] マクロも知らなかった初心者に指摘されたのが悔しかったの? プライドを傷つけてごめんね
307 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:42:16 ] マクロも知らない初心者の来る所じゃないんだ。 どれだけそいつに時間とレスを割く必要があるか分かるだろう? そんなレベルの低い奴が来ると釣りかと思う。
308 名前:292 mailto:sage [2007/08/15(水) 09:45:23 ] >>307 マクロ知らないとは書き添えたけど質問したわけではありません あなたの勇み足では?
309 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:49:39 ] >>306 の言ってる指摘ってひょっとするとコレ? >それだったら*++pではない場合にもいえてしまうんじゃないの? いくらなんでもマジとは思えん(だから>>293 もスルーしたんだろう)。
310 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:50:25 ] >>308 みんな馬鹿で、お前だけが正しいことを言ってる。 誰もお前の頭の良さについていけなくて、悔しさのあまり暴れてるだけなんだよ。 だからママの所に行っておいで。
311 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:52:13 ] >>307 >どれだけそいつに時間とレスを割く必要があるか分かるだろう? って >そうだね。でもここは君の居る所じゃないんだ。そろそろママの所に行っておいで の事かwアホじゃね?
312 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:53:52 ] >>311 日本語でおk
313 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:53:59 ] >>311 アホですね
314 名前:292 mailto:sage [2007/08/15(水) 09:55:13 ] >>309 >>293 のこれだけのレスをみれば、意図的にスルーしているとはとても…
315 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:55:59 ] >>314 その辺が低脳。全て293のレスだと思ってやがる。
316 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:57:26 ] >>315 見苦しい言い訳
317 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:57:57 ] >>315 あああなたでしたかごめんなさいね
318 名前:307 mailto:sage [2007/08/15(水) 09:58:34 ] どうせ俺の事も>>293 だと思って勇み足で回答したとでも言いたいんだろう? マクロも知らない初心者の来る所じゃないんだと思っている奴が、 わざわざマクロも知らない初心者に答えるわけがないだろう。
319 名前:292 mailto:sage [2007/08/15(水) 09:58:49 ] >>317 は僕です しっかり名乗ります!
320 名前:292 mailto:sage [2007/08/15(水) 10:00:03 ] >>318 マクロくらいわかるよw フィーリングでね
321 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:00:14 ] どう見ても292の方が見苦しい言い訳。 バカなんだからバカにされたくらいでレス繰り返さなくてもいいのに
322 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:01:24 ] >>320 フィーリングで分かるなら空気くらい読めるだろ?
323 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:02:59 ] >>295 はうまい荒らしだったな
324 名前:292 mailto:sage [2007/08/15(水) 10:03:36 ] あ、ずっと安価間違ってた >>291 さんでした
325 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:03:55 ] >>318 初心者に答えるわけがない なんてレスの無駄だから偉そうに宣言しなくてもいいよw 答えないんじゃなくて答えられないんだろ
326 名前:309 mailto:sage [2007/08/15(水) 10:16:16 ] 結局>>306 の言ってる指摘ってのはコレな訳? >それだったら*++pではない場合にもいえてしまうんじゃないの?
327 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:18:32 ] >>326 かもしれないけど、なにしろ何がどう「いえてしまう」のか まるでわからん文章だからなぁ。
328 名前:309 mailto:sage [2007/08/15(水) 10:19:46 ] >>326 意味わからんよなー
329 名前:309 mailto:sage [2007/08/15(水) 10:23:07 ] >>326 多分、>>289 から続く >副作用があるコードを関数呼び出しで書いちゃ遺憾。 について言ってるんだと思う。
330 名前:329=309 mailto:sage [2007/08/15(水) 10:25:08 ] アンカーミス。>>327 ね。 後、>>328 誰だw
331 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:26:15 ] マクロに放り込むんだり引数の評価順に左右されるような場合はマズいけど 別にこのケースは何の問題も無いわな スタイルとして自分がそう心がけているというだけの話なら ご立派ですねで終わりだが 実にどうでもいい
332 名前:292 mailto:sage [2007/08/15(水) 10:26:21 ] 適切な日本語ではなかったけど、脳の衰え始めている先輩方には難しかったかな? むしろ適切であったとしてもまともにこたえる気はなさそうにおもえる
333 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:27:23 ] 2chで煽るのだけが生き甲斐の厨房に 煽り返す厨房か
334 名前:309 mailto:sage [2007/08/15(水) 10:44:58 ] >>331 今は問題無いからいいって考えはどうかと思うぞ。後々の仕様変更に耐えられるコードを書く方がいい。 もっとも今回は副作用で問題が出るマクロにするのが一番悪いが。 >>332 >まともにこたえる気はなさそうにおもえる 何でそう思ったか知らんが結局質問は「副作用があるコードを関数呼び出しで書いちゃ遺憾って言ってるけど、それって*++pではない場合にもいえなくない?」って事か?
335 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:49:04 ] >>331 話題がループするが、sub()がマクロなら問題だからするべきではないという話だろ。 件のサイトではsub()が何か提示されていないのだから、問題がないとは言えない。
336 名前:292 mailto:sage [2007/08/15(水) 10:54:44 ] 皆さんの話がかみ合ってないかもしれないので整理しましょう *++pってなんですか?
337 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:00:13 ] >>335 マクロにsub()なんて名前をつけてるのならそっちのが問題じゃね マクロは大文字で目立たせるのが基本だし subはサブルーチンのサブだろう ま、標準ライブラリの一部の関数はマクロで実装することも許されているけどな
338 名前:デフォルトの名無しさん [2007/08/15(水) 11:13:27 ] >>336 死ね
339 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:32:32 ] すみません、教えてください。 C++でコンテナからイテレータを取り出すときに、iterator とconst_iterator とを 区別するのはどうやっているんでしょうか? std::vector<>::iterator begin(); と std::vector<>::const_iterator begin() cons; のように、同じ関数でiterator を返したりconst_iterator を返したりしたいんですが、上手くいかない……
340 名前:339 mailto:sage [2007/08/15(水) 11:40:56 ] ごめん、忘れてください。超間抜けなこと聞いた。 暑くて頭がボケてたみたい……
341 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:42:17 ] while(1) sub( *++p ); で意味をなす単項subってどんなマクロ(関数)なんだろ
342 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:46:15 ] >>337 <*grep*>:319:crt/src/minmax.h:21:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:333:crt/src/stdlib.h:166:#define __max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:340:crt/src/stdlib.h:472:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:342:crt/src/v2tov3.h:71:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:387:include/minmax.h:21:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:399:include/stdlib.h:146:#define __max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:406:include/stdlib.h:424:#define max(a,b) (((a) > (b)) ? (a) : (b)) <*grep*>:603:PlatformSDK/Include/WinDef.h:177:#define max(a,b) (((a) > (b)) ? (a) : (b)) なるほど、標準ライブラリにないmax()系がこんなにあるとはM$は問題だらけだね。
343 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:48:41 ] >>341 きっとこんなのだよ。 #define sub(x) putchar(x)
344 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:04:17 ] >>342 そうだな。実際最悪だろ。
345 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:06:28 ] マクロは名前空間にもくるめないしなあ
346 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:08:02 ] >>342 実際、それが問題になることがあって、 min,maxを定義しないようにするための NOMINMAX というマクロが存在する
347 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:08:48 ] >>342 実際そのマクロの存在の為に、VC6の<algorithm>にはstd::max, std::minがない。 これはC++の移植性において、由々しき問題である。
348 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:10:11 ] まあVC6はそれ以前に色々ダメすぎだけどな 今となっては
349 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:10:29 ] >>342 Effective C++でも第1項でいきなり問題視してるじゃん。
350 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:41:16 ] Effective C++(笑)
351 名前:デフォルトの名無しさん [2007/08/15(水) 12:50:00 ] 質問です。 Windows Vista買ったら、Borland C++5.01のダイアログエデイタが正常に動作しません。 Xpマシンもありますがどうすればいいでしょうか? 1.プログラムはXpマシンで作成してコピーする。 2.ダイアログの部分だけXpマシンで作成してコピーする。 3.Vistaで動作する開発環境を買って移植する。
352 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:57:03 ] マルチ死ね
353 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:18:31 ] >>349 ttp://kamaitachi.blogdns.net/cgi-bin/izna/manage/img0351.jpg これか。別にそんなに問題視はしてないように見えるが。
354 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:21:04 ] 問題視しまくりじゃないか。
355 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:47:21 ] ここで言う「マクロと関数に名前の区別」というような点は問題視してない
356 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:56:09 ] 確かに>337が指摘しているような「大文字ではない」ことについてはなんら言及されていないね。
357 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:01:51 ] >>349 は>>342 宛なんだから、「ここで言う」はmaxマクロに対応させないと。
358 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:14:41 ] なるほど。確かにそっちはそうだな。
359 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 18:25:13 ] 今北産業。 >>284 > 「単独の文 > *++p; > は間接参照の文が無意味である。」 > ってどう意味なのでしょうか? > 実例を挙げていただけないでしょうか。 無意味でない例なら出せる。 volatile int* p; とか宣言されていて、p が実はメモリマップド I/O で読むだけでも意味がある場合がある。 >>293 > #define sub(x) (x < 0 ? -x : x) sub(a+b) とかでおかしくなるから >>342 みたいに () 使おう。
360 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 18:29:58 ] >>359 p が volatile int* であっても *++p; と書いて、pがdereferenceされることは保証されてないだろ。
361 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 19:14:24 ] >>360 すまん、よくわからんのだが「p が deference されることは保証されない」のは、特に *++p; に言える、と言ってる?それとも、 *p; でも同様だと言ってる?
362 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 19:24:20 ] >>360 とりあえず volatile な *p; については c0x.coding-guidelines.com/6.7.3.html の 1488-1489 辺りで「最適化で削除しちゃいかんよ」ってな事になってるが。 もっといえば volatile int x; x; でも一緒。
363 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 20:19:08 ] 更にいうと const volatile int x; x; でも処理系は x の読み出しを削除してはいけないし、 x の値を何かに使う場合複数回の読み出しで同じ値だと仮定してもいけない。 この場合の const は「書き込めません」っていう意味だ。