C++相談室 part32

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
テンプレートライブラリ(STL含む)に関する質問は
専用の別スレにお願いッス。

過去スレ、関連スレ、関連リンクなどは >>2-9 あたり
2デフォルトの名無しさん:04/06/26 16:51
3デフォルトの名無しさん:04/06/26 16:52
4デフォルトの名無しさん:04/06/26 16:53
■基本■
[C++ FAQ]
 http://www.parashift.com/c++-faq-lite/
 http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
  Cとその仕様を比較しながらの解説なので分かりやすい。
  ***** 質問の前に必ずこの二つに目を通してください *****

[禿 Stroustrup]
 http://www.research.att.com/~bs/
[C++ International Standard]
 http://www.kuzbass.ru/docs/isocpp/
 http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
 http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
 http://std.dkuug.dk/jtc1/sc22/wg21/

[C/C++ Users Journal]
 http://www.cuj.com/
[cppll (ML)]
 http://www.trickpalace.net/cppll/ (日本語)
5デフォルトの名無しさん:04/06/26 16:55
6デフォルトの名無しさん:04/06/26 16:56
関連スレは移動調べるのがマンドクセので何方かおながいします。
■関連スレ■
【C++】template 統合スレ -- Part4
http://pc5.2ch.net/test/read.cgi/tech/1083550483/
ぼるじょあがC/C++の宿題を片づけますYO! 25代目
http://pc5.2ch.net/test/read.cgi/tech/1087929711/
C/C++でのWindowsPrograming議論スレ(質問お断り)
http://pc5.2ch.net/test/read.cgi/tech/1049790146/
managed C++ やろうぜ!!
http://pc5.2ch.net/test/read.cgi/tech/1014486422/
ATL 相談室
http://pc5.2ch.net/test/read.cgi/tech/1029029882/
COM の世界を斬る!
http://pc5.2ch.net/test/read.cgi/tech/981823340/
■コンパイラスレ■
タダで最強!フリーC/C++コンパイラ
http://pc5.2ch.net/test/read.cgi/tech/1035882599/(html化待ち)
GCCについて part3
http://pc5.2ch.net/test/read.cgi/tech/1072484422/
タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/
タダで使えるBorland C++ Part3
http://pc5.2ch.net/test/read.cgi/tech/1054390397/
OpenWatcom C++
http://pc5.2ch.net/test/read.cgi/tech/1033433728/
"Code of the Nerds" Digital Mars C/C++
http://pc5.2ch.net/test/read.cgi/tech/1044210976/
■開発環境スレ■
★初心者にVisual C++を教えるスレ★ Part12
http://pc5.2ch.net/test/read.cgi/tech/1083585833/
■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/
C++Builder相談室 Part9
http://pc5.2ch.net/test/read.cgi/tech/1080541814/
Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/
Zcurry。
前擦れ>>995の続きが気になる…
>>1-11乙。では・・・・

STLつかうと一気に実行ファイルサイズが10倍に?!
誰か相手してやれよ
>>13ry
>>15
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。
17デフォルトの名無しさん:04/06/26 18:46
>>14
scanf使うなよ ぼけ
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいのでちゅか?
>>18
#include "stdafx.h"

後死ね。
>>19
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。
>>20

デジャブ…
v(^・^)v はどこに消えた
>>22
次スレでおれが復活させておくから
241:04/06/26 21:18
スマソ。すっかり忘れていた。この通り・・・_| ̄ ̄|〇
もうpart32か俺も歳くったなv(^・^)v
>>24
いやまぁ、そこまで深刻な問題じゃないし^_^;
27デフォルトの名無しさん:04/06/27 13:55
質問です。

Cだと
printf("key[%s] value[%s]\n",key,value);
C++だと
cout << "key[" << key << "] " << "value[" << value << "]" << endl;

なんかC++の方が書く量が多いのですが、これはしょうがないのですかね・・・。
なにかヒントがあったら教えてください。

>>27
書く量なんか問題じゃないだろ。
そんなに気になるなら、変数名は全部1文字にしたり、マクロ使いまくれ。
そして、そんなことはどうでもいいことだと悟れ。
>>27
少し短くした
cout << "key[" << key << "] value[" << value << "]" << endl;
>>28
いや、正直俺も書きづらいし、読みづらいと思うぞ。

>>27
boost::formatがいいと思う

ttp://www.kmonos.net/alang/boost/classes/format.html
何も疑問に思わないんだとしたら
>>28の頭は腐ってるな
3227:04/06/27 14:19
レスありがとうございます。
なるほどぉ。
double d = 123.456;
printf( "value=%4.2f", d);
なんてのはcoutでどう書けばいいのでしょう?
>>33
マニピュレータで検索

ただ、激しく面倒なので printf() 使った方が幸せな気がするが。
正直、coutって使えないんだ。。。orz
>>33
そのときの表示って、

value=123.46

ってなるかも。
37デフォルトの名無しさん:04/06/27 16:27
#include <string>
using namespace std;
string work="hoge"; // OK
char array[10];
strcpy(array,work.c_str()); // NG

上のコードで3行目のstrcpyで
error C2668: 'strcpy' : オーバーロード関数の呼び出しを解決することができません。(新機能 ; ヘルプを参照)
と怒られてしまいます。
本等を見てもこれで通るはずなのですが・・。
解決策があったら教えてください。

VC++6.0でサービスパック6です。
マルチか
39デフォルトの名無しさん:04/06/27 18:31
マルチって何法に抵触なんだ?
なんか直リンと似た議論に思えてきた

>>37
#include <string>
#include <cstring> //もしくは #include <string.h>
>>39
はぁ?
もう回答は出てるから、いらねぇってことだよ。
41デフォルトの名無しさん:04/06/27 18:36
>>40
各スレなりの回答はあっていいじゃん
42デフォルトの名無しさん:04/06/27 18:37
インタビューって各方面の専門家に聞いて回るの普通だろ
>>39
情報が分散するので、後になって検索する人が不便。

回答者の能力を疑っているようにみえるため、無礼。
(「こいつに聞いても判らないかもしれないから、他のところでも聞いておこう」ということ)

法律だけが全てじゃないよ。
44デフォルトの名無しさん:04/06/27 18:38
そもそも「何法に抵触か」という問題提起に答えないあたり
ますます直リンとそっくりに見える
45デフォルトの名無しさん:04/06/27 18:41
>>43
無礼に思った人が無礼者に対する相応しい態度をとればいいだけだろ?
大勢に嫌な態度をとられた人は自然に学習するわけで
「マルチ」って用語まで作って魔女狩りみたいにする必要性はないと思う
46デフォルトの名無しさん:04/06/27 18:41
参照型を実体型に代入するとどういう動きになるのでしょうか?


string a(string& s1)
{
 string s2 = s1;
 return s2;
}
47デフォルトの名無しさん:04/06/27 18:42
>>46
参照は別名。いじょ
48デフォルトの名無しさん:04/06/27 18:44
>>45
> 「マルチ」って用語まで作って
別に、以前から使われている言葉だし。
>>48
魔女っていう概念もだいぶん昔からあったんじゃないか?
50デフォルトの名無しさん:04/06/27 18:49
>>48
言ってる意味通じてねえな
マルチ=悪
という闇トラストまで作る必要はないと言っている

少なくとも俺は加担し(てやら)ない
>>45
「魔女狩りみたい」って具体的にどういうこと?
「マルチか」なんて言いつつ結局答えてしまっているあたり、
魔女狩りどころか黙認しているようにすら見えるけどね。

魔女狩りと言うからには、何ら問題のないものにまで言い掛りを付けるという
ことだと思うのだけど、そういう風には見えないなあ。
52デフォルトの名無しさん:04/06/27 18:54
>>50
> 言ってる意味通じてねえな
通じなかったのは、言ってる意味ではなく、言っていないことの意味です。
言っていないことが通じないのは当たり前ですね。
エスパーであることを要求されても困ります :-P

> マルチ=悪
> という闇トラストまで作る必要はないと言っている
それも昔からありますね。最近作られつつある流れであるかのように言うのは
ナンセンスです。
ageてる時点で釣りだと・・・
54デフォルトの名無しさん:04/06/27 18:56
>>49
? 確かに昔からあるけど。
55デフォルトの名無しさん:04/06/27 18:59
>>51
もう一度聞く
マルチは何が悪いんだ?

言っておくが>>43は説明になってない
無償で回答する側の動機と
相手の無責任を承知で質問する人の動機に照らして
常連の勝手な馴れ合いに頼らない説明をしてみてくれ
56デフォルトの名無しさん:04/06/27 19:01
>>52
>それも昔からありますね。

それって何のこと?


>最近作られつつある流れであるかのように言うのは
>ナンセンスです。

あんた現にエスパーじゃん。
57デフォルトの名無しさん:04/06/27 19:02
>>55
> 言っておくが>>43は説明になってない
なっていますね。
(「認めたくない」という駄々を「説明になってない」と言い換えても無駄です)
58デフォルトの名無しさん:04/06/27 19:03
>>56
> それって何のこと?
あなたの言っていることですが :-)
59デフォルトの名無しさん:04/06/27 19:04
>>57
おまえ一行 > ばっかりやってるからそうなるんだよ
続き読めよな
60デフォルトの名無しさん:04/06/27 19:05
>>58
おいエスパー、こっちは普通の人間だ。飛躍しないでくれ。
61デフォルトの名無しさん:04/06/27 19:05
>>59
> おまえ一行 > ばっかりやってるからそうなるんだよ
「そうなる」とはどうなることでしょうか? 文章がまずくてわからないです。

> 続き読めよな
読んで書きましたよ。
62デフォルトの名無しさん:04/06/27 19:06
>>60
> おいエスパー、
レス先間違えてますよ :-)

> こっちは普通の人間だ。飛躍しないでくれ。
普通の人間よりはほんのちょっぴり「物分りが悪い」気もします。
63デフォルトの名無しさん:04/06/27 19:06
>>61
>読んで書きましたよ。

じゃ、おまえにはもう聞かない。ばいばい
64デフォルトの名無しさん:04/06/27 19:07
>>63
> ばいばい
あ、はい。さようなら。
どこかにあなたの子供の駄々を受け入れてくれるコミュニティが存在することを
心から祈っております :-)
65デフォルトの名無しさん:04/06/27 19:07
>レス先間違えてますよ :-)

了解
66デフォルトの名無しさん:04/06/27 19:08
マルチが嫌われるのは、
マルチかます奴は大抵各スレに「よそで解決しました」との報告を行わず、
さりとて各スレの反応を見比べて吟味するような技量(ひいてはそのつもり)がないように思われるからだ。
「思われる」というところはもっぱら回答者側の主観によるものだが、嫌なもんは嫌なんだから仕方ない。
67デフォルトの名無しさん:04/06/27 19:09
>>64
>受け入れてくれるコミュニティが存在することを
>心から祈っております :-)

マルチにもなw
>>55
全員マルチしだしたら、スレ分けてる意味がなくなるやん。
>>55
どこが納得がいかなかったのか説明してもらわないと、同じ説明の繰り返しになってしまうと思うのですが。
マルチは嫌われる、よってダメだ。

実際俺はマルチは好きじゃない。
せっかく解答してやったのに、違うスレでまったく同じ質問を見つけたら
なんだかなーコイツは、という気分になるよ。
71デフォルトの名無しさん:04/06/27 19:10
>>66
じゃ、それぞれに対して礼を失しなければ
ほうぼう聞いて回るのはいいんだな?
72デフォルトの名無しさん:04/06/27 19:12
>>68
それはどうかな? >>41についてはどう思う
73デフォルトの名無しさん:04/06/27 19:12
というか、ずっと以前から「失礼な行為」として続いてきたものに
今さら個人の感情でどうこう言い出す時点で馬鹿丸出しですね。
勘違いした批判精神で社会性の無さを正当化する子供ってとこでしょうか :-P
74デフォルトの名無しさん:04/06/27 19:13
>>72
> >>41についてはどう思う
珍しい意見が、まるで自演のようなタイミングで出てきたなぁと思いました ;)
>>55
マルチでの質問は気分を害する人間が居ます
それに答えた後でマルチに気づけば、その回答者が気分を害する事になります
>>38ではマルチである事の告知せず、マルチを悪し様に言っているわけではありません
>>38マルチで気分を害する回答者を出さないための回答者保護として適切な対処であると考えられます。

それに過剰反応する39=(ry自身が、マルチを悪いものと認識しているのでしょう
マルチでの質問に問題が無いと感じる人は、>>38を見てそのまま解答すればいいだけの話です。
マルチである事の告知"しか"せず
77デフォルトの名無しさん:04/06/27 19:16
>>69

39は何法に抵触かを問うた
43は何法に抵触かを答えていない

・回答者は、聞き方が気に入らなければ答えない
・質問者は、収穫が少なければ聞き方を工夫する

それだけだろ?
質問者の行動まで規制する必要というか
何の権利でそこまで口出しするんだ?
回答者の権力が及ぶ範囲は上記の1点目だけだ
>>77
コミュニティがすさむことへの自助活動だろ?
誰にもなんの権利もないよ
それとも誰かに与えてもらないとなにもでないの?
79デフォルトの名無しさん:04/06/27 19:20
>>75
「マルチ」という用語に嫌悪が含まれるという認識はある
だから問題提起をした
38に37に対する嫌悪がなかったことを証明できるか?
80デフォルトの名無しさん:04/06/27 19:20
常識的な礼儀も守れない奴って、それを指摘されると
その礼儀作法に論理のメスを入れるふりをして
どこまでも逃げ回るよね。
>>77
マルチが気に入らない回答者は、それがマルチである事に気づけなければどうしたらいい?
82デフォルトの名無しさん:04/06/27 19:21
常識に問題提起をする時点で痛いんだよ
>>79
悪魔の証明ですか?
fjのノリになってるね。
まぁマルチするのは勝手だが、嫌われて回答が得られなくても文句言うなってこった。
>>78
> コミュニティがすさむことへの自助活動だろ?
空気読めないヤツが、それを壊すと。

別に「俺はマルチしたいんだ」と力一杯主張して実行するのはかまわんが、
それが通った結果として回答を得られる場を壊しちゃったら(みんなマルチが
鬱陶しくてスレを読まなくなったら)本末転倒だよ。よく考えれ。
86デフォルトの名無しさん:04/06/27 19:23
マナーの話なのに「何法に抵触するんだ?」だもんな。
こういう他人とまともにコミュニケーションもとれない馬鹿は
無人島に行って電源の入ってないマシンをいじってて欲しい。
87デフォルトの名無しさん:04/06/27 19:24
>>81
自分で調べろ

・・・と質問者に対してよく言う人は、自分も言動を一致させる必要がある

はっきり言ってただのアフォ
問題提起をする側が38に悪意のあることを証明しないとな。
89デフォルトの名無しさん:04/06/27 19:25
>>86
> 無人島に行って電源の入ってないマシンをいじってて欲しい。
ワラタ
90デフォルトの名無しさん:04/06/27 19:25
>>70
>マルチは嫌われる、よってダメだ。

>>82
>常識に問題提起をする時点で痛いんだよ

閉鎖的な馴れ合いの典型だなw
91デフォルトの名無しさん:04/06/27 19:27
>>90
> 閉鎖的な馴れ合いの典型だなw
いえ、閉鎖的なのは、殆どの人間の同意を取れずにいるあなたの理屈と、
にもかかわらず未だにそれを正しいと信じ込んでいるあなたです :-P
92デフォルトの名無しさん:04/06/27 19:28
>>90のw対象に >>80も追加

>>88
議題そのものに挙証責任はない
>>73
正解
>>87
サーチエンジンに反映される前の記事を
即座に漏らさず探し当てる能力を持っているのは
多分世界でもあなただけです
95デフォルトの名無しさん:04/06/27 19:28
>>90のw対象に >>91を追加

>殆どの人間
アフォかこいつは
96デフォルトの名無しさん:04/06/27 19:30
だいたい同じだな
礼儀を守らない奴の言い逃れは、ネットでもそれ以外でも
>>95
90 の対象には次々人が追加されるのに 95 の方には一人も追加されないのな。
v(^・^)v
98デフォルトの名無しさん:04/06/27 19:31
>>73
>ずっと以前

これも問題
大学や公共機関という受益者負担の原則に照らして特殊な環境の下、
ないしはナローバンド等によるレートの大きな従量制の下での
「常識」がいつまで続くかに関心がないなら、それは技術者として恥ずべきことだ
99デフォルトの名無しさん:04/06/27 19:31
>>95
> アフォかこいつは
いよいよ幼児性がわかりやすい形で出てきましたね ;-)
頭のいかれてる人を怒らすとめんどくさいな。
トリップつけてくれよ。他のスレで見かけても放置するからさ。
101v(^・^)v:04/06/27 19:33
そろそろ放置すべき時期かと思うんだが、どうだろう?
ここネタスレじゃないし、こんな下らん事で埋めちゃうのは勿体ない。
102デフォルトの名無しさん:04/06/27 19:33
>>98
> 「常識」がいつまで続くか
大学や公共機関、ナローバンドといった単語を持ち出しても無駄ですね。
いま現在、この板で、この常識は息づいているので :-)
103デフォルトの名無しさん:04/06/27 19:33
>>94
語るに落ちたな
「見苦しい言い訳をする質問者」そのもの
>>98
日本人が昆虫を食べる事に抵抗を持つのなら、それは地球の住人として恥ずべき事だ

一度染み付いた文化や習慣はそう容易には変えられない。
105デフォルトの名無しさん:04/06/27 19:35
>>102
>いま現在、この板で、この常識は息づいているので :-)

そのことへの疑問を問題として提起した
106デフォルトの名無しさん:04/06/27 19:35
要するに、この板でコミュニケーションを取ろうという人間が、
その際にこの板のマナーを守らなかったという話だろ。

あからさまに失礼な奴なのに、なんで踏ん張るんだろう・・・
まぁ、失礼な奴だからなんだろうがw
↑さっきからうるさいsageろ
108デフォルトの名無しさん:04/06/27 19:35
>>104
イナゴの佃煮なんか昔からあるじゃん
オマエが知らないだけ
屁理屈喚き散らかしてまでマルチがしたいのかw
110デフォルトの名無しさん:04/06/27 19:36
>>105
> そのことへの疑問を問題として提起した
結果は見てのとおりですね :-)
ここでいくら暴れても「これだからマルチは・・」と嫌われるだけなのにな。
マルチの印象をさらに悪くして損するの自分なのに。
本来は回答を得ることが目的なのに、マルチすることが目的になってる。
本当に回答を得たいなら回答を得やすい質問の仕方すれば自分が得するのに。
いい加減他のスレが下がるのでsageてくださいsage
「問題提起」という言い方で自分のヒステリーをごまかしてるのがなんとも
114デフォルトの名無しさん:04/06/27 19:37
>>106
goto >>77;







お   前   ら  s  a  g  e  ろ
>>111
そうだね。
前々からマルチする奴には無礼で頭が悪いって特徴があるなと思ってたけど、
今回のことでその思いは強まったよ。
117デフォルトの名無しさん:04/06/27 19:38
>>111
変な言いがかりつけんな!
俺がいつマルチしたんだよ?
>>103
詭弁だな。
確かに「探しても見つかりませんでした」は探そうとしないアホの常套句だが、
掲示板の記事のような即時性のあるリソースを
現代のサーチエンジンで追いきれない事は純然たる事実だ。

俺はいくつかのnewsと2ch、あとはbelutionをチェックしては居るが
他のサイトまでチェックし尽くすことは物量的に不可能だ。

プログラミングコミュニティ全てを列挙しきる事のできる人間も
多分世界であなただけです。
119デフォルトの名無しさん:04/06/27 19:39
マルチの話題はこっちで大いに盛り上がってくれ
http://that3.2ch.net/test/read.cgi/bouhan/1081015408/l50
120デフォルトの名無しさん:04/06/27 19:39
>>111
氏ね
121デフォルトの名無しさん:04/06/27 19:39
>>118
再び語るに落ちたな
言えば言うほど恥の上塗りだよ
122デフォルトの名無しさん:04/06/27 19:40
>>121
どこに問題があるのか指摘できないのは脳が入ってないからですか?
マルチは失礼、という常識が
いちだんと強化された感があるな
今回のやりとりで
125デフォルトの名無しさん:04/06/27 19:41
真・スレッドストッパー。。。( ̄ー ̄)ニヤリ
何法に抵触するんだ? とかきいてた奴が
突っ込まれたあとで「常識への疑問を問題として提起したんだ」って・・・
はあ
もっと上手く使えばいいのに。
無料でめんどうなやり取りもせずに回答が得られる場所なんだから。
自分の主張を通したいがために結局回答が得られなかったら本末転倒だよ。
128デフォルトの名無しさん:04/06/27 19:43
>>126は馬鹿126馬鹿は馬鹿126は糞ゴミ
129デフォルトの名無しさん:04/06/27 19:43
>>123
「見苦しい言い訳をする質問者」そのもの

>他のサイトまでチェックし尽くすことは物量的に不可能だ。
>プログラミングコミュニティ全てを列挙しきる事のできる人間も

マルチかどうか確認するには必要なことだが
言ってる当人ができないと宣言している以上、
「マルチすんな」という主張は破綻している
130デフォルトの名無しさん:04/06/27 19:43
誰か

無料で

C言語

DLできる

サイト

教えろ糞ども
>>128
はいはい。

食後の薬を忘れるなよ。
132デフォルトの名無しさん:04/06/27 19:44
>>126
いいよ、こっちは百歩譲ったつもりだったが
何法にも抵触してないんなら自由って結論な
リアル中学生(所属:パソコンクラブ)なんだからそのへんで許してやれよ
>>129
だれも「マルチすんな」とは言ってないよ。
言っても無い事に反論する手に出てきましたね。

「マルチに解答すると気分が悪くなる」これだけ。
135デフォルトの名無しさん:04/06/27 19:45
>>131

お前は馬鹿だC言語教えて無料でDLお前は馬鹿。
C++の話題につけていけないのでくだらないことで
盛り上がる人達が集まるのはこのスレですか?
>>129
> 言ってる当人ができないと宣言している以上、
> 「マルチすんな」という主張は破綻している
していませんね :-P
139デフォルトの名無しさん:04/06/27 19:46
>>136

このスレッドの殆どの人がクスリやってます。

放っておいた方がいいですよ(ワラ
140デフォルトの名無しさん:04/06/27 19:46
>>132
> 何法にも抵触してないんなら自由
さぞ嫌われてるんでしょうねえ。
141デフォルトの名無しさん:04/06/27 19:46
>>137
いーや、している
142デフォルトの名無しさん:04/06/27 19:47
誰かC言語をこの超超超超超超超超超超超℃素人の私に教えてくだらい
>>132
法律で規制してもらわないと何もできんのか……

まぁ宿題やらなくても、電車の中で化粧しても、コンビニの駐車場に
座り込んでも、変数名を a1, a2, a3, .. としても法には触れんわな。
>>142
ここは C++ スレだが
>>142
スレ違いです。
146デフォルトの名無しさん:04/06/27 19:48
>>143
無礼者はあんたらだろ
こっちが百歩譲ってたことに対して
それだけかよ
147デフォルトの名無しさん:04/06/27 19:48
>>144
だから何?消えろクズ
>>145
氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね氏ね
148デフォルトの名無しさん:04/06/27 19:49
>>146
> こっちが百歩譲ってたことに対して
何を譲っていたのですか?
あなたが間違っている点をあなたが改めることは
「譲る」とは言いませんが :-P
法に触れないが嫌われる、ただそれだけだよ。
だからそろそろ落ち着け。
いくら「俺を(そしてマルチする人を)嫌うなぁー!」と主張しても無駄なんだよ。
だってそんなの法律で禁止してないべ。
マルチすんのは自由だな、バレるとアレだけど。
でもって、マルチを指摘するのも自由だな。
なんか、これ納得できないらしいけど。
>>147
> だから何?
スレ違い、ということです ;)
152デフォルトの名無しさん:04/06/27 19:50
ActiveBASIC>>>>>>>>>>>>>>C/C++
153デフォルトの名無しさん:04/06/27 19:51
>>148
あんたの主張:
間違っている →譲るとは言わない

こっちの主張:
間違っていない →譲ると言う可能性がある
D>Smalltalk>Java>C++>C
マルチポストは是か非か?

という質問をマルチポストしてきます。
156デフォルトの名無しさん:04/06/27 19:52
ActiveBasic>>Delphi>HSP>>>>C/C++
*あらゆる質問はまずすれ立てるまでもない質問はここでスレにしてください。

とりあえず、何法に抵触しているのか、すれ立てるまでも無い質問スレでしてきてください。
158デフォルトの名無しさん:04/06/27 19:52



Ruby>>Java>>Delphi>>AB>>>HSP>>C/C++
この流れなら言える!






















>>153
意味不明です。
>>146
てめえの基準で「百歩」譲られてもねぇ
162デフォルトの名無しさん:04/06/27 19:53
>>157
氏ね
163デフォルトの名無しさん:04/06/27 19:53
>>146
実は俺、お前に一億歩譲ってたんだ。
164デフォルトの名無しさん:04/06/27 19:53
>>160
貴方こそ意味不明です キモッ
なんか関係無い流れだから好きな子の名前でも告白しちゃおうかな
166デフォルトの名無しさん:04/06/27 19:54
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
ひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセーひまわりマンセー
>>164
意味不明という言葉の意味がわからない、という意味ですか?
もしそうなら、これは辞書的な話ですから辞書をひけばいいし、
そうでないなら、まったく筋の通っていないオウム返しですから
まさにジタバタと暴れる子供と同じですね :-P
マルチから荒らしに正常進化を遂げてるなw あとは、
                 ┌─┐
                 |も.|
                 |う |
                 │来│
                 │ね│
                 │え .|
                 │よ .|
      バカ    ゴルァ  │ !!.│
                 └─┤    プンプン
    ヽ(`Д´)ノ ヽ(`Д´)ノ  (`Д´)ノ    ( `Д)
    | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎

と言いつつ数回書き込んで、それがバレて「もう来ねぇんじゃなかったの?」と
つっこまれるのがいつものパターンだが、さて。
169デフォルトの名無しさん:04/06/27 19:55
>>167
意味不明
>>166
3点
そのネタは使いつくされています
もっとオリジナリティを出しましょう
>>165
どうぞ
172デフォルトの名無しさん:04/06/27 19:56
>>160
聞き方が気に入らないから答えない
質問文にすらなってないが・・・
「やっぱ2ちゃんねらは馬鹿ばっかりだな!もう二度と来ねぇよ!」
174デフォルトの名無しさん:04/06/27 19:56
>>170
ひわまセーりンマまわーひまセ
お前らC++の相談をしろ。ここはそういうスレだ。
マルチがうんぬん言い合うスレではない。

マルチの相手してやってる奴も落ち着け。
あんたらたぶん良い様に釣られてるぞ。
ttp://www011.upp.so-net.ne.jp/pony-hp/XENO-BOX/XENO-BOX_13.JPG

おまいらこれでも見ておちけつ。
>>169
そうですか。あなたの大切な会話が終わってしまいましたね ;-)
え、まだやってんの っつーかスレ伸びすぎ
>マルチって何法に抵触なんだ?
しょっぱなのこのレスが物語ってるな
>>165
ひゅーひゅー!こーくはく!こーくはく!
180デフォルトの名無しさん:04/06/27 19:57
「2CHなんて社会のゴミの集まりですから悪口いわれても気にすることないですよ」
181デフォルトの名無しさん:04/06/27 19:57
>>175も読めない方は精神科に逝ったらどうですか。
>>172
> 聞き方が気に入らないから答えない
まぁいいですよ。
あなたの問題提起をあなたが「続けないもんね!」とやっても、
こちらはノーダメージどころか、見ててオモシロいだけなので ;-)
僕、法律のことはあまりよく知らないのですが、これってマルチ商法の話ですよね?
ちょっと聞きたいんだが、マルチポストを嫌う奴は、
(1) 自分の覗いた(常駐している)スレにマルチポストされるのが嫌だ。
(2) マルチポストに自分以外の誰かが回答することが嫌だ。
(3) マルチポストに回答することが嫌だ。
のどれよ?ちなみに俺はどれにも当てはまらない。
でも好きな子の名前告白しちゃうとgoogleのイメージ検索で本人がヒットしちゃうんだよな・・・
186デフォルトの名無しさん:04/06/27 19:59
>>182-184

>>175を読め
>>179
コラー
お前らもう寝る時間だぞ!
188デフォルトの名無しさん:04/06/27 20:00
>>185>>187

>>175を読め
189デフォルトの名無しさん:04/06/27 20:00
>>182
1つのレスに対して答えないことが
何で提起した問題全部の放棄になるんだよ
見ててオモシロイをそのまま返してやる
>>184
俺は1かな
191デフォルトの名無しさん:04/06/27 20:01
>>189-190

>>175を読め
>>188
気持ちは分かるが、祭りがおさまるまでは待つしかないと思われ。
>>186
やっぱりすれ違いだよな。スマソ
ずっと気になってたもんでつい…
>>187
やべっ、先生だ!


    お ま え ら ネ タ フ リ し ろ

195デフォルトの名無しさん:04/06/27 20:02
>>192
このスレッドに居る糞糞糞住人が消えても仕方ありません
>>191
おちけつ。とりあえずsageてくr
197デフォルトの名無しさん:04/06/27 20:02
>>194

>>175を読め
>>189
> 1つのレスに対して答えないことが
> 何で提起した問題全部の放棄になるんだよ
何で「提起した問題全部の放棄」なんて話をしだすのかがまったくわかりません。
同じ言葉を繰り返したくはありませんが、あなたのレスは本当に意味不明なんですよ :-P

> 見ててオモシロイをそのまま返してやる
返そうとするのは自由ですよ。当てはまってはいませんけど。
なんだよ、告白しようと思ったら終焉かよ
200デフォルトの名無しさん:04/06/27 20:03
>>198-199

>>175を読め
基地外さんは無駄に元気なのが通例だから、
この辺で放置しようぜ > ALL

あとは基地外が一回勝利宣言して、それをみんなが心の中で馬鹿にして終了だ。
>>200
…… age 荒らし認定
203デフォルトの名無しさん:04/06/27 20:04
>>201-202

>>175を読め
そんなことより俺は前スレの955の続きが気になるんだが
205デフォルトの名無しさん:04/06/27 20:06
>>198
こっちも問題提起を続けないとは言ってない
お互い意味不明のまま平行線だな
206デフォルトの名無しさん:04/06/27 20:06
マルチポストをしたらスレのサイズが10倍に!?
207デフォルトの名無しさん:04/06/27 20:06
>>204-205

>>175を読め
>>204
非 static 配列メンバ変数をコンストラクタ中で初期化したいって話?
配列じゃなくて std::vector 使えば簡単だが。
209デフォルトの名無しさん:04/06/27 20:08
>>206>>208

>>175を読め
>>184
マルチするような質問者自身が気に入らない、行為の問題ではない
>>206
環境によるだろ。
俺はOpenJane Doeに NGワード オプションを指定して、極力
糞レスを見ないようにして使っているが、例えば>>207みたいなのが
現れても現れていない時と比べ10Kほどしか増えない。
>>210-211

>>175を読めよカス
>>204
非 static 配列メンバ変数をコンストラクタ中で初期化したいって話?
配列じゃなくてPerl使えば簡単だが。
214デフォルトの名無しさん:04/06/27 20:28
クラス名やメソッド名を取得するにはどうしたらよいでしょうか?

具体的にやりたいこと。
class X {
public:
 virtual void a() {
  // ここで "X#a()" と表示したい
 }
};
215デフォルトの名無しさん:04/06/27 20:29
intへのポインタ の2次配列を new したい。
どうすればよいか.
216デフォルトの名無しさん:04/06/27 20:31
>>215
int *i[][] = new *int[100][100];
>>216
氏ねカス
218デフォルトの名無しさん:04/06/27 20:39
>>216 ありがとう.でも
incompatible types in assignment of `rgb* (*)[((height - 1) + 1)]' to `rgb*[0][0]'

と怒られる.
rgb *colmap[][];

colmap = new rgb*[width][height];
としているのに.
>>214
BOOST_CURRENT_FUNCTIONを使うと楽
220デフォルトの名無しさん:04/06/27 20:41
逆か!

colmap = new *rgb[width][height];

でもこうしても怒られる.
parse error before `*' token
221デフォルトの名無しさん:04/06/27 20:51
>>216
main()
{
int *i[][] = new *int[100][100];
}

declaration of `i' as multidimensional array must have bounds for all dimensions except the first
と言われた.

少しずつ定義するしかなさそうですね.
>>219
今度使ってみます.ありがとう
222デフォルトの名無しさん:04/06/27 21:02
>>217
お前が氏ねカス
クズクズクズクズクズクズクズクズクズクズクズクズクズクズ
223デフォルトの名無しさん:04/06/27 21:12
>>214
int ***a, i;
a=new int**[10];
for(i=10; i<10; i++) a[i] = new int*[10];
でいけた.
int ***a = new int*[10][10]はだめぽでした.
>>215
二次元配列の特性上ムリ

代案↓

int **p=new int*[WIDTH,HEIGHT];

for(int y=0; y<HEIGHT; y++){
for(int x=0; x<WIDTH; x++){
p[WIDTH*y+x]=NULL;
}
}
>>222
コンパイルが通るソース貼ってから言えカスカスカスカスカスカスカス
×int **p=new int*[WIDTH,HEIGHT];
○int **p=new int*[WIDTH*HEGIHT];
>>215
2次元以上の配列へのポインタは、2次元目以降の要素数を使わないと表現できないよ。
1次元目は「その配列へのポインタ」ということになる

正解は
 int* (*i)[20] = new int *[10][20];
です

この場合、newは int* (*)[20] … ★を返してくるから左辺もその型にしないとだめ。
これが冒頭の「2次元目以降の要素数を使わないと表現できない」のことを言っている。
# 左辺で20という数字を使っていること

★の (*)[20] の部分は「intへのポインタを20個持つ1次元配列」と考えます。
そして、その左のint* はその配列(つまり(*)[20]のこと)へのポインタであると考えます。

1次元配列の時は要素数を全く気にしなくてよかったけど、
それは2次元以上になっても、1次元目は要素数を気にしなくて良いのと同じ事です。

この場合、iは「20個の要素を持つ配列へのポインタ」なので、
iをインクリメントすると、20×sizeof(int)の分だけ加算されます。
つまり、iが[0][20]のアドレスを指していたら、i++すると次は[1][20]を指すということ。

newで[10]個分しか領域を確保してないから
ポインタをインクリメントして行き10を越えるとアクセスエラーになるので注意です。
# これは1次元でも同じだよね?

ちなみに単なるintを持つ2次元配列で良いなら
 int (*i)[20] = new int [10][20];
こうなります。intへのポインタの配列と比較してみましょう。

最後に、mail欄に半角でsageと書いてね。以上。
>>214
汎用的な方法はない。gcc 限定で良いなら __PRETTY_FUNCTION__ で拾える。
>>222には、自分がカスかもしれないという不安感が根底にあるんだろう。
それを払拭するためにクズを連呼した、と。
そんなに自分に否定的になるな。カスなんかじゃないから安心しろ。
カスといってからk
175読め俺。
テクにおぼれないで、もっとシンプルにコーディングすればいいのに。。。
>>223>>215 へのレスでした.

>>224
なるほどフラットにしてしまうのもありですね.

>>227
丁寧なレスをありがとう.
でも動的にしたいからこの方法はちと無理でした.
sageときます.すまん
あれだ。折角C++なんだし
boost::multi_arrayとかstd::vectorとか使えばいいじゃないか。
オブジェクトでスレ検索したけどネタっぽいスレが多いので
このスレで質問させてください。
現在C++でいくつか自分用アプリを作っていて、ある程度C++
の基本的な文法は分かるようになりました。
しかし、何度作っても納得できるようなクラス設計が出来ま
せん。
やはりこの手のことにはセンスが必要なのでしょうが、セン
スに欠ける凡人(俺のような)でも、「こうこう、こういう
方針でクラス設計するべし」といった一般論を分かりやすく
解説した書籍やサイト(日本語)を探しています。
何かお薦めのものがあれば紹介して頂けないでしょうか?
236デフォルトの名無しさん:04/06/28 20:11
>>235
センスに欠けてちゃどんな方法論も空疎な束縛にしかならないよ

それより、お前さんは自分が作ったクラスの
どんなところに納得いかないんだい?

珍しくスレタイにぴったりの客人さん
分析が済んでないから設計できないんでしょうよ
>>235
俺が読んで身になったと思ったのは、これ
http://www.1point.jp/~book_2ch/program/oo_uml.html#fundamentals_of_computing_cpp
お邪魔します。。
MPIというのを理解(ある程度)してくるよう先輩に言われたのですが、
だいたいの構造といいますか方法、というのは分かりました。。
でもやっぱり使ってみないと心配でしょうがありません・・・
Widndows上で、エミュレータのように動くソフトはないものでしょうか。。
もしくはネットを使って動くようなものはないでしょうか。。
構造的に存在しないかとは思うのですが、気になってしまいます・・・
ほかの板に書くとノンレスでしたのでこちらに来させていただきました。。
勝手ながら、どうか御教授お願いします。。。
240235:04/06/28 20:31
>>236
> それより、お前さんは自分が作ったクラスの
> どんなところに納得いかないんだい?
納得がいかないというか、取っ掛かりが良く分からないのです。
たとえば電卓を作るとして、どんなクラスを作ればよいのか?と
考えだすと右も左も分からない状態です。
結果、細かいところからクラス設計に取り掛かってしまい、最終
的に電卓が出来上がるころには、いろいろなクラスの寄せ集め
見たいになってしまい、全体としての一貫性がないのです。
トップダウンで設計するべきといわれてもなかなかイメージが湧
きません。
そこで、センスが並か並以下の人間でもこういう方針、法則で設
計すれば比較的理路整然とした構成になりやすい、みたいな一
般的な手順を知りたいのです。

>>238
ありがとうございます。本屋で探してみます。
電卓を作るとして、どんなクラスを作ったらいいのか↓答えよ。正解はメル欄
これで完璧
>>241
電卓は、クラス階層考えるより状態遷移が難しいぞ。四則演算の数式を
パースする方が遙かに楽。
>>243
答えになっていません
てsてs
246デフォルトの名無しさん:04/06/28 21:23
>>240
クラス設計というより構造化設計にも共通するハードルだな
お前さんも言っているとおり、細部からボトムアップすると
最後にまとめる段階で収拾つかなくなっちまうんだよ。

ウォーターフォールとまでは言わないが、
まずトップレベルから着手してみて
「こんなクラスないかな〜」って発想を大事にしながら
下請けのクラス作ってみ。

共通基底クラスで実装継承は、構造化で言うところのサブルーチン化
インターフェイス継承は、関数ポインタを使うときと考え方が似てるよ。
247デフォルトの名無しさん:04/06/28 21:24
>>244
答えになってません馬鹿糞ゴミ

       人
      (__)
      (__)
ウンコー  (・∀・,,)
     O┬O )
キコキコ ◎┴し'-◎ ≡
             \     ∩__∩
               \   /     ヽ
                \ |●  ●  |
                   \(_● _)   ミ ̄ ̄ ̄ヽ___,-、     (´;;⌒  (´⌒;;
                   .. |∪|   ___   ───⌒ヽ(´⌒;;(´⌒;;
                    ヽノ-、____)───(´⌒(´⌒;;     ズサ────

今見て大雑把に考えた奴だと

計算状態保持部
結果表示部
メモリー部
入力部
それらのFacade部

こんな感じに大雑把に考えて細部もっと細かく落としてく
なるべくその部分に責任をもたせ他の人の事を知らないようにするのが自分の基本。
他の人のやり方はシラネ
てか、まぁ、>>235氏にはオブジェクト指向の入門書読みなさいと。
一昔前なら結城本が定番だったのだけど、今はどうだろ?
あと、禿本その他も手元に置いてぼちぼち読みなさいねと。

結城本:ttp://www.amazon.co.jp/exec/obidos/ASIN/4881356194/
禿本その他は>>5
Tucker!って結城氏だったの?
>>435
日経ソフトウェアの「ゼロから学ぶソフトウエア設計」を読んでみるのもいいんではないでしょうか?
253デフォルトの名無しさん:04/06/29 01:26
>>235
ほんとうに基礎的なことだけど
フローチャート書いて
考えまとめてから取り掛かれば、いいんじゃない?
釣りはご遠慮ください。
複数のクラス群、
( A1, B1, C1 ), ( A2, B2, C2 ), ( A3, B3, C3 ), ... をポリシーっぽく使って、
template< typename A, typename B, typpename C >
class SomeFunc {
private:
A a;
B b;
C c;
};
にインスタンスを作ってファンクタとして使っています。
今、新しく、( Anew, Bnew, Cnew ) を作成する必要が出たのですが、
Cnew は、Anew のメンバ関数を使用することになってしまいました。
CnewのコンストラクタにAnewのポインタか参照を渡せば済むことなのですが、今までの
クラスを互換性がなくなってしまいます。この場合、どのようにしたらいいのでしょうか?
古い、クラス群にダミー引数を渡せば済むのでしょうが美しくないと思ったので質問しました。
class ChasA:SomeFunc<A,B,C>{
 ChasA::ChasA():c(a){}
}
思いつきだけどこんな感じじゃだめ?かき方間違ってるかも知らんけど
仮にchar *choice = new char[10];
というchar型配列へのポインター choice があったとして、
コンマ ',' をデリミネーションとして複数の数値をインプット
したいんだけど(例:1, 3, 4 で1と3と4がインプットされる)
文字列としてインプットさせて、strtokでコンマごとに区切り、
atoiで数値化するという方法でならできたけど、こうやらないと
できないの?
get()とかgetline()の使い方が今一よく分からないからかも。。。
もしそういうの使った簡単な方法知ってたら教えてくだされ誰か。
boost::tokenizer とか。
boost::spirit とか。
std::istringstream とか
動的配列で初期化を与える場合、書式は
new 型名 [配列サイズ] (初期値);
でいいの?
>>261 だめです。
外部クラスを利用するところでつまづいて困っています。
KNekoクラスを外部に用意しておきメインのcppファイルで利用したいのですがコンパイルに成功しません。
よろしければアドバイスお願いします。

コードです。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_18/class.txt
#include <string>
class KNeko{
private:
-string name;
+std::string name;
public:
-void SetName(string n);
+void SetName(std::string n);
void Naku();
};
>263
using namespace std
の位置を考えろ。意味を考えろ
>>264-265
どうもありがとうございます。
using namespace std;はcoutをstd::なしで使うために書くのではないのでしょうか?
そうとしか入門書にはなかったので。
入門書には乗ってなかったですが#include <string>をつかえば文字列を記憶できる変数型stringを作れるとしか理解してないです。
STLの本を読むことをすすめる
stringもstlだ
歴史的にはstringはSTLじゃないし、std名前空間に属するのは"全てのC++標準ライブラリ"だ。

あとまぁSetName()はvoid SetName(const std::string& n);にすべきだな。
>>267-268
標準ライブラリについてもう少し勉強したほうがよさそうなんで本でも買って勉強したいと思います。
constって普段から使う癖をつけたほうがいいんでしょうか?
まだDOSプロンプトでしか動かない小さなプログラムしかやったことがないのであまり意識をしたことがないのですが。
文字列の内容によって場合わけをする場合って、switch文でやりたいのが
人情かと思うのですが、言語仕様で無理ですよね?
とすると、普通の配列だったらstrcmpかなんかを使って、stringだったら
=="???"とかで比較をしてひたすらif ... else if ... else if ... else
ってやってくしか方法はないのですよね?
>>270
ハッシュ法というのを使うと、ましな比較ができることもありますよ
ああハッシュというのがありましたね。
ただシノニムが発生すると一意な場合わけってできないのかな?
>>272
gperfというツールもありますよ
>>270
比較コストの問題なら、文字列を(読み込む等して)構築した段階で文字列テーブルに登録して、
あらかじめ一意のIDをつけておくというやり方もあります。登録単位を atom とか呼ぶことが多いです。
こんな感じ。

string_id register_string(const string& str); // テーブルに登録してIDを返す。既にある場合には既存のIDを返す。

static string_id apple_id = register_string("apple");
static string_id orange_id = register_string("orange");

void some_eater(string_id str)
{
 if (str == apple_id || str == orange_id) cout << "eat!";
}
>>270
字面の好き嫌いのレベルの話ならif else連ねるしかないよ。
いちいちデータ構造作ってやるのは無駄。
>>270
switch(str[0])
{
 case: 'a':
  switch(str[1])
  {
   case 'p':
    switch(str[2])
     ・
     ・
     ・
   case 'm':
  }
 case: 'o':
  ・
  ・
  ・
}
>>276
途方もないな
map<string, 関数ポインタ>で処理させればいいやん。
60秒毎にメッセージを表示することはできますか?
FAQにあったのですがclockは精度が悪いらしいので・・・
boost::timer
>>279
環境依存なので OS や GUI/CUI 別を明記しないと何とも言えないかと。
そして Win32 なら Win32 APIスレ、UNIX なら UNIX プログラミングスレに
行った方が良いと思う。
>>278
boost::function使えよ
MS-DOSみたいな感じなんですよね・・・ユーザにコマンド打たせて
それに応じた処理をする。ああいうのはやっぱりテーブル用意してるのかな?
>>281
よくわからないんで諦めます・・・
60秒も待つならtimeで十分だろ。
精度1秒
timeより精度が低いclockってあるのか?
>>283
#define DISPATCH(command) else if(line == #command) exec_##command();
おお、Cチックにやるやり方ですね。
>>288
何がCチック?
>>288的に考えるとboost::preprocessorはCチックだ。
291test:04/07/01 14:22
test
292デフォルトの名無しさん:04/07/01 14:28
ちょっと教えてほしいのですが。

ネットワークプログラミングをしております。(そんな対したものじゃないんですが)
そしてtelnetクライアントからコマンドを入力したら。そのコマンドに対応する
関数を呼び出したいのですが…

if(strcmp(cmd,"Hello")==0){
ReturnHello();
}else if(strcmp(cmd, "ls")==0{
ReturnFileList();
}else if(strcmp(cmd, "cd")==0{
ChangeDir();
}(以下続く)

今現在、こんな風になっています。これでは効率が悪いとおもうのですが。
どなたかよい解決方法をご存知ないでしょうか…。

この長いif文はクラス内に記述されています。
293292:04/07/01 14:31
やばっ。
ちょうどいい具合に上にヒントらしきものが…申し訳ありません…
c言語なんですが課題で出て、まじ分かんなくて助けてほしいです!
このままじゃ赤点になってまう!!
二問あるけど、神な人教えて〜

1.各月の日数を格納した整数型の配列を定義してください。これを利用して、年、月、日を読み込んで、それが年の最初から何日目であるかを表示するプログラムを作成しましょう。
ただし、閏年の規則は、以下の規則で規定されるものとします。

@西暦の年号が4で割り切れる年は閏年。
A@には当てはまるが、西暦が100で割り切れる年は閏年ではない。
B@にもAにも当てはまるが、西暦が400で割り切れる年は閏年。

2.1に以下の機能を追加してください。
1のデータを表示したあとに、その年のその月のカレンダーを表示する機能。カレンダーはfor文の入れ子を使用してみましょう。(使わなくてもできますが。)

その月の1日の曜日が分かれば、カレンダーを作成できます。曜日を調べるのには、以下の文をどこかに挿入してください。曜日を調べる部分は、関数にしてもかまいません。
曜日は、変数retに代入された値で分かります。次の通りです。

日曜日月曜日火曜日水曜日木曜日金曜日土曜日
0123456

  int ret;

if (m == 1 || m == 2) {
y--;
m += 12;
}
ret = (y + y/4 - y/100 + y/400 + (13*m+8)/5 + d) % 7;
yは入力された年、mは入力された月,dは曜日を調べたい日です。1日の曜日を調べたいわけですから、このdには…
スレちがいすまそ…
296デフォルトの名無しさん:04/07/01 15:59
引数で参照をつかうのとポインタを使うのに違いはあるの?
nullが突っ込めるかどうかだけ
>>296
ポインタだと NULL (0) を渡せる。
>>297-298
ありがd

NULLね〜。
今のところ記にする必要なしだな〜
山椒でも*static_cast<T*>(0)で渡せるけどな
STL って、インターネットで公開されてるコードや、Microsoft とかのコードを見ても
ほとんど見かけないんですが、何か理由があるのでしょうか?

知名度が低くて使われていないだけ?
>ほとんど見かけないんですが

そうか?
APIの解説ページとかならあまり使われはしないだろうが
>>301がネタなのか釣りなのか天然なのかで答えが変わってくるけど
どれ?
わしの周りでもあんまりプロダクトに使ってる人居ない(Cから来た古い人に多い、でもjavaは早う1.5出ろいうのはどういうこと?)
わしは便利なんでガシュガシュ使うんだけど。

STLは構文が汚いからね
vecter<int> <>になじみが無い。
306デフォルトの名無しさん:04/07/01 17:44
STLって、exeの容量が増えるってほんと?
>>306
あと700レス待ってくれ
>>305
そこで typedef ですよ。
309デフォルトの名無しさん:04/07/01 18:01
>>305
stack<hoge, dequeue<hoge> >
templateの構文で嫌なのは

stack<hoge, dequeue<hoge> >
                  ^

これだけだな
>>310
dequeueも嫌だ。
>>301
Microsoft の VC では、ちょっと前のバージョンまであまりマトモに stl が動かなかったから、
Windows 用のコードで初出が古いものではあんまり使ってないと思う。
あと C プログラマ上がりの「C++プログラマ」は、stl 使わないというか使えない奴が多い。
いまだにtemplateを素で書けないw
テンプレートのないC++なんて...
>>312
vector<string> hoge;
程度で「デバッグシンボル永杉」とかワーニング吐くしなー。
機能には関係ないとはいえ、あれで気分的に萎えた奴もいると思われ。

ちなみに俺は、iostreamは使わないけどSTLは使う派。
iostreamはprintfより何倍も遅いしな
317デフォルトの名無しさん:04/07/01 18:34
>>310
hoge が2回は?
C++は正しいコードでもコンパイルが通らなかったりするのがヤダ。
クラスの敬称関係で躓いているのですが「'Income' : 'const class SMan' から 'class SMan &' へ 'this' ポインタを変換できません。
変換で修飾子が失われます。」
となりどうも上手くいきません。
ポインタもアドレスも使用していないのでどうしてこんなエラーが出るのかわからず困っています。
よろしければご指導お願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_19/q.txt
>>319
これ、コバケンの本だろ?
>>319
×int Income() {return salary * 12;}
○int Income() const {return salary * 12;}
>>319
SMan::ShowData は const メンバ関数なので、非 constなメンバ関数 Income は呼べません。
Income を const メンバ関数にすべきでしょう。

あと、const がらみでは、SetName のパラメータは const string& n とするのが通例です。
323デフォルトの名無しさん:04/07/01 19:16
>>321-322
ありがとうございます、早速試してみます。

>>320
そのとおりです。
ショボイコンパイラ使ってるな。
行番号位出ないのかよ。
こんくらい情報が出るコンパイラ使えよ(g++)。

a.cpp:38: error: passing `const SMan' as `this' argument of `int
SMan::Income()' discards qualifiers
325デフォルトの名無しさん:04/07/01 19:51
>>324
非標準拡張の最右翼だろw
-ansi -pedantic
>>325
g++は右翼っていうより左翼じゃない?
>>327
さいうよく [3] 【最右翼】
〔士官学校などで成績順に右から並んだことから〕競い合っているものの中で、最も有力なもの。
「今年度賞金王の―」
三省堂提供「大辞林第二版」より
>>325
>「'Income' : 'const class SMan' から 'class SMan &' へ 'this' ポインタを変換できません。
>変換で修飾子が失われます。」
こっちが最右翼(VC++)だと言ってるんだろ。
本当に行番号が出ないと思ってるっぽいのが笑える
>>329
本当?
行番号なんて出ないでいいしな
ミスッタ
>>300 それ未定義
>>300
それは未定義動作だが。いきなりプログラムが吹っ飛んでも文句言えんぞ。
鼻から悪魔が出てきても(ry
>>300
それは未定義動作だが。いきなりブッシュが核ボタン押しても文句言えんぞ。
>>300
ポインタ理解しててもそれは吐血するほど未定義だぞ
339デフォルトの名無しさん:04/07/02 02:34
define ABC
と値を指定しないでデファインするとABCの値は何になってるのでしょうか?。
340デフォルトの名無しさん:04/07/02 02:39
>>339
そのABCを使ってみれば分かると思うが、なし。
341デフォルトの名無しさん:04/07/02 13:26
お世話になります。

数値をstring型変数に代入するにはどうしたらよいでしょうか?
いまはsprintfで変換してから代入しています。
int i = 100;
string s;
s = "abc = ";
s += i;
という使い方はどうすればよいですか?
s += i;

s += boost::lexical_cast <string> (i);
>>341
class stringex : public string
以下がんばる。
>>341
#!/usr/local/bin/pike
345デフォルトの名無しさん:04/07/02 14:56
教えていただきたいのですが、
memsetっていうのはどういう働きをするのでしょうか?
できれば、サルでもわかるような説明をお願いします。
メモリそのままのコピー
memcpyかw スマソ
サンプル見たほうが速いかな
ttp://www9.plala.or.jp/sgwr-t/lib/memset.html
教えていただきたいのですが、自分自身のクラス名を取得する方法ってあるのでしょうか?
クラスの型名や、メンバ関数名の取得方法は理解できたのですが。。。
350デフォルトの名無しさん:04/07/02 15:18
ありがとうございました☆
これを見て勉強します!!
「クラス名」と「クラスの型名」の違いは何ですか?

typeid (hoge).name ();
とかではなくて?
>>351
class hoge
{
public:
hoge(void);
virtual ~hoge(void);
};

hoge hogehoge;

だとすると 型名 hoge、変数名 hogehoge かと、
シロウトですみません。
インスタンス名
354351:04/07/02 15:56
>>349
インチキですが,こんなのはどうでしょうか?
#include <iostream>
using namespace std;
class A {};
#define INSTANCE_NAME(arg) #arg
int main () {
A a;
cout << INSTANCE_NAME (a) << endl;
return 0;
}
355!= 349:04/07/02 16:04
そんな裏技があったのかw
356351:04/07/02 16:11
>>355
こういう反応は一番嬉しいですね.
わたしはこんな風に使ってます.
#include <iostream>
#define DOUT(arg) {std::cout << #arg << ": " << arg << "\n";}
using namespace std;
class A
{
int value_;
public:
A (int p): value_ (p) {}
friend ostream &operator << (ostream &p_os, const A &p_a) {return p_os << p_a.value_;}
};
int main () {
A a (10);
DOUT (a);
return 0;
}
それはインスタンス名では?
358355:04/07/02 16:15
ホントだ、変数名では無理か。
てっきりプリプロセッサが影でconstしてるのかと思った。
ところで>>349の「クラス名」と「クラスの型名」のちがいが
はっきりしてないんだが...
360351:04/07/02 16:20
>>357,358
なになに?
352のhogehogeを取得したいのではないの?
実は例外処理で、同じクラス型からインスタンスを複数作り、
どのインスタンスでエラーが起きたか調べられるようにしたかったのですが。。。
typeid(*this).name;
を使っても分かるのはクラス型名でインスタンス名じゃなさそう。
362357:04/07/02 16:24
>>352読んでなかった。失礼。
>>354, 356
ありがとうございます、ユニークな方法ですね。w
でも例外処理で使うには、実行時にインスタンス名を知る必要があるみたいです。

#define INSTANCE_NAME(arg) #arg

を使うと、特定のインスタンスにしか対応できない。。。
__func__とか__FILE__みたいな組み込みマクロのように使える何かがあれば便利なんだけどな〜。
365351:04/07/02 16:36
>>364
何だか状況が良く掴めませんが,
「手動でインスタンスのidを振れば解決するんだけど,
インスタンスのidくらい自動で振ってくれないかな?」ってことなんでしょうか?
class hoge
{
public:
hoge(void);
virtual ~hoge(void);

void output(void);
};

void hoge::output(void)
{
printf(インスタンス名 + '\n');
}

hoge hoge_A;
hoge hoge_B;

main
{
hoge_A.output();
hoge_B.output();

return 0;
}

を実行した時に、
hoge_A
hoge_B
と出力される事を目指しています。
あ、いけね
main
じゃなくて
main()
ね。
>>366
それはフライパンに自分で料理作ってくれというようなもんだ。
インスタンスが 1 個だけなら上記の方法でもOKなんですが。。。
たくさんある場合は対応できない。
そういうプロパティを持たせればいい
デバッガ使えよ。
要はデバッグ用途だろ。
>>368
やっぱ無理?(TT)
そう都合よくいかないか。。。
デバッグって言うかトレースしたいんだろ
Hoge hogehoge;
setInstanceNmae("hogehoge");
375351:04/07/02 16:55
>>366
これじゃだめ?
#include <iostream>
#include <string>
using namespace std;
class hoge
{
string name;
public:
hoge(const string &p_name): name (p_name) {};
void output(void) {cout << name << endl;}
};
#define CREATE_HOGE(name) hoge name (#name)
CREATE_HOGE (hoge_A);
CREATE_HOGE (hoge_B);
int main () {
hoge_A.output();
hoge_B.output();
return 0;
}
>>372
無理。.NETならできそうな気がしないでもないような。
>>375
おお、お?
コンパイルしてみたらうまくいきました。
ソースの内容は難しくて理解できてませんが。。。
これを元に勉強させてもらいます。
ありがとうございました。
ス、スゲェ〜。
やってることは
hoge hoge_A; hoge_A.name = "hoge_A";
でしかないわけだが。
配列の時はどうするつもりだろうか
むむ、コンストラクタの引数に "hoge_A" を渡して、
それが name に代入されている、のかな?

hoge(const string &p_name): name (p_name) {};

こういう書式は初めて見た、コロンの後は何だろ?

配列ね。。この書式が理解できれば改造して何とか。
まだ理解できないが。(笑
>>380
逃げろ!
382351:04/07/02 17:43
>>380
> hoge(const string &p_name): name (p_name) {};
> こういう書式は初めて見た、コロンの後は何だろ?
コロンの後はメンバー変数の初期化です.
nameに対して,p_nameを引数にコピーコンストラクタが呼ばれます.
>>382
google してみました、コンストラクタ初期化子 っていうんだ、ふ〜ん。。。
よくまぁ、のうのうと初期化子を初めてみたなんて言えるな。
最低限、C++をひととおりマスターしてから質問しようとは思わないのかね。
ここは入門スレかよ。
完全な独学の場合、"自分が何を知らないか"を知らないんだよ。。。
正式にプログラミングの教育を受けた人には、その点で到底かなわないな。
プッ
こんなところで玄人気取りかよ。みっともない
???、自分がシロウトであることを告白してる訳だが。
妙につっかかってくるね、荒らしかな?、なら無視だが。
>>385
逆じゃないの?

あ、日本での話ね。
米国の大学でコンピュータ工学の単位取ったとかなら、ありえるかも。
仕様書を読むか読まないかの違いでしょ
入手した参考書に全て書いてあるとは限らないし、
その書籍が不完全かどうか入手前に予測なんかできない。
正式に教育された人は、まずどんな知識があるのか、
先達から"知識の地図"をもらってから系統立てて学ぶでしょ。
最初に変な本手に入れるからいけない。
C++Primerを読み切るまでは我慢する。これ。
>>390
そんな教育受けたかったなあ。うちなんて・・・いやなんでもない。
次の方どうぞ。
393デフォルトの名無しさん:04/07/02 19:40
>>390
例えばM社の製品についてならM社純正のセミナーと試験・資格があったりするが、
C++ の場合の「正式な教育」とは何のことを言ってるんだ?
勝手に勉強しろっていわれたんじゃなくて
授業やレクチャーを受けた奴のことを言うんじゃない
正式な教育と言うか、「筋のいい」or「センスのいい」教育を受けたい。
396デフォルトの名無しさん:04/07/02 20:12
>>395
自分が受けた教育は「筋が悪い」or「センスのわるい」教育だったと言いたいわけか
基礎プログラム課程1年
各分野での応用プログラム課程1年(全分野必須)
様ざまな分野で実際に活動している複数の講師が開く少人数セミナー課程1年(複数選択)
実践的な専門課程で1年(単数or少数選択)+卒業研究

…と、これくらいやれば「正式な教育」といえるかな?
自分で書いてて受けたくなってきた。
逆にこういう学校作ったら、受けるかもね?
(日本では無理?)

勤続年数の長い専属講師だけから受ける画一的な教育ってのが現状じゃないかな。
ここは入門スレかよ。
大作を志し10本挫折すれば、やっとどういうふうにいきあたりばったりなコードを書けば破綻するかわかってくる。
400デフォルトの名無しさん:04/07/02 20:43
>>397
受けりゃいいじゃん
第一線で活躍してる技術者を拘束できりゃいいんなら
そいつが働いてる会社(?)へ行ってビジネスとして交渉すればいい

俺もやったよ
あるハードの開発担当者本人を1時間2万5千円で半日くらい
1年は予算的に無理だったがなw
横レス失礼します。
テンプレートクラスを使用するプログラムなんですけどコンパイルまでは問題ないんですが実行することができません。
よろしければご指導のほどお願いします。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_20/help.txt
402デフォルトの名無しさん:04/07/02 21:12
おまえら、この大学を受験したらどうだ?
http://www.cs.tamu.edu/news/items?id=771

禿が直接教えてくれるぞ
禿にはセンスがない
404デフォルトの名無しさん:04/07/02 21:26
C++界に於いて、これ以上「正式な」講座があるか?
>>401
export 宣言するか(コンパイラが対応してないとダメ) Game.cpp の定義を Game.h に直接書く。
>>405
アドバイスありがとうございます。
export宣言ってのはどのようにやればよいのでしょうか?
よろしければ教えていただけないでしょうか・・・
export template<class T> class Game 〜
んな感じ。でも殆どの処理系でサポートされてないからたぶん直接ヘッダに書く事になると思う。
Mao.cppの #include "Mao.h" を消して
Mao.hで #include "Mao.cpp"
export template<class T>
class Game{
private:
T m;
Hero h;
public:
Game();
void Play();
};

このようなエラーが出てしまいました。
Game.hをこのようにしたんですけど使い方が間違っているんでしょうかね・・・?
f:\c++\挫折しないプログラミング\game.h(1) : error C2143: 構文エラー : ';' が ''template<'' の前に必要です。
f:\c++\挫折しないプログラミング\game.h(1) : error C2501: 'export' : 識別名を宣言するのに、型が指定されていません。

>処理系でサポートされてないから
と思われ
>>410
どもです。
>>405
Game.cpp の定義を Game.h に直接書く場合はヘッダファイルは基のヘッダの定義の下にcppの内容をこぴーして貼り付ければよいでしょうか?
あとGame.cppの中はどうすればよいのでしょう。ヘッダファイルで定義してありますが同じ定義をしておけばよいのでしょうか?それとも何も書かないcppにするのでしょうか?
>>411
>>408でいいじゃん
Game.cpp
の最後に
template class Game<Mao>;
を追加でも可.
415413:04/07/02 22:49
413は401のオリジナルソースに対して.
416デフォルトの名無しさん:04/07/02 22:58
>>408の方法を試したらエラーが102個検出されました。。。
全部のメソッドにinline指定入れろ
>>396 いや、今までは完全に独学。
だから、自分のいる位置に自信がもてない。
苦労も必要だと思うけど、やっぱり学習効率を考えたら
センスのいいレッスンを受けたいと今だから思える。
>>418
そこでオープンソースですよ。
>>416
Mao.hの

****最後****

に #include "Mao.cpp"を追加。
>>413のやりかたで動作しました。
ありがとうございます。
外部にあるテンプレートを使用したクラスを利用するときにはその内容を記述したcppの最後にtemplate class クラス名<ここの部分はなんていうんでしょう。。?>をつけてテンプレートを明示的にインスタンス化すればいいんですかね。
>>421
<ここの部分はなんていうんでしょう。。?>
テンプレート引数
STL は知ってたほうがいいというくらいのものでしょうか?
それとも知らないと話にならないというくらいのレベルのものでしょうか?
真ん中くらい
自分だけで完結してるなら知らなくても何とかなるやつもいるが、
普通は知らないと話にならない
>423
STL,テンプレートなれるとすげぇ便利
>>423
仕事で C++ プログラミングやるなら、さすがに知らないと辛い。
>>423
listはよく使うかな。
いまさらSTLコンテナを使わないってのはありえないぐらいには便利。
STLアルゴリズム方面のほうが面白いが。
>>427
仕事でC++やってますが、STLなぞまったく使いませんが?
>430
ある意味尊敬する。ないならC++使う意味ない。C#のほうがまし
組み込みC++とかだとそもそもSTLが付いてなかったりする
>>430
あえて使わないのか
使っちゃダメなのか
もともと使えないのか
動的メモリ確保禁止の場合には使えんな
スタック使うカスタムアロケータ書けばいいんじゃないの?
もともと使えないのはただの馬鹿
あえて使わないのは大馬鹿
Boostを使うのはどうなの?
>437
つかっとけ。STLよりはマイナかも知らんが
>>432
それ C++ じゃなくて EC++ だったりしないか?
440デフォルトの名無しさん:04/07/03 11:09
ここで言われたから無理やり使うのはすごい馬鹿

クラスも関数も使うかどうかは目的次第
どんなのがあるのかを知っておくことが
そーゆーこと聞く人が今やるべきこと
441デフォルトの名無しさん:04/07/03 11:21
javaで言うClassクラスを実現するにはどうしたらよいですか?
RTTI
Unko* unko = dramatic_cast<Unko*>(apple);
444デフォルトの名無しさん:04/07/03 11:49
>>443
>Unko*
ワラタ
445413:04/07/03 11:58
>>421
これでも良いって話で,明示的実体化はそんなには使わないんじゃないでしょうか.
普通exportがサポートされてないコンパイラでは,
(405,417)あるいは(408,417,420)のようにして,main関数のコンパイル時に
template<class T>Game<T>::Game()とtemplate<class T>void Game<T>::Play()の定義が
見えるようにして,(暗示的に)実体化するのが一般的だと思います.
string関連の質問なんですけどコンパイルも実行もできるのですがnameの表示が上手く行われません。
「俺様の名前はキャッツだ」と本来なら表示したいのですが。。。

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_21/cat.txt
- FNeko(){cout << "キャッツが現れた!\n"; Neko("キャッツ"), power = 10;}
+FNeko(): Neko("キャッツ"), power (10) {cout << "キャッツが現れた!\n";}
>>405>>408>>420のやり方だとエラーが出てしまいどうにも上手くいかんです。
全部インラインすると時間がかかりそうですし。。
>>413の方法ならできるんですがあらかじめ使用する型を書いておかないといけないんですよね。
exportが使えれば楽なんですが、これ以上の解決策はないですかね。。。?
>>446
ついでに言うと

>Neko(string n){name = n;}
>void SetName(string n){name = n;}



Neko(const string& n){name = n;}
void SetName(const string& n){name = n;}

としたほうがいいと思うよ。
>>447
ありがとうございます。
- FNeko(){cout << "キャッツが現れた!\n"; Neko("キャッツ"), power = 10;}
+FNeko(): Neko("キャッツ"), power (10) {cout << "キャッツが現れた!\n";}
うえの違いってどこにあるんでしょう?
下のやり方は本でいきなり出てきたのでよくわからなかったので、今までどおり{}の中に必要な処理は全部まとめて書いても同じだと思ったんです。
451413:04/07/03 12:15
>>448
実装省きましたが,こんな感じじゃないでしょうか.
################# Game.h ######################
template<class T>
class Game{
private:
T m;
Hero h;
public:
Game();
void Play();
};
#include "Game.cpp"
################# Game.h ######################
################# Game.cpp ######################
template<class T> inline Game<T>::Game() {}
template<class T> inline void Game<T>::Play() {}
################# Game.cpp ######################
>>448
エラーが102個出てしまいました。
Game.cppはこんなんです。
#include <iostream>
#include "Mao.h"
#include "Hero.h"
#include "Neko.h"
#include "FNeko.h"
#include "Game.h"
using namespace std;
template<class T> inline Game<T>::Game()
{
cout << "戦闘が始まります!がんばって!\n";
cout << "敵の残りエネルギー:" << m.GetEnergy() << '\n';
}
template<class T> inline void Game<T>::Play()
{
while(h.GetEnergy()>0){
if(m.GetEnergy()<=0){
break;
}
m.Attacked(h.Attack());
}

if(m.GetEnergy()>0){
cout << "敵は逃げました。終了します。\n";
}

}
これはもしかすると私の環境に問題があるんでしょうか?
VC++6.0proで下のパッチを当ててあります。
http://www.microsoft.com/downloads/details.aspx?FamilyID=a8494edb-2e89-4676-a16a-5c5477cb9713&displaylang=ja
453447:04/07/03 12:25
>>450
> FNeko(){cout << "キャッツが現れた!\n"; Neko("キャッツ"), power = 10;}
これのNeko("キャッツ"), power = 10;では基底クラスの初期化は行なわれません.
Nekoクラスの名無しインスタンスが"キャッツ"を引数として作られ,
powerに10が代入され,
両者の間でoperator,が呼ばれることになります.
454413:04/07/03 12:28
>>452
> #include "Mao.h"
> #include "Hero.h"
> #include "Neko.h"
> #include "FNeko.h"
> #include "Game.h"
> using namespace std;
これいらないです.
あと,coutはstd::coutに.
>>450
まともな入門書を通読するか、初心者スレに逝ってくれ
456447:04/07/03 12:30
>>453
-両者の間でoperator,が呼ばれることになります.
+両者の返値間でoperator,が呼ばれることになります.
457デフォルトの名無しさん:04/07/03 12:42
標準入力からの取り込みを以下の用にやっています。

#include<stdio.h>
#define MAXLEN 256
char buff[MAXLEN];

intmain(){
 int n;
 printf("Input Number >");
 fscanf(buff, sizeof(buff), stdin);
 sscanf(buff, "%d", &n);
以下省略

ここで、標準入力の入力数がsizeof(buff)を超えていた場合のエラー処理
はどうすれば良いのでしょうか?よろしくお願いします。
>>457
スレ違い
459457:04/07/03 12:47
あぁぁ、入力ミスしてました。fscanf → fgets

#include<stdio.h>
#define MAXLEN 256
char buff[MAXLEN];

intmain(){
 int n;
 printf("Input Number >");
 fgets(buff, sizeof(buff), stdin);
 sscanf(buff, "%d", &n);
以下省略

です。
460457:04/07/03 12:48
>>458
スレ違いなのですか?C++のことなのですが…。
>>460
Cスレに移動されたし。
>>460
吊られないぞ
>>454
Game.cppの内容
template<class T> inline Game<T>::Game()
{
std::cout << "戦闘が始まります!がんばって!\n";
std::cout << "敵の残りエネルギー:" << m.GetEnergy() << '\n';
}
template<class T> inline void Game<T>::Play()
{
while(h.GetEnergy()>0){
if(m.GetEnergy()<=0){
break;
}
m.Attacked(h.Attack());
}
if(m.GetEnergy()>0){
std::cout << "敵は逃げました。終了します。\n";
}
}
Game.cpp
F:\C++\挫折しないプログラミング\Game.cpp(8) : error C2143: 構文エラー : ';' が '<' の前に必要です。
F:\C++\挫折しないプログラミング\Game.cpp(8) : error C2433: 'Game' : 'inline' はデータ宣言をするのに使用できません。
F:\C++\挫折しないプログラミング\Game.cpp(8) : error C2501: 'Game' : 識別名を宣言するのに、型が指定されていません。
F:\C++\挫折しないプログラミング\Game.cpp(8) : error C2059: 構文エラー : ';'
F:\C++\挫折しないプログラミング\Game.cpp(8) : error C2143: 構文エラー : ';' が '<' の前に必要です。
F:\C++\挫折しないプログラミング\Game.cpp(13) : error C2039: 'Play' : '`global namespace'' のメンバではありません。
F:\C++\挫折しないプログラミング\Game.cpp(14) : error C2143: 構文エラー : ';' が '{' の前に必要です。
F:\C++\挫折しないプログラミング\Game.cpp(14) : error C2447: '<L_PROPERTY>' : 関数ヘッダがありません (旧形式の仮引数リスト?)
こうなりました。
やはり環境がいけないんでしょうか?
テンプレートを明示的にインスタンスかするしかないですかね。。
>>440
> ここで言われたから無理やり使うのはすごい馬鹿

心配しなくてもそんなやつはいない。
>>456,>>453
ありがとうございます。
466413:04/07/03 12:53
>>463
Game.cppはコンパイルしないでください.
467413:04/07/03 12:56
>>463
もし,.cppだと自動的にコンパイルされるようだったら,
Game.cppをGame_impl.hなどに変更して下さい.
内容的には初心者スレです.
>>466
メインでつかうcppをコンパイル、実行する際にどうしてもGame.cppもコンパイルしようとマシンがするんですが。。
>>467
ありがとうございます。
今まで読んできた入門書にはこのような方法は載っていなかったので。。
迷惑おかけしてスイマセン
470デフォルトの名無しさん:04/07/03 13:17
上野にあるアドというブルセラショップはなくなってしまったのでしょうか?
いま上野にいます。
>>470
上野にまだあるよ。というかショップ自体が膨張して上野になりました。
メモリリークを検出してくれるツールにはどういうのがありますか?
できればプラットフォーム非依存で。
それが無理ならWindows限定で。
それからできればフリーで。
newとdeleteオーバーロードすればいいやん
>472
Windows限定なんでスレ違いなんだが、
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
がお手軽。
475デフォルトの名無しさん:04/07/04 20:01
DBからselectした結果をカラム名と値の組で
map<string, string> cols;
に格納しようと思っています。
ここで疑問ですが
string で NULLを扱うにはどうしたらよいでしょうか?
476デフォルトの名無しさん:04/07/04 20:33
ちょっと質問です。
C++プログラムはどの辺りまでマスターすれば、”C++をマスターした”と言えるのでしょうか?
まぁ、”全部マスターしたら”と言われたらそれまでですが・・・。
それと、C++の次に覚えたら良いプログラムは何でしょうか?
変な質問ですが、どうかよろしくお願いします。
金になるモノを作れたらマスターしたと言っていいんじゃなイカ?
478デフォルトの名無しさん:04/07/04 20:50
詐欺じゃなくてな
>>475
> string で NULLを扱うにはどうしたらよいでしょうか?
ありません。

そもそも map に格納しないか、あるいは map<string, std::pair<bool, string> > とかに
して NULL, 非 NULL のフラグを別に持って下さい。
__NULL__とか多分dbに無さそうなの入れとけば?
そういうときこそboost:optional
>>475
仕様に関わるがNULL文字と空文字を同扱いにするという方法もある。

>>480のようにNULL定数を定義する方法もある。
この場合安全性を期すならNULL定数と一致する値が入力された場合にはエスケープすればよい。
後のことを考えるとcols自体をクライアントに露出しないほうがよいのは当然。
483デフォルトの名無しさん:04/07/04 22:36
>>482
>NULL文字

スペル誤りのあたりから、ただならぬ腐臭が立ち込めている
>>483
NULL文字列と書きたかったのねん
485デフォルトの名無しさん:04/07/04 22:41
>>484
おまえもすごい
血塗相か肪乱相クラスだ
かんべんしてくれ
>>401で質問したものですが初歩的過ぎる質問に付き合ってくださった方々に感謝いたします。
488487:04/07/05 00:57
たびたび申し訳ないんですがif文やswitch文の中でテンプレートクラスの宣言はできないのでしょうか?
ユーザーに数字を入力させてそれに応じた処理をしようと思ったのですがエラーに悩まされています。

元のコードのエラーは修正してあるので単純に
Game<FNeko, Hero> g;
g.Play();
とすれば実行はできます。

問題のコードです。
できればよろしくおねがいします。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/file/1074774948_22/kudasitu.txt
>>488
たぶんC++(テンプレート)やる前にC言語をもういちど勉強しなおしたほうがいいと思う。
>>488 インスタンスの生存範囲を熟考して分かった事を述べよ。(30点)
ポリモーフィズムについて述べよ。またそれとテンプレートとの関係について動的、静的という言葉を用いて説明せよ(40点)
>>488
>>455を声に出して100回読みなさい。
>まともな入門書
とりあえずダイテルかPrimerのどっちかを読み終わるまでは出入禁止。
>>488
>if文やswitch文の中でテンプレートクラスの宣言はできないのでしょうか?
これはできます.が,488でコンパイルできないのは490の指摘の通りです.

まず,if文の方がコンパイルできないのはコンパイラの指摘通りです.
> 魔王と戦う.cpp(44) : error C2065: 'g' : 定義されていない識別子です。
以下のコードで(b)のコメントを外してコンパイルを通そうとしていることになります.
class A {public: void func () {}};
int main () {
{
A a;
a.func (); // <-(a)
}
// a.func (); <-(b)
return 0;
}
495494:04/07/05 06:40
switch文の方は,gの生存範囲がcaseごとではなくswitch全体であるからです.
つまり,以下のコードで(b)のコメントを外してコンパイルを通そうとしていることになります.
int main () {
A a; // <-(a)
// A a; // <-(b)
return 0;
}
もしswitchを使うのであれば,{}を使って以下のようにスコープを切ってやるといいです.
case 1: {
Game<Mao, Hero> g;
break;
}
496494:04/07/05 07:00
>>488
初心者すれに移動したのね.
>>494-495
わかりやすくご丁寧にご指導いただきありがとうございます。
コンパイル実行することができました。
ダイテルって何?
>>498
ググれば出るよ。
最近C++の勉強しているんですが、参考にしている本のコードが汚く感じるんです。

class CCalc {
  int r;
 public:
  void Set(int x) {r = x;}
}
クラス定義ではこんな感じで、{ }が1行に収まっているのも違和感あるし、

cout << "加数は?"; cin >> x;
見たいな感じで1行に2つ以上の文を入れていることが結構あります。

ネットで何人かのコードを見させてもらった感じでは、{ }は結構あるのかなぁという
感じですが、cout << ; cin >> ;の方はやりすぎかなぁという印象を受けました。
C++では良くあることなんですか?
インラインメソッドでは普通じゃないですか?

class A
{
 int a;
public:
 A() :a(0) {
 }
}
と書くよりは


class A
{
 int a;
public:
 A() :a(0) {}
}
と書くだろうし。

OOだからGetterとかSetter書かなきゃいけないのにそんな無駄に行数増やしてもしょうがないし。
cout << ; cin >> ;の方はやりすぎ。
>>500
本だとページ数を抑えるためにやったりしてるのでは?
ネットの話だと、2chは投稿に行数制限あるからせざるを得なかったり。
インラインで{ }はありでも、やっぱその入出力はやりすぎですか。
ではこの本のスタイルはあまり真似しないようにします。
ありがとうございます。

もし、推奨されるスタイルのコードを閲覧できるサイトがあれば紹介してもらえないでしょうか?
あー、>>4からたどっていけば結構ありますね。
推奨されるスタイルかどうかはわかりませんが、見た目よさげなので参考にします。
http://www.cuj.com/code/
>>501
>OOだからGetterとかSetter書かなきゃいけないのに

いらんこと書かなきゃボロが出ないのに……
>>505
いらんとこに触れなきゃ、スレも荒れないかも・・・
>>505 全部friendですか?
>>507
いらんこと書かなきゃボロが出ないのに……
>>507
「OOだから」という理由でgetter/setterを「書かなきゃいけない」というのがおかしいって話だろ。
>>509
iostream系が率先して無視してることになるね。
iostream系が率先して無視?
>>510
どういうこと?
iostream系のgetter/setterが提供されてる理由が「OOだから」ってことか?
513510:04/07/06 09:36
ios::flags()みたいにメンバのIn/Outが同じ名前の関数があるって意味。
ちょっと話の本題からずれてしまったみたいなので、スルーしてちょうだい。
>>513 了解。
char s[ 256 ];
cin >> s;

で、入力を
「a b」
とスペースを含む文にすると s に 「a」 としか読み込まれません。

この場合、s に「a b」と読み込まれるようにするにはどうすれば良いでしょうか?
>>515
string s;
getline (cin, s);
そのあと必要ならs.c_str()でconst char *を得られる。
#include <string>
#include <iostream>
namespace MyNameSpace {
class MyAbstract {
public:
  virtual ~MyAbstract(void) {};
  virtual void fooBar(void) const = 0; //1
  virtual const std::string toString(void) const { return getMark() + getName(); }; //2
protected:
  virtual const std::string getName(void) const = 0; //3
  virtual const std::string getMark(void) const = 0; //4
};
class MyImpl : public MyAbstract {
public:
  MyImpl(const std::string & name) : _name(name) {};
  virtual ~MyImpl(void) {}; //5
  virtual void fooBar(void) const { std::cout << "(^o^)" << std::endl; }; //6
protected:
  virtual inline const std::string getName(void) const { return _name; }; //7
  virtual inline const std::string getMark(void) const { return MYMARK; }; //8
private:
  const std::string _name;
  static const std::string MYMARK;
};
const std::string MyImpl::MYMARK("*");
}
519(・∀・)ニヤニヤ ◆SKjzm2Ah6. :04/07/07 23:33
>>518 は今ちょこちょこっと書いたものです。まあだいたいの感じだけ。

でもって質問なんですけど、あとから継承するかもしれないので
こんな風に自作クラス内のメンバ関数は全部 virtual を付けてるんですけど、
これって間違ってますか?

2 とか 7 とか 8 とか、virtual にしちゃっても問題ないんでしょうか。
こういうときは virtual をはずせ、とかいうのはありますか?
>>519
> こういうときは virtual をはずせ、とかいうのはありますか?

そのクラスに仮想関数による動作がまったく必要なくて、
且つ、仮想関数テーブルの存在によって無視できない問題が発生するとき。
>virtual inline
ってあるけど仮想関数はinline展開されねーぞ
>>521
されるよ。
>>522
MyImpl mi;
mi.fooBar();

と書いたときしかされないだろ。
でこんな使い方はこの場合そんなに無いだろ。
MyAbstractを定義してあるくらいだし。
>>523
そりゃそうだが、知らない人が>>521を見たらそういう解釈はできないだろ。
>>519
2・3・4の間でTemplate Methodパターンを成立させるつもりなら2は外す。
3と4には個別にきちんとした意味があり、
2はMyAbstractでたまたまこう実装されているだけなら外さない。
(まあtoString()ならvirtualで正しいだろう。)

7・8はvirtualと記述しなくても基底クラスの定義を受けて自動的にvirtualになる。
virtualでないときにMyImplの派生クラスをつくってgetName()をオーバーライドし、
その派生クラスのオブジェクトに対してMyImpl*経由でgetName()を呼び出したときでも、
virtual扱いで派生クラスのメンバ関数が呼ばれる。
>>521>>523
> 仮想関数はinline展開されねーぞ

なるほどー。MyAbstract 経由で呼んだらそうなるわけですね。。

>>525
> virtualと記述しなくても基底クラスの定義を受けて自動的にvirtualになる。

それは知りませんでした。。
てっきり派生クラスで virtual を外したら virtual じゃなくなるものかと。。

C++ Primer の virtual 関連のあたりをもう一度読んでみます。
ほんじゃあ、行ってきまーす☆
BCC551を使っています。
仮想関数がインライン関数になれないことは理屈でわかるのですが、
例えば

 virtual void foo() {}

このような書き方をしても、普段口うるさいBCCでさえ特に何も
文句を言ってきません。他の処理系ではどうか分からないですが、
ネット上に置かれているソースでも、結構このような書き方を
見かけます。このような書き方に対して、C++処理系がどう振舞う
べきか規格では明確に触れられているのでしょうか
クラス定義中に本体を実装してもインライン展開されるとは限らない。
inline付けてもインライン展開されるとは限らない。
virtual メソッドが絶対にインライン展開されないとも限らない。
>>528
そうなんですよね
インライン展開できないケースでは、BCC は丁寧に展開できない
理由まで述べて、その旨の警告を発するので、あえて出さない
のには、何か規格上の理由があるからなのだろうかと思ったので。
>>527
もちろん明確に触れられている。
インライン展開が可能であれば、インライン展開しても良いし、しなくても良い。

>仮想関数がインライン関数になれないことは理屈でわかるのですが、
なれないことは無い。例えば:

class base {
 public: virtual void run() {};
};

class derived : public base {
 public: virtual void run() { if (...) base::run(); };
};

というような、ごくありがちでかつインライン展開可能な例なんかもある。
ああ根本的なところで誤解してたんですね…
納得がいきました。

≫virtual メソッドが絶対にインライン展開されないとも限らない。

≫>仮想関数がインライン関数になれないことは理屈でわかるのですが、
≫なれないことは無い。
hoshu
プログラムを書くときUML等を使って設計していますか?
ここの住人的UMLの重要性を教えていただけません?
>>533
客への納品物の一種。
紙数を稼ぐのに使う。
設計書と同様、ハッタリ。
>>533
ユースケースは絶対に書く、
これ顧客の要望の確認でもあるので必須
あるファイルと同じディレクトリにあるファイル全てに対して同じ操作(具体的にはテキストファイル中の
単語の出現頻度を調べる)をしたいのですが、何かいい方法はありませんか?
boost::filesystemとかどうよ
>>536
いい方法の基準がわからん
思いっきり環境依存だしC++よりスクリプト書いたほうが早そうだな
540536:04/07/11 16:40
>>537
ググってもよくわかりませんでした。すみません。
>>538
とりあえずVisual C++で作れればどんな方法でも構わないです。
>>539
やはり環境依存ですか。UNIXのシェルスクリプトなら少しは書けるから、
できればそちらでやりたいんですけど、VC++でWindows用に作るように言われてまして…
リナならシェルスクリプトで簡単に書けるな
Singleton パターンを使いたいんですけど、
static MyClass * getSingleton() で
static MyClass * m_inst を返すようにすると、
だれも delete する人がいませんよね?

static void deleteSingleton() とか作って
使った人が自分で消すようにしちゃうと、
じゃあ他の人が使ってたらどうするの?
ってことになっちゃうし・・・

参照カウンタとか shared_ptr とか使わないと
まともな Singleton 実装はできないんでしょうか?

それともプログラム実行中はずっと生かしておくのが
普通の使い方なんでしょうか?

酒が入ってるのでうまく伝わらないかも知れませんが、
よろしくね♪ 以上、高卒童貞22歳サラリーマンでした☆
>>542
参照カウンタはシングルトンに使えない。

{
SmartPtr p=Singleton::inst();
p->foo();
}

{
SmartPtr p=Singleton::inst();
p->bar();
}

こういう使い方されたら生成->破棄->生成->破棄と忙しい。
544デフォルトの名無しさん:04/07/11 20:55
>>542
キャップがないと削除できないよね?
でも削除人をこき使っちゃうと
じゃあ削除権持ってるのと同じになるの?

たらこが削除人をうまく教育すればいいだけだろ

おめーが書いたクラスに対してはおめーがたらこだ
別に荒らされたまま放っとくのが普通の管理じゃねーべよ
545543:04/07/11 20:56
ゴメン、やっぱ↑の嘘。聞き流して。
546デフォルトの名無しさん:04/07/11 20:59
>>542
全メンバが static で main が friend なんて見かけたことあるが・・・。
>>542
逃げ方としてはvirtualなデストラクタを持つクラスを一個つくってそれを継承したシングルトンにしておく
んでもってグローバル変数で定義した後始末クラスのインスタンスにSingleton生成時に登録しておく
プログラム終了時にグローバル変数のデストラクタが呼ばれるのでそのなかでdeleteする。
>>542
newしなきゃいいじゃない
static MyClass * getSingleton()
{
static MyClass instance;
return &instance;
}
じゃいかんか?
マルチスレッド対策はおくとして。
ご回答ありがとうございます!

>>543
>参照カウンタはシングルトンに使えない
>生成->破棄->生成->破棄と忙しい

理論的に使えないってわけじゃなくって
効率の問題ですよね?

漏れさんはときどきまとめて

String name = MyClass::getSingleton()->getName();
String mark = MyClass::getSingleton()->getMark();
String uhi = MyClass::getSingleton()->getUhi();

とかしたいだけなんです。。。

>>547
>プログラム終了時に

ってことなら明示的に delete する必要ってあるんでしょうか。。

まあ大したことないインスタンスだから最後まで
生き残ってたっていいんですけどー、
果たして C++ 的にそれが真っ当なことなのか
疑問だったわけです。
あ、新しいご回答を見落としてました。

>>548
C/C++ は始めたばっかりで、関数の中の static 変数なんて
使ったことありませんでした。
Singleton の実装ってそういう風にしてもいいんですか。

・・・でも結局インスタンスはプログラムの最後まで
消えないと理解していいんでしょうか。。
> String name = MyClass::getSingleton()->getName();
> String mark = MyClass::getSingleton()->getMark();
> String uhi = MyClass::getSingleton()->getUhi();
> とかしたいだけなんです。。。

なんでgetSingleton()を繰り返したいの?
ローカルに参照置いてほしいなぁ。
>>547
>んでもってグローバル変数で定義した後始末クラスのインスタンスにSingleton生成時に登録しておく
後始末クラスの変わりにatexit使うのものもいいかも.
>>550
>>548の場合なら関数呼出時からプログラムの最後まで残る
寿命を管理したいなら明示的にcreate&destroyすればよい
寿命がいつ切れるかわからないけど切れたときにはdestroyしたいってのは
Singletonには向かないだろう
Exceptionクラスの設計しているんだけど、スタック関係の設計とライン行、ファイル名の出力が上手くいかないんす。
わからないところ
 1)スタックはどこで管理するの? 個々のExceptionクラスにあったらダメだし・・・。
 今はなぜかリスト構造になってる。JavaのThrowableみたいなクラスが管理するのかなぁ?
 2)Exceptionを呼ぶ側が__LINE__とか__FILE__とか意識せずに呼び出して、あとは
 トレースかけたときに全て出力されるような実装にしたい。
教えてエロイ人。
(今はオーバーロードしてガンがってたんだけど、少しも美しくない上にこの先
Exceptionの継承先で困るだろうから・・・)
>>553
>寿命がいつ切れるかわからないけど切れたときにはdestroyしたいってのは
>Singletonには向かないだろう

ふーん、じゃあやっぱり C++ は Java には勝てないんですね。

酔っぱらってるからもう寝ちゃいます。おやすみねー♪
556554:04/07/11 22:48
sageで質問してまった、ageます。
557デフォルトの名無しさん:04/07/11 22:49

なにをいまさら・・・
558デフォルトの名無しさん:04/07/11 22:51
>>557
なにが今更だよ。1分しか経っていないだろ。
559デフォルトの名無しさん:04/07/11 22:54

アフォハケーン
560デフォルトの名無しさん:04/07/11 22:58
ああ、>>557>>555にレスしたつもりなのか。
2chで矢印なんか使うなよ。
>>553
まぁ、敢えてやるなら boost::shared_ptr とか。お勧めはしないが。
Javaだって消える保証あるの?
JavaのGCは参照カウント方式って聞いたけど
563554:04/07/11 23:06
>>562
いまどき参照カウントですかおい。
>>554
スタックの管理って何するの?
ふつうのC++例外クラスを設計するときには、はスタックのことなんか意識しないよ。
あと、「トレースかけたとき」も何のことだかよくわからない。
566554:04/07/11 23:15
>>565
まあ、実はJavaのExceptionクラスをC++に移植しようと思ってるんです。
最初は俺様設計だったんですけど、まあ勉強と言う事で。

スタックはExceptionを呼んでcatchしてまた呼んで・・・とやるときに
呼ばれたException順に分るようにする設計思想です。
「トレースかけたとき」と言うのはExceptionの種類・メッセージ・ファイル名・行の情報を
コンソールなり、デバッガなりに出力する事です。
>>562
多分>>542はぼけだからJavaもよく分かってないんでしょう
コレクションされるためには
m_inst = null;
としなければならない。
そうでなければプログラムの最後まで消えない。
もしどこかでそうするなら、それはC++でdeleteを呼んでいるのと同じ。

結局Javaのほうがぼけが育ちやすいということで了。
>>564
今のトレンドはなんですか?
>>565
printStackTrace()とかのことっしょ。
呼出スタックはC++としては持ってないんじゃないの?
持ってるとしたら実行環境でしょう。
Javaは言語と実行環境が一体化してるからその違いを見極められんのかもしれんが。
570554:04/07/11 23:27
>>569
そこを何とかC++に移植したいんですけど・・・(^^;
スタックの方はおそらくExceptionクラスの親クラスを作ってやる必要があることが分ってきました。

あとはファイル名・行番号出力なんですけど・・・。
オーバーロードと関数の初期引数に指定して何とかするぐらいしか思いつかない。後はマクロですか・・・?
>>568
incrementalか世代別コピー
>>570 あとはファイル名・行番号出力なんですけど・・・。
あきらめろ。
処理系依存なら、できる奴もあるかもしれないけど。
>>572
処理系依存処理系依存ってうるせーんだよ。
てめーはCスレに逝けバーカ。
class base{
public: virtual a( char c )=0;
public: a( int i );
};

class foo{
public: a( char c );
};

void main()
{
  foo f;
}

こうするとベースクラスの純粋仮想関数じゃないほうの
a( int i )が見えなくなっちゃうんだけど、どうにもならん?
575554:04/07/11 23:34
>>572
処理系はVC++です。
かなり重要な部分なのでそう簡単に諦めれませんけど(^^;
まあ、最悪Exception投げるタイミングで__LINE__と__FILE__を記述するのか・・・(泣
>>570
行番号、ファイル名を使うならマクロを使うことになるだろう。
マクロを使うことになると、派生した例外クラスをどう扱うかが問題になるだろう。

C++はJavaではないということを受け入れたほうが楽になれるだろう。
>>573
お前はHSPスレに行きなさい。そこがお似合い。
578デフォルトの名無しさん:04/07/11 23:36
>>576
よくいるよな、ちょっと似てるからって継承にしたがる単純ヴァカ
>>566
>スタックはExceptionを呼んでcatchしてまた呼んで・・・とやるときに
>呼ばれたException順に分るようにする設計思想です。
この部分に非常にひっかかるんだが。
それはスタックじゃなくて「発生源となったException」のほうじゃないか?
フィールド名称は忘れたが、Exceptionを引数にとるコンストラクタが関係するやつ。
#define THROW(exception_type) throw exeption_type(__FILE__,__LINE__)
581デフォルトの名無しさん:04/07/11 23:39
582デフォルトの名無しさん:04/07/11 23:40
>>574

  ∧ ∧     ┌─────────────
  ( ´ー`)   < ミエネーヨ
   \ <     └───/|────────
    \.\______//
      \       /
       ∪∪ ̄∪∪

何の関係もねーだろ、てりめーだヴァカ

# 言い方キツい理由わかるかな?
>>580
それダメ。
まだ寝ないで小泉自民の逆転劇を見ようとしています。

>>567
>多分>>542はぼけだからJavaもよく分かってないんでしょう
>コレクションされるためには
>m_inst = null;
>としなければならない。

なるほどね! C++ (1ヶ月学習で実戦配備中) は
最後に delete しなきゃいけなくて、
Java (半年学習。実務経験なし) に比べると
マンドクサイと思ってましたが、Singleton に関しては
別に大差なかったんですね。

とにかく今は delete が嫌いでして、

try {
  array<MyClass *> uhi = createMyClasses();
  for (int i = 0, n = uhi.size(); i < n; i++) {
    uhi[i].uhirinko();
  }
} catch (...)
  for (int i = 0, n = uhi.size(); i < n; i++) {
    delete uhi[i];
  }
  throw;
}
for (int i = 0, n = uhi.size(); i < n; i++) {
  delete uhi[i];
}
585デフォルトの名無しさん:04/07/11 23:43
586554:04/07/11 23:44
>>576
そうでつか・・・、まあ、地道に呼び出し側で書いておきます・・・

>>578
単純ヴァカか・・・。単純ヴァカは良いぞ。色々得するから。

>>579
それです(w
おそらくJavaではExceptionをスタックに詰めていると思われたんで。
説明下手でスマソ。
あ、途中で書き込んでしまった。

>>584 とかみたいに書かなくて済むようにするために
デストラクタで for ... { delete uhi[i]; } する
MyArray を作って

MyArray<MyClass *> uhi = createMyClasses();
for (int i = 0, n = uhi.size(); i < n; i++) {
  uhi[i].uhirinko();
}

コードをこれだけに抑えてたりしてるんですけどね。
あとは boostとか使えないから auto_ptr だけ自作したりもしてます。

ほんじゃあ、今度こそおやすみね〜♪
>>584
そういうときはスマートポインタかなんか使ってくれ。
普通のC++使いから見たら身の毛がよだつぞ。
なんのためにデストラクタがあるか考えてくれ。
589588:04/07/11 23:46
>>587
してんのかよ!
auto_ptr。。。
>>582
記述ミスくらい許したれよ

usingでどうにかならんかったっけか?
>>590
なんか文句でも?

shared_ptr なんて高級なもんは作れねーよ、バーロー!

明日から会社かー、もういやだよー。
>>584
そのdeleteは使えねーだろ
あ、うそうそ。>>592は取り消します。
みんな忘れてね。ほんじゃあ、おやすみね〜♪(三回目)
>>593
あー、ちょっと間違えただけ。
ほんとは try の前で array だけ宣言してるの。。
>>592
辞めちまえ。楽になるぞ♪
>>592
そのaut_ptrはコンテナにいれるんだぞ。
約束だぞ(はぁと
598デフォルトの名無しさん:04/07/11 23:56
>>591
記述ミスは許してるよ
記述ミスに至る過程を責めている
>>597
コンテナってなあに?【ピュア】(←古っ!)
vectorやmapとか
>>599
中華がよく入ってる奴
>>600
あそっか。

てか、>>597の意味がまだ理解できないのは
漏れの脳みそが非可逆的に腐っているからでしょうか。。
可逆も何も元からという説もありますが、、、

だれか教えてね(はぁと
いつになったら去ってくれるんだろう・・・
>>603
もうちょっとだけ!
>>597の意味が分からないと気になって
眠れなくて明日会社に行けません。

よろしくお願いします!!
>>604
だ、か、ら、>>596 (はぁと
MyArray< std::auto_ptr<MyClass> > uhi;
つーことだな
落とし穴があるから気をつけて使わないとハマるな。
>>604
C++標準化委員会が不正としている
詳しくはEfffective STL を嫁
>>605
うひ〜ん。だってPCと洗濯乾燥機のリボ払いが残ってるんだもん。。。

>>606
漏れには↓を読んでもよく分からないんですけど、それって
http://homepage1.nifty.com/munepi/articles/20020826.html
で否定されてることじゃなくて・・・?

>>608
何を不正としているんですか?

てか、このスレでだけは嫌われないようにしようとしてたんですが、
お酒を飲んだせいで本性が出てしまいました。ごめんなさい。
今夜限り (part32には) 来ませんから許してね♪
こいつ((・∀・)ニヤニヤ ◆SKjzm2Ah6.)が言ってる「auto_ptr」は自作のやつだからな〜。
そのギャグは通じんかもしれん。

参照カウンタとか上手く使ってれば耐えられるだろうな。
STLのコピーのセマンティクスを理解してるかどうかが鍵。あとauto_ptrのそれと。
>>575
スタックフレームポインタを最適化で消さないこと前提なら、%ebp レジスタから
スタックフレームアドレスを順に取り出していき、スタック先頭までさかのぼる。
で、あとはデバッグ用のシンボルテーブルファイルと照らし合わせて解析。

っつーか VC 使うなら、デバッガの機能使えば自前で書く必要ないはずだが。
自分は自作の参照カウンタつきポインタ使ってるけど、auto_ptr使ってる奴の気がしれん。
あんなのスコープ内でしか使えないじゃない(実質的に)
ソース関数から所有権もらうときとか,
シンク関数へ所有権放り投げるときとか使いません?
(というかそういう所有権が移動する使い方を本来想定しているはず・・・多分)
スコープで自動deleteして欲しいだけなら
それこそscoped_ptrってそのまんまの名前のヤツがboostに・・・
>613
基本的にすべてオブジェクト作るときに参照カウントにぶっこんでたんで、その辺は普段まったく気にしないで使ってた。
し気にしないで使えてる。
参照カウントあるならそれで全然問題無しですねぇ・・・
やっぱauto_ptrは不要って思っている人多いのかな?
616JavaLikeExceptionBase.hpp:04/07/12 00:51
#include <exception>
#include <iosfwd>

#include "boost/shared_ptr.hpp"

class JavaLikeExceptionBase : public std::exception
{
public:
  typedef boost::shared_ptr< std::exception > native_type;

  JavaLikeExceptionBase( native_type native , char const file[] , int line );
  JavaLikeExceptionBase( native_type native , char const file[] , int line , JavaLikeExceptionBase const& wrapping );
  ~JavaLikeExceptionBase() throw();

  virtual char const* what() const throw();
  void trace( std::ostream& out ) const;

private:
  native_type m_native;
  char const* m_file;
  int m_line;
  boost::shared_ptr< JavaLikeExceptionBase > m_wrapping;
};
617JavaLikeExceptionBase.cpp:04/07/12 00:53
#include "JavaLikeExceptionBase.hpp"

#include <ostream>

JavaLikeExceptionBase::JavaLikeExceptionBase( native_type native , char const file[] , int line )
: m_native( native ) , m_file( file ) , m_line( line ) , m_wrapping()
{
}

JavaLikeExceptionBase::JavaLikeExceptionBase( native_type native , char const file[] , int line , JavaLikeExceptionBase const& wrapping )
: m_native( native ) , m_file( file ) , m_line( line )
, m_wrapping( new JavaLikeExceptionBase( wrapping ) )
{
}

JavaLikeExceptionBase::~JavaLikeExceptionBase() throw()
{
}

char const* JavaLikeExceptionBase::what() const throw()
{
  return m_native->what();
}

void JavaLikeExceptionBase::trace( std::ostream& out ) const
{
  out << m_file << "(" << m_line << "): " << what() << std::endl;
  if( m_wrapping ) m_wrapping->trace( out );
}
scoped_ptr代わりにしか使わないな>auto_ptr
619JavaLikeException.hpp:04/07/12 00:54
#include "JavaLikeExceptionBase.hpp"

template< typename CplusplusException >
class JavaLikeException : public JavaLikeExceptionBase
{
public:
  JavaLikeException( JavaLikeExceptionBase const& base ) : JavaLikeExceptionBase( base ) {}
};

template< typename CplusplusException >
JavaLikeException< CplusplusException >
makeJavaLikeException( CplusplusException* native , char const file[] , int line )
{
  boost::shared_ptr< std::exception > const safe( native );
  return JavaLikeException< CplusplusException >( JavaLikeExceptionBase( safe , file , line ) );
}

template< typename CplusplusException >
JavaLikeException< CplusplusException >
makeJavaLikeException( CplusplusException* native , char const file[] , int line , JavaLikeExceptionBase const& wrapping )
{
  boost::shared_ptr< std::exception > const safe( native );
  return JavaLikeException< CplusplusException >( JavaLikeExceptionBase( safe , file , line , wrapping ) );
}

#define THROW_JAVA_LIKE_EXCEPTION( newCplusplusExceotion ) \
  throw makeJavaLikeException( newCplusplusExceotion , __FILE__ , __LINE__ )
#define RETHROW_JAVA_LIKE_EXCEPTION( newCplusplusExceotion , wrappedJavaLikeException ) \
  throw makeJavaLikeException( newCplusplusExceotion , __FILE__ , __LINE__ , wrappedJavaLikeException )
#include <exception>
#include <stdexcept>
#include <iostream>

#include "JavaLikeException.hpp"

int main()
{
  try
  {
    try
    {
      THROW_JAVA_LIKE_EXCEPTION( new std::runtime_error( "origin" ) );
    }
    catch( JavaLikeException< std::runtime_error > e )
    {
      RETHROW_JAVA_LIKE_EXCEPTION( new std::runtime_error( "wrap" ) , e );
    }
  }
  catch( JavaLikeExceptionBase e )
  {
    e.trace( std::cerr );
  }
}
621620:04/07/12 00:56
むしゃくしゃしてやった。
別にJavaっぽくなくてもよかった。
今は反省している。
622デフォルトの名無しさん:04/07/12 00:56
>JavaLike
スレ違い
JavaでもC++でもない独自言語はスレ立てるべきでもない
自前のサーバーでやってろ
例外ってconst参照で受けなくて言いの?
>>623 Javaではそんなことしませんw
Javaかよw
>>623
参照では受けるがconstである必要はない。
回復情報や追加情報をのせて再送することも、もしかすると、あるかも知れん。
参照でなくてもいいじゃん
auto_ptr は関数の戻り値に使うことが多いし、
const つけて、scoped_ptr の代わりにも使う。
shred_ptr のコンストラクタに auto_ptr を受け取るものもあるし。

結構便利に使ってる。
629デフォルトの名無しさん:04/07/12 10:13
>>44
そうだよ。マナーの問題だから。
>>574,591
fooに
using base:a;
>>630
using base::a;
class foo: public base {
listとvectorってみんなどっち使ってます?
もちろん、適切な方がある場合はそっちを使うべきだけど
どっちでもいい場合はどっち使う人がおおいのかなーと。
634デフォルトの名無しさん:04/07/12 21:02
>>633
どっちでも良けりゃ配列
635deque:04/07/12 21:02
>>633
わたしゃ無視ですかい?
速度面で末尾での追加削除が起こるだけでもvectorよりdequeの方が速い事実は知らない人が多い。
>>636
そうなの?なんで?
>>636
知らなかった。
じゃあvectorって何?
640デフォルトの名無しさん:04/07/12 21:25
複数のコンテナに共通する機能しか使わないときに vector もクソもあるか ぼけ
vectorの方が消費メモリが少ない事がある。
vectorはCAPIと互換性がある。
>CAPIと互換性がある。
たまにcharのバッファとして使ってるの見るとちょっとびっくりする。
どうもなれないな。
VC6+STLPortだと2倍くらいvectorのほうが速いよ
vectorもちゃんとreserveすればdequeと変わらないよ。
要素数が予測できない時はdequeのが全然速いよ。
定数オーダーでランダムアクセスしたいときと、あらかじめ個数が分かってて
明らかにコスト低そうなときしか vector は使わないな・・・
dequeも定数オーダーでランダムアクセスできるよ
だからコンテナくらい自分で作ってチューニングしろと。
そんな無意味な事しないよ・・STLになかったらboost探すし
treeコンテナも標準で付いてねえのかよC++は
>>647 allocatorだけじゃなくてコンテナも自前で作るの?
プロなら当然だろ
コンテナなんていってないでコンパイラも作ってくださいよ
スレ違いでし
「コンパイラ・スクリプトエンジン」相談室 3
http://pc5.2ch.net/test/read.cgi/tech/1070089173/
現場で「オレの作ったコンテナの方がスゴイから俺コンテナを使ってくれ」
と言えればねぇ
>654
問答無用で却下ですね。
俺参照カウントつきポインターは使わしてるが
deque のメモリレイアウトが未だに分からないオレ。
vector 見たいに一直線に並んでるわけじゃなさそうだし…

deque の中の人は何やってるんだ?
657574:04/07/12 23:13
>>582 きもい。

class base{
public: virtual void a( char c )=0;
public: void a( int i );
};

class foo : public base{
public: void a( char c );
};

void main()
{
  foo f;
}

これでいいか?
-public: virtual void a( char c )=0;

+using base::a;
659574:04/07/12 23:18
>>630 サンクス!
660574:04/07/12 23:19
>>658 もサンクス!
試してみる!
class A
{
// 省略
public:
template<class T>
T foo() { return reinterpret_cast<T>(hoge); }
};


A a;
a.foo<int>();

これがコンパイルできないのはVC6.0のせいですか?
>>661
エラーメッセージ貼ってみな。
663661:04/07/13 00:09
>>662
error C2062: 型 'int' は不要です。
664661:04/07/13 00:11
失礼
>>663が出るのは a.foo<int>(); のところです。
>>661
yes

>>661
class A
{
// 省略
public:
template<class T>
T foo(T) { return reinterpret_cast<T>(hoge); }
};
A a;
a.foo(int ());

VC6.0持ってないんだけど
じゃだめかい?
667661:04/07/13 00:28
>>666
fooのキャストのところで
error C2440: 'reinterpret_cast' : 'int' から 'int' に変換することはできません。
がでましたが、Cスタイルのキャストにすることで通りました。
つかintからintに変換できないなんて…
.NET欲しいです。
reinterpret_castってポインタにしか使えないんじゃなかったっけ?
文 reinterpret_cast< T >(arg)で は,
ポインタ,参照,算術型,関数へのポインタ,またはメンバーへのポインタでなければなりません。

ポインタは整数型に明示的に変換できます。

整数 arg はポインタに変換できます。ポインタを整数型に変換した後,
同じポインタ型に変換しなおすと結果は元の値になります。

未定義のクラスをポインタ変換あるいは参照変換で使えます。

関数へのポインタは,オブジェクトのポインタ型が関数ポインタを保持するのに必要なビットを持つ場合,
明示的にオブジェクト型へのポインタに変換できます。オブジェクト型へのポインタは,
関数のポインタ型がオブジェクトポインタを保持できる大きさである場合にのみ,
明示的に関数へのポインタに変換できます。
670666:04/07/13 00:58
>>668
本当だ.
661にはhogeの型が書いてなかったので,
適当にprivateセクションに
int hoge;
を補ってやってた.
g++だと
reinterpret_cast <int> (double ());
はエラー出すけど,
reinterpret_cast <int> (int ());
は出さない.
668の見解だと後者はエラー出すべきなのかな?
呼び出し側のテストなら
 template<class T> T foo();
で十分だろ。
>>668
そんなことないよ。
673666:04/07/13 01:13
>>661
667をみるにhogeがintなら,
そこは何故reinterpret_castなの?
static_castのような気がするんだけど.
STLは今後死滅しますか?
死滅しないまでもアルゴリズム一般の勉強をしたほうがマシですか?
STLの死滅とC++の死滅は同時だろうな。
>>674
STLの命運はC++の命運より長い気はする。
二行目は文の接続が変じゃない?
>>675
結婚と思いきや意見が分かれますね。
離婚?!
678デフォルトの名無しさん:04/07/13 13:39
void f() throw();
のthrow()って何ですか

関数の中で例外投げますよって意味?
それとも関数の中で処理しなかった例外は呼び出し元に任せますよって意味??
C++では意味無いから覚えても意味無い
>>678
例外投げませんよ。
ありがとうございます
まるっきり逆だったのか…
>>675-677
性格の不一致ですね。
>>678
それを付けると例外クリーンアップコードを挿入しなくなるので速度&サイズ共に
わずかに上がるはず。しかし実際に試してみたら差がなかった。環境にもよると
思うが。組み込みに使う時は付けろ付けろとうるさい。
>組み込みに使う時は付けろ付けろとうるさい。

コンパイラが?
>>684
資材部だと思われ
operatorの継承ってできないのでしょうか?
operatorはオブジェクトじゃないからな。
>>686はたぶんoperator=が継承されなくて悩んでるんだと思われ。
=は出来ないのが仕様。
>>688はエスパー
690デフォルトの名無しさん:04/07/13 21:41
>>686
operator=は定義しなくてもデフォルトの関数が暗黙に定義されるよな?
それで継承したやつが隠されてるんだよ
double と float ってどっちの方が高速に計算できますか?
旧処理系ならdoubleの方が速いが、今はどちらも同じ
ってとこかな
693デフォルトの名無しさん:04/07/13 21:57
>>691
処理系による
処理系Aでの結果を処理系Bでの必然と錯覚するアフォが後を絶たない
694デフォルトの名無しさん:04/07/13 21:59
>>693
ソレハネタデスカ?
>>683
パフォーマンスが落ちることもあるよ。「上がるはず」とは言えない。
効果は同じでもfloatを引数に取る関数とfloatを引数に取る関数とがあったら
そこをちゃんと区別しないといちいち変換が掛かって効率が悪くなる。
ただしどれぐらい違ってくるかはわからないが。
>>696
同じジャン
>>690
隠されないようにするには?
CMyClass& operator=(int i)
{
CSuperClass::operator=(i);
return *this;
}
700デフォルトの名無しさん:04/07/13 22:29
700get
701デフォルトの名無しさん:04/07/13 22:55
猫    動物    哺乳類
桃    植物
蛇    動物    爬虫類
犬    動物    哺乳類
・・・
・・・
・・・

mona.txtというファイルにこのようなTABおよび改行で
区切られた文字列が存在する場合、


a[0][0] 猫
a[0][1] 動物
a[0][2] 哺乳類
a[1][0] 桃 
a[1][1] 植物
a[2][0] 蛇
a[2][1] 動物
a[2][2] 爬虫類
・・・
・・・
・・・

のように2次元配列にするには、どうすればいいですか。
>>698
strcut Derived: Base
{
using Base::operator=;
};
>>701
一生懸命読み込んでください。
>>701
宿題?
705デフォルトの名無しさん:04/07/13 23:21
Cでは、出力するとき、
printf("");
を使って、C++では、
cout << "" ;
を使うことを最近知ったんですが、
microsoft visual C++ 6.0を使っていたのでC++でプログラミング
していると思っていました。
けど、printfを使っています。
これはCを使っていると言うことなんでしょうか??
C++はCのライブラリも使えるということはご存知?
707デフォルトの名無しさん:04/07/13 23:28
いや知らないです。
と言うことは、coutでもprintfでもつかえるということですか?
>>707

double d=1.23;
printf( "%4.2f", d);

をcoutでやろうとしたらどうなるか知ってますか?
709デフォルトの名無しさん:04/07/13 23:48
すいませんよく分からないです。
ためしにやってみたけどcoutが使えなかったです。
>>709
VCなら
std::cout
711デフォルトの名無しさん:04/07/14 00:03
・・・分からなかったです。
実は私も知らない...orz
>>708
どうやってやるんですか?
拡張子
double d=1.23;
char s[ 64];
sprintf( s, "%4.2f", d);
cout << s;

違うかな?
私ならはじめからprintf()使います...orz
>>715
かろうじてprintf()使ってない感じで
ワロタ
>>716
ちょっと狙ってはいましたが光栄です。
>>708
まじめにやるとこんな感じかな(boost使う場合と使わない場合の両方で)
#include <iostream>
#include <iomanip> 
#include <boost/format.hpp>
int main(){
    double d=1.23;
    std::cout << std::fixed<<std::setw(4)<<std::setprecision(2) << d << std::endl;
    std::cout << boost::format("%4.2f\n") % d;
    return 0;
}
まぁprintfマンセーということで。
型安全じゃないとか、欠点も数多いが、なんだかんだ言っても、
やっぱり単純に便利なんだよprintfは。
私はやっぱりprintf()使うことにします。
722デフォルトの名無しさん:04/07/14 01:33
boostなんて糞
遅すぎてつかいものにならん
使いどころを見つけるのがめちゃくちゃ下手糞なんですね ;-)
boostが、遅い?
・・・あぁ、リリーススケジュールのことか。
稲葉さんこんばんわ
boost::spiritはコンパイルが遅すぎだね。
boostはどこまで巨大化していくんだろう?
10年後にはえらいことになってそうな気が。
前、cppll BBS で、こんなの見つけた。

double d = 1.23;
cout << ( "d = " % _f["4.2"] )( d ) << endl;
>>727
ライブラリの巨大さとバイナリ出力ファイルのサイズへの影響を誤解する馬鹿も増えてそう。
そんな馬鹿が増えると心配する馬鹿は>>729だけ。
や、やっぱりprintf()が最強でしゅね。
>>730
現時点でも多いけどな、テンプレートの特性を知らないアフォ。
export
すげえ。ダイナミックリンク(ry
import
impo orz
>>692
あとはハードウェアにもよる。PlayStation 2 なんかだとコストを削減するため
数値演算コプロセッサは単精度浮動小数点演算のみのサポート。倍精度は
ソフトウェア的に処理するからムチャクチャ遅い。
クラスAを
グローバルとクラスBのメンバとして宣言するために

クラスAの定義を書いたヘッダーを
main.cppとクラスBの定義を書いたヘッダーでインクルードすると
もう定義されてると言われますが

こういう場合どうすればいいんでしょうか?
>>738
インクルードガード
意味がわからんかったらググれカレー
>>738 ヘッダファイルにインクルードガードをつける
>>739-740
どうもでした
冗長インクルードガードってやるに越したことはないでしょうけど、
実際やってる人ってどのくらいいるのでしょう。
私はせいぜい内部インクルードガードで済ましちゃってます。
実際、コンパイル時間とかそんなに変わるものですか?
10年前のマシンならあったほうがいいのかも。。。
>>742
新規ヘッダはすべてやってるよ
VCのクラスウィザード使うとインクルードガードが記述されるじゃん。
インクルードガードって単語知らなかったよ。
名前を知らなくても自然に習得するような希ガス。
そんな言葉は始めて聞いた。ただのいふでふじゃねーか
お前らの使ってるインクルードガードは偽物。
本物のプログラマーが使うのはこれ。
#ifdef MYHEADER_H
#error MYHEADER_H
#endif
#define MYHEADER_H
747デフォルトの名無しさん:04/07/15 08:09
http://www.open-std.org/jtc1/sc22/wg21/
> News 2004-07-14: The C++ Standard Library Issues List (Revision 30) is available.
>>742
冗長インクルードガードはやってるのを見たこと無いな。
実際言葉も知らなかったし。
ググッた先のページ見たらコンパイル時間もほとんど変わらないようだ。
インクルードガードって用語初めて知って、
早速今日、会社で使っている香具師いるだろ。
なっ、そこのもまえw
#pragma once使えよぼけ
習慣として両方入れてる。
つーかここ1年ぐらい1からヘッダファイル自分で作った記憶がないな。
そんなもんにIDEの仕事だろ?
インクルードガード知らないのって問題あるだろ。
Webで見た限り、冗長インクルードガードなるものの優位性がわからんのだが・・・。
マクロ変数を複数ヘッダーファイルで共有する必要がある時点でアフォだと思う。
>>754
一万行のヘッダファイルがあったとして
冗長なしだとプリプロセッサが数万行処理するのに対して
ありだと一万行で済むとかそういう話じゃないの。
コンパイル速度にはほぼ影響しないだろうね。
コンパイル時間ではなくコーディング時間の短縮こそが
プログラマの努力すべき課題だしね。
エンドユーザにとってコンパイル時間なぞどうでもいいし。
プリプロセッサって
#if 0〜#endifの領域ってどう処理するんだっけ?
コメントと同様にスペースに置換?
コンパイラに依存する処理を、具体的な製品名を上げずに、そこで質問して何を得ようというのか、
分かりやすくかつ明確に答えてください。
配列の初期化で

char buf[100] = {0};

とやると、最初の要素の後ろが全て0で初期化されると聞いたことがあるんですけど
これは言語規格で定められているんですか?
VC++6.0ではそのようなコードが吐かれているのを確認したのですが…
760デフォルトの名無しさん:04/07/15 13:55
>>759
その通りに規格で決められています。構造体も然り。
>>757
#if 0と#endifの行自身も含め改行文字以外を削除。
一応#if 0と#endifの中もソースコードの扱いなのでその中でもコメントなどは認識される。
762760:04/07/15 14:19
>>760
ありがとうございました。
今までmemsetとかstd::fillでやってましたが
こっちの方が見た目すっきりしてていいですね。
>>762
指定しただけプログラムのサイズが増えるからやめとけ。
サイズくらいきにすんなよ〜
>>764
むしろサイズこそ全て。
無駄に無駄を許容するのはC++の美徳に反するな
10倍に?
768デフォルトの名無しさん:04/07/15 14:48
volatileの扱いですが

struct A {
 void func() {
  i=1; //(1)
  i=2;
 }
 volatile int i; //(2)
};
A a;
void main() {
 a.func();
}

a) VC7.1で上のコードをそのまま実行するとfuncがmain内に
inline展開されるんだけど、(1)のコードが実行されていない模様。
b) (1)を何度も繰り返した場合、inline展開されずfunc内で全ての
代入が行われている。
c) (2)を非volatileにした場合、a/b)のいずれの場合でも(1)は省略される。
d) (2)をvolatileのままグローバル変数に移動するとa/b)のいずれの場合でも
(1)は省略されない。

私のイメージとしては(b)〜(d)は正しく、(a)がおかしいような
気がするのですが。これって
i) VCのバグor仕様
ii) C++の仕様(メンバ変数にvolatileつけるのが間違ってる)。
のどっち?
volatile A a;
770768:04/07/15 15:33
>>769
それでもa)に関しては結果変わらず。
771デフォルトの名無しさん:04/07/15 16:28
#include <stdio.h>
int a;
int main()
{
char str[127];

printf("文字列を入力してください(127文字以内)\n");

scanf("%s",str);

for(a=0;a<128;a++){

str[a]=str[a]+1;

printf("\t%s!\n" , str);
}
return 0;
}

これってどうよ?
>>771
バッファのサイズが小さくない?
>>771
-for(a=0;a<128;a++){
+for(a=0;a<127;a++){
str[a] = str[a] + !!str[a]; の方が良くない?
>>771,774
これは一体何をしたいの?
776デフォルトの名無しさん:04/07/15 17:41
グローバル変数にしてる意味はなに?
>>768
volatileに定義などない!
>>771
>scanf("%s",str);
sgets(str, sizeof str / sizeof *str, stdin);かscanf("%127s", str);
>str[a]=str[a]+1;
str[a]++;かstr[a] += 1;
>int a;
どうでもいいがループカウンタの変数は i が一般的
for (int i = 0; i < sizeof str / sizeof *str; i++)
仕事じゃiなんか使わないけど
ひでえ仕事だな
本当にどうでもいいな
>>768
むしろ最適化を切ってみたらどうか?
>>779
まさかiCountとか...(((( ;゚Д゚)))ガクガクブルブル
キモスギル
だからiの話はするなとあれほど言ったのに・・・
>>775
たぶん >>774 は、末尾の '\0' に1足さないようにするため。
idxじゃだめ?
ローカル変数にはtheを付ける。
theIdxみたいな感じ。
マジかよ
適当な名前付けでわかりにくくならない?
ローカルの l をつけて混乱させる
li1とか
メンバ変数の接尾辞には_付ける・
ローカル変数は普通に。
グローバル変数はglobal名前空間の中に。
ループ変数はi,j,k…
但しループさせるのがx,y座標だったらx,y
グローバル変数にはgを付ける。
gFlagみたいな。
分かりにくい書き方しちゃったけどglobal名前空間は
::
じゃなくて
global::
の事ね。
あとでエディタの一括文字列変換とか使うときに、
そこそこ冗長な名前にしておいたほうが都合がいいことがあった。
だから、あまりiとかjとかって短いのは抵抗があるな〜。
>>791
オレも同じ。
あと変数名は単語の区切りには_使う
メンバ関数名は最初は小文字、その他各単語の最初は大文字
母音を省略するような真似はしない
変数の役割によってなんか付ける。
Cnt・・・カウンタ。例:LoopCnt
Tbl・・・テーブル、配列。例:DataTbl[ ...]
>>785
なるほど.774のアドバイスの意図は分かりました.
が,771は一体何なんだ?
774がレスしてるので分かってるのかと思い振ってみたのだけど.
iCounterってキモイ?
結構やってる人、多いんじゃない?
>>797
たんに「ROT1 を動かしてみて、文字コードというものについて実体験しましょう」
ってあたりじゃないのかなぁ。(rot1 は rot13 からの造語ね)
>>798
あんましいないだろ。
>>798
漏れ的には "i" には強くインデクサっぽい意味を感じてしまうので、
個人的にはカウンターとか個数とかには絶対使わない。

インデックサじゃないカウンタや個数は cほにゃらら、にする。
自分の世界が全世界
iはインターフェース
Windowsプログラミングならね...
>>803
大文字でしょ?
>>803
Iだろ
iは世界共通の愛
int i;

ってやるとコンパイルエラーになるんですけど...orz
なんか空きが長いぞ
全角スペースでした。逝ってきます...0rz
std::string str;
char chr;
int integer;
double real;
>>810
なんか顔が長いぞ。
doubleを打ち込むとき、今でも「どうぶる」と
口ずさみながらキーボード叩いてます。
そんな人は私以外にも全世界に3人はいると思います。
なんだか今日はほのぼのしているスレですね
charはキャラだよ
integerって昔、ホンダが車出してなかたっけ?
それを言うなら、integra?
スペル間違えたかも。まあ、確かに紛らわしいが。
トヨタはキャピだっけ?
>>813
私もです。
                \ │ /
                 / ̄\  / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
               ─( ゚ ∀ ゚ )< ストゥディオ!
                 \_/  \_________
                / │ \
                    ∩ ∧ ∧∩ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ ∩∧ ∧∩\( ゚∀゚)< ストゥディオ!
ストゥディオ〜〜〜〜! >( ゚∀゚ )/ |    / \__________
________/ |    〈 |   |
              / /\_」 / /\」
               ̄     / /
いてらとら
>>813
俺もだ
823デフォルトの名無しさん:04/07/15 20:24
こうと
824デフォルトの名無しさん:04/07/15 20:29
2つの行列の計算を行うプログラムがわかりません;;
教えて欲しいです。2行2列で。
宿題はすれ違い
826デフォルトの名無しさん:04/07/15 20:32
Javaってなんの言語で出来てるの。
C++で出来てるって聞いたけどホント?
JavaはJava言語でできてます。
Javaコンパイラが何でできてるかは、コンパイラを作った会社に聞いてください。
828デフォルトの名無しさん:04/07/15 20:53
だっせー
Java3Dは何でできてるの?
赤ちゃんはどうやってできるのぉ?
コウノトリさんがはこんでくるのぉ
std::string s;

s.c_str() が返すアドレスと &*s.begin() で得られるアドレスは
同じことは保証されているんでしょうか?
それとも実装依存ですか?
>>832
保証されてない
>>832
前者はconst char*で後者はiteratorが返るんだ。違って当然。
>>834
ha?
>>834
すげえ知ったかですね
>>834
>&*s.begin() で得られるアドレス
838834:04/07/16 00:04
攣れた!
でました。苦し紛れの釣り宣言。みっともないね。
また釣れたw
841839:04/07/16 00:21
釣れた!
      ゃ    こ
    じ             の
 
 ん                   ス

な         ぁ   っ         レ
       ぁ         !
                       は
      ぁ      !  !
                      あ
      ぁ
                    あ
         ぁ       あ
             ぁ
日本で一番早く梅雨が明けたスレはここです
844デフォルトの名無しさん:04/07/16 00:32
BCC5.5を使っています。
メニューをクリックしたら画面に文字を出力するプログラムを組んでいます。
でも、どうしても画面に出力した文字が ¢ になってしまいます。
どうしてでしょうか。
845844:04/07/16 00:33
嗚呼しもた。
Windowsアプリケーションを作っています。
一時オブジェクトの寿命なのですが

class A
{
public:
void func() { /* 処理 */ }
};

A& hoge(A& a)
{
return a;
}

hoge(A()).func();

VC++6.0の場合、funcが呼び出しが終わった後に一時オブジェクトのデストラクタが走りました。
また、
hoge(A()), hoge(A());
としたら、2番目のhogeのA()のデストラクタ→最初のA()のデストラクタ、となりました。

ということは、一時オブジェクトの解体は ; までの処理が終わったときに行われる
という解釈でいいのでしょうか?

>>846
そだよ。
>>847
ありがとうございました。
今まで意識したこと無かったのですが、うまいことできてますねC++って。
>>834は正しいんじゃないのか?
ANSI準拠が進んだVC.NETで試してみ。別物として弾かれるはずだ。
850849:04/07/16 01:26
記憶違いだった。
記憶とかの問題じゃないから
>>822
全世界であなたで3人目です。
>>853
感動をありがとう
ドウブル型ワロタ
>>853
よく見つけた(w
857デフォルトの名無しさん:04/07/16 09:05
ドイツ語ではドウブルと読むはず。
どうぶるではなく、どうぶれな俺は1人目。
>>857のアフォな提言に触発されてググってしまった。
ドイツ語ではdoubleではなくdoppel。

以後、ドッベル型でおながいします。
ちなみに英字郎(http://www.alc.co.jp/)でdoubleを引くと
・ double
【名-4】 《音楽》ドゥーブル(の曲)
なんて意味もある.
ドッペルゲンガーの「ドッペル」ってそういう意味かあ。
勉強にナルネ。
>>860
フランス語圏ではド(ゥ)ーブル。
もしかしてドイツ語対応のC++コンパイラなんてあるのかな?
とふと思ったりして。
ウムラウトとかめんどいかも。
標準ライブラリの関数名もドイツ語とか。
ああ、また一から勉強かよ...orz
つまんね
>>863
なかったらドイツ人どうするんだよ
へ、あんの?
オンドゥル語コンパイラも作って
869デフォルトの名無しさん:04/07/16 13:05
VC6からVC2003ToolKitにかえたら
テンプレート引数に浮動小数点型が指定出来なくなりました。
どうやらISOに準拠した為なんですが、なぜそうなったのでしょう?
何か理由があるんですか?

template< float f > ← エラー
>>869
コンストラクタの引数に取ればいいだけじゃないか。

ただ、それだとそれを添え字にする配列を作ったりできないし、
型名を引数に取ってその型の変数を作ることもできない。
だからテンプレートって仕組みでやれるようにした。
逆にそれ以外はテンプレートの出番じゃないってこと。
871デフォルトの名無しさん:04/07/16 13:39
#include <stdio.h>

int a;

int main()
{
char str[128];

for(a=0;a<128;a++){


printf("文字列を入力してください(127文字以内)\n");
scanf("%s",str);
if(str[a]==NULL)
{
break;
}
str[a] = str[a]+1 ;
printf("\t%s!\n" , str);

}

return 0;

}
>>871
#include <stdio.h>
int main()
{
 char str[128];
 printf("文字列を入力してください(127文字以内)\n");
 scanf("%127s",str);
 for(int i = 0; i < 127; i++)
  if(str[i] == '\0')
   break;
  else
   str[i]++;
 printf("\t%s!\n" , str);
 return 0;
}
std::basic_stringのことなんですが
VC6に付いてる<string>を見ると

std::string a("abc"), b;
b = a;

とすると、aとbが保持する文字列の実体は同一で、参照カウンタで文字列の実体の寿命を管理してました。
参照カウンタはクリティカルセクション等で保護されてないようなので
a, bを別々のスレッドで同時に操作すると危険ですよね?
また、

std::string a("abc"), b;
b = a.c_str();

とすると、a, bが保持する文字列実体は別々になるようです。

こういう振る舞いを定義してる規格とかあるのでしょうか?

スレッドに渡す文字列を上の b = a; のように渡すと危ないですよね。
かといって b = a.c_str(); として、別の実体が作られることを期待していいものかどうか…

ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/vcstdlib/html/vclrfthreadsafetyinstandardclibrary.asp
>For writes to different objects of the same class, the object is thread safe for writing:
>・From one thread when no readers on other threads.
>・From many threads.

これには安全だと書いてありますが、上の b = a; では当てはまらないのではないでしょうか?
876873:04/07/16 15:55
>>874-875
まさにこれですね。
いずれ.NETを買うつもりですがとりあえず
前から入れようと思ってたSTLPortを入れてみます。
ありがとうございました。
C++ では stdio をやめて、sprintf とかでも ostringstream にした方がいいですか?
Effective C++ では stdio とは決別すべきと書いてあったのですが、イマイチ踏み切れません…
ostringstreamがそんなに嫌いならboost::formatを使え。
sprintfがどうしても使いたいならsnprintfを使え。
あ、嫌いじゃないですよ。全然。
ただ MS とかのコード見ててもあまり登場しないもんだから
なんか問題があるんじゃないかと思ってたわけです。。
printf 系の場合、

string s = "aaaaa";
printf( "%d", s );

とかやってもコンパイルエラーにならない。
その点、basic_ostream 系ならば、そのあたり適切に判定してくれるし、
自分で型定義もできて便利。
>>832
ランダムイテレータ の場合、ita と itb をランダムイテレータだとすると、

ita == itb; が true の場合、
*ita == *itb; が true を返すことは企画上保障されているが、
&*ita == &*itb; にかんしては規程されていない。

たとえば、UTF-8 文字列に対応した、UTF-8 Iterator itu があったとして、
*itu が UCS-4 のコードポイントを int で返したとしてもそれは問題ない。
882881:04/07/16 20:15
でも、>>832 は、std::string についていっているわけだから、
最後の2行は余計か。スマンな
おまいら、printf が好きですね
今のところprintfが最強だからね。
printzが最強
>>869
template<float &f> に汁
887デフォルトの名無しさん:04/07/17 00:45
「クラスAとクラスBの関連」をC++で実装する場合
これで良いのでしょうか?

class B;

class A{
    B* related_b_ptr;
public:
    A( B* b_ptr ){ related_b_ptr = b_ptr; }
};

class B{
    A* related_a_ptr;
public:
    B( A* a_ptr ){ related_a_ptr = a_ptr; }
};

関連全てにこんな事やるのは面倒ですし、感覚として間違っている
気がするのですが、代替手段が分からないんです。

例えば引数でその都度、関連クラスを渡したりすのは、第3のオブジェクトが
無理矢理必要なこともあって、全然オブジェクト指向じゃなくなる気がします。

関連って実際はどんな事なんでしょうか。
>>887
class A のインスタンスをどうやって作るんだ?
889デフォルトの名無しさん:04/07/17 00:50
>>887
friendクラスとか、入れ子クラスは?
890デフォルトの名無しさん:04/07/17 00:52
>>887
(889の続き)
どーせ、モロ依存しまくりなら
変に分離して書こうとすること自体間違ってる
>>887
クロコクラスとか、グレコクラスとか
>>887
UMLでいうところのnavigabilityが双方向ならそれでいいんじゃないですか?
「感覚として間違っている」のは、
実装方法ではなくnavigabilityが双方向であることだと思います。
循環依存ですから(それが必要なことももちろんある)

navigabilityが片方向なら、メンバとして持つなり
1対多ならコレクションでもつなりの実装方法があります。

生成は、包含なら包含元クラスで行いますし、
そうでない関連ならどこかに生成元がいるはずです。
894887:04/07/17 10:30
すいません、すぐレス頂けるとは思わず。
皆さんレスありがとうございました。

>>888-891
インスタンスはポインタを介してなどでしょうか。
疑問に思っていた関連とは、どこにでもあるありふれた関連の事だったんです。
なのでfriendや入れ子は更に大げさかなと。

>>892
おかげで良く分かりました。言われてみれば関連といえど、その実態はほとんど全てが
片方向でした。難しいだけと思っていた専門用語が、ここまで便利とは…。

生成について、しばしばパターンなどと一項目あげて大げさに
取り上げられている理由も、合わせて理解できた気がします。
char_traitsを見てて疑問に思ったのですが
char(0), char() と '\0'、wchar_t(0), wchar_t() と L'\0' は
等しくなることが保証されているんでしょうか?
#include <iostream>

class A {
public:
  static int main() {
    std::cout << "main" << std::endl;
    return 0;
  }
};

int main = A::main();

何気なく書いてみたのですが、これが動いてしまう理由がわからないです。
int main = A::main(); と書いてるのにコンパイルできてしまうってことは、
mainはデフォルトで関数ポインタとして扱われるということでしょうか?
>>896
初期化付きのグローバル変数なだけだろ。
>896
これだとメイン2回実行されるの?
手元に今コンパイラないのでわかんね
>int main
ってかいといて何言ってんだよw
>>896
コンパイルはできるのはわかるけど動く?
mainが未解決とでるんだけど。
>>896
リンカーはmainへ実行を移すコードcrt.oとリンクするけどmainの中は0が入ってる
その後ろに何があるかは環境による。
C++の処理系はmainと言うグローバル変数の初期化をcrt.oがmainを呼ぶ前に実行する
これがA::main()を実行しているのでメッセージは出力される。
vector< char > v( istream_iterator< char >( cin ), istream_iterator< char >() );
が関数宣言になる使用を思い出したのは漏れだけではないはず
何故コンパイルエラーになるか分かりません。

#include <iostream>
#include <algorithm>

struct A {
int x;
int y;
bool operator<(struct A a) {
if(this->x != a.x)
return this->x < a.x;
else
return this->y < a.y;
}
};

int main()
{
const int size = 100;
struct A a[size];
sort(&a[0], &a[size]);
return 0;
}
エラーメッセージ

/usr/lib/gcc-lib/i386-redhat-linux/2.95.3/../../../../include/g++-3/stl_algo.h: In function `const struct A & __median<A>(const A &, const A &, const A &)':
/usr/lib/gcc-lib/i386-redhat-linux/2.95.3/../../../../include/g++-3/stl_algo.h:1283: instantiated from `__introsort_loop<A *, A, int>(A *, A *, A *, int)'
/usr/lib/gcc-lib/i386-redhat-linux/2.95.3/../../../../include/g++-3/stl_algo.h:1320: instantiated from here
/usr/lib/gcc-lib/i386-redhat-linux/2.95.3/../../../../include/g++-3/stl_algo.h:46: passing `const A' as `this' argument of `bool A::operator <(A)' discards qualifiers
/usr/lib/gcc-lib/i386-redhat-linux/2.95.3/../../../../include/g++-3/stl_algo.h:47: passing `const A' as `this' argument of `bool A::operator <(A)' discards qualifiers
/usr/lib/gcc-lib/i386-redhat-linux/2.95.3/../../../../include/g++-3/stl_algo.h:49: passing `const A' as `this' argument of `bool A::operator <(A)' discards qualifiers
/usr/lib/gcc-lib/i386-redhat-linux/2.95.3/../../../../include/g++-3/stl_algo.h:53: passing `const A' as `this' argument of `bool A::operator <(A)' discards qualifiers
/usr/lib/gcc-lib/i386-redhat-linux/2.95.3/../../../../include/g++-3/stl_algo.h:55: passing `const A' as `this' argument of `bool A::operator <(A)' discards qualifiers
905896:04/07/17 15:13
レスどうもでした

>>898
1回だけ"main"と表示して終了するだけです。

>>900
bccでコンパイルして実行確認しました。

>>901
解かりやすい説明ありがとうございました。
プログラムの実行の仕組みとかも調べると、より理解も深まって面白そうですね。

>>902
使い方など、ぱっと見何だかわからないです。
勉強が必要ですね。
>>903
- bool operator<(struct A a) {
+ bool operator<(const struct A &a) const{
907896:04/07/17 15:33
恩返しにと>>903にレスしようと思ったら、既にされてましたね。
g++ではなくbccのコンパイラだと>>903みたいのでもコンパイルできてしまったりして、
環境による大きく依存があるのだなぁと感じました。

そこで、さきほどの>>896のプログラムも少し試してみました。
bccでコンパイルしてWindows上で実行すると気づかなかったのですが、
g++でコンパイルしてLinux上で実行すると、"main"を表示したあと、
Segmentation faultで落ちてました。
これは>>901を参考に解釈すると、A::main()が実行されたあとに、
mainの後ろの不定な領域を実行しようとして落ちたという認識で良いのでしょうか?
>>895 OK
>>906
>sort(&a[0], &a[size]);
std::sort(&a[0], &a[size]);
>>907
> mainの後ろの不定な領域を実行しようとして落ちたという認識で良いのでしょうか?
正解。
911906:04/07/17 16:17
>>909
2.95.3
912デフォルトの名無しさん:04/07/18 00:09
CHoge a,b,c;

c = a + b;
をできるように

CHoge& CHoge::operator+(CHoge& hoge)
{
CHoge tmp;
tmp.value = (*this).value + hoge.value;
return tmp;
}

なんてoperatorを書いたのですが、一時オブジェクトの参照を
返してもいいんですかね?
913デフォルトの名無しさん:04/07/18 00:17
this->valueとかけよ。
>912
CHoge のデストラクタで value = 0 と代入してみ
>>912
自分で参照とか言ってるのに何言ってんの?
916912:04/07/18 00:45
解決しました
一番最悪なパターンですね
なんか発情してきました
どうすればいいですか?
919918:04/07/18 03:33
解決しました
早漏ですね