1 名前:// [2010/05/21(金) 07:38:47 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.72【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1267775473/ 【初心者歓迎】C/C++室 Ver.71【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1264774545/ ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm codepad.org/ (コンパイルもできるし出力結果も得られる[]privateをチェック)
2 名前:デフォルトの名無しさん [2010/05/21(金) 10:44:31 ] tan=y/xとしててx=0の時は場合分けしないといけませんか? x=0の時はどういう処理にすれば良いのですか?
3 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 10:46:42 ] >>2 fabs(x)>fabs(y) のとき y/x fabs(x)<fabs(y) のとき x/y で計算しておいて M_PI/2 から引く
4 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 10:49:06 ] そんな貴方に atan2 じゃないの?
5 名前:デフォルトの名無しさん [2010/05/21(金) 13:31:06 ] 構造体型 構造体名前[] = { {a,b,c},{e,f,g},{h,i,j},}としておいて 構造体名前 [] = {{k,l,m},{o,p,q},}とすると0番目の配列から上書きされてしまいますか? 3番目と4番目に入れたいのですが[3]=;[4]=とわけて書かないといけないのでしょうか?
6 名前:デフォルトの名無しさん [2010/05/21(金) 13:31:48 ] すいません。4番目と5番目です
7 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 14:30:03 ] x86のFPUのFPATAN命令もx=0の時を考慮している
8 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 14:45:21 ] >わけて書かないといけないのでしょうか? はい。 >上書きされてしまいますか? その前にfoo[3]の時点で死ぬ。 初期化の時点で要素数指定しろ。
9 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 14:45:52 ] 配列や構造体のデータを{}を使った代入形式でまとめてセット出来るのは宣言時のみ。 宣言文と代入文は見た目は似ているけど、文法上は全く別要素に定義されている。
10 名前:デフォルトの名無しさん [2010/05/21(金) 14:49:39 ] そうですか…ありがとうございました あばば
11 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 17:57:59 ] デストラクタで親のデストラクタに行くと親のthisポインタがずれる・・・なんだこれは・・・
12 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 18:02:20 ] デストラクタに限らず、基底クラスの関数を呼ぶときはそうでないと困るだろ
13 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 18:06:50 ] アドレスのオフセットもコンパイラが勝手に調整してくれてるわけよ ためしに適当に継承されてるクラス作ってstatic_castやってみればわかる
14 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 18:18:33 ] な,なおった... ありがとう
15 名前:デフォルトの名無しさん [2010/05/23(日) 02:27:51 ] マジキチ 3時間くらいぶっ通しで悩んでたら原因がif( = )だった… エラー出ないのですか?
16 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 02:32:11 ] 文法的に正しけりゃエラーは出ない
17 名前:デフォルトの名無しさん [2010/05/23(日) 02:39:06 ] if(boolgata = true) だったのですが文法的に正しいのですか?
18 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 02:48:58 ] うん
19 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 02:53:14 ] == true こんなの書くなよ
20 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 03:28:38 ] 警告レベルによっては警告は出るかもしれない まあ = true なんて不要というのは確実な話だが 今回はたまたまbool型だったに過ぎない話だな
21 名前:デフォルトの名無しさん [2010/05/23(日) 03:45:26 ] true == も書くし、0 == も書くぜ
22 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 03:57:01 ] == true だろうが true == だろうが害悪にしかならない if (islower(c) == true) { ... } とか書いてハマるタイプ
23 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 04:05:31 ] false との比較なら問題ないとでも誰かが言い出しそうなんで念のためいっとくけど、 論理定数との比較がナンセンスなんだよ。
24 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 04:19:56 ] え?TRUE ==とか普通に使ってるんだけどダメなの? if (xxx) { ... } しか書いてない場合、意図通りに動くか不安なんだよな。。
25 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 04:33:37 ] www.kouno.jp/home/c_faq/c9.html#2
26 名前:デフォルトの名無しさん [2010/05/23(日) 04:53:49 ] マジキチすぎて全俺が泣いた if( fab(フトートの計算 )<=1/2)&&〜←バグ if( fab(フトートの計算 )<=0.5f)&&〜←成功 何故ですか?
27 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 04:55:59 ] 0以外は全て真なのでTRUEやtrueとの比較は危険極まりない is系関数はその最たるもので、 is系用の共通テーブル参照→ビット演算で目的のビットを取り出す で実装される事があるので、真のときは1以外の値が返ってくるのが普通 Windows APIのBOOL型の値を返す関数も MSDNには「正常な時には0以外の値を返す」のように、必ず1を返すとは書かれない (GetMessageのような例外はあるが、あれはBOOLと言いつつ0,1,-1の3値を返す関数だから・・・) 1以外の値が返ってくる可能性は常に考えないといけない 真偽値と比較する癖を付ける1以外が返って来た時にハマる 危険極まりない bool型なら安全だろうけど、癖になってると他の型の値でもやる事になるはずだ
28 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 04:57:04 ] >>26 1/2 == 0 ×fab ○fabs ×フトート ○float, フロート
29 名前:デフォルトの名無しさん [2010/05/23(日) 05:00:56 ] >>28 マジですか!? フロートと整数の分数を比べたら小数点が全て切り捨てられるってことですか!? 全然知りませんでしたorz今気付けて良かったです。ありがとうございました
30 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 05:02:57 ] 1/2は分数じゃなくて整数演算。だから小数点以下は切り捨てられて、結果は0になる。 1.0/2.0なら浮動小数点数演算。結果は0.5になる。
31 名前:デフォルトの名無しさん [2010/05/23(日) 05:06:53 ] そうなんですか…全く知らなかった… ほんとうにありがとうございました
32 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 09:41:57 ] codepad.org/rUEMdrlH これはひどい
33 名前:デフォルトの名無しさん [2010/05/23(日) 09:42:30 ] bool型を返さない関数コールして、bool値と比較するなら バグ作ってるだけだべ
34 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 09:51:26 ] falseとの比較は安全だが == true の代わりに != false を使う事になって 二重否定でとても読みにくい
35 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 09:53:35 ] >>23 の予言が的中しました。まぁ、相当の高確率で当たる予想だけどねw
36 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 09:58:32 ] >>23 は「俺はfalseと比較してるから問題ないだろ!」という人に対するもので >>34 とは根本的に違う
37 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 12:50:04 ] if(xxx) では文脈的にわかりにくいときだけ if(xxx != false) とする
38 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 13:15:50 ] それならたまになくはないな
39 名前:デフォルトの名無しさん [2010/05/23(日) 16:42:53 ] std::stringのc_str()関数が返すポインタが有効なのはいつまでですか? 希望としてはそのインスタンスに対してなんらかの操作(結合とか)をするまでは有効だとうれしいんですが。 勝手にメモリが移動したりとかそんな挙動があったらイヤです。
40 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 16:51:13 ] 非constメンバ関数を呼ぶまでは有効と保証されてる
41 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 17:01:00 ] かりに保証されててもレガシーコードに渡す一時的な値としての使い方以外はしない方が健全
42 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 17:01:35 ] >>40-41 ありがとうございます!!!
43 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 17:01:54 ] 関数作る時引数全部 std::string にしてんのか? 流石にそりゃないだろう
44 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 17:04:32 ] いいえ
45 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 17:08:16 ] 文字列リテラルやそれ入れただけの定数を渡す事もあるんだろうし std::stringである事を特に利用しないなら 関数の引数はconst char*にした方がいいよ std::stringである事を利用したいなら別だが
46 名前:デフォルトの名無しさん [2010/05/23(日) 21:10:01 ] c++でクラスで書かれたソースの関数を使いたいのですが Cではヘッダをインクルードして関数名を書けば使えたと思うのですが C++ではnewなどをしないと使えないのですか?
47 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 21:15:36 ] 関数はnewしなくても使えるよ。そもそも関数はnewできない。
48 名前:デフォルトの名無しさん [2010/05/23(日) 21:29:53 ] つまり クラス::関数名();でも使えるってことですか? newして 名前ー>関数()とするのとはどう違うんですか?
49 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 21:48:22 ] >>48 試せ。ググれ。
50 名前:デフォルトの名無しさん [2010/05/23(日) 22:01:21 ] 教えてください
51 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:17:35 ] >>50 codepad.org/ ここで試せ。 www.google.co.jp/ ここでググれ。
52 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:19:48 ] いやです
53 名前:デフォルトの名無しさん [2010/05/23(日) 22:22:46 ] 試し方がわかりません
54 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:28:16 ] >>48 入門書の1冊でも買って読んでください
55 名前:デフォルトの名無しさん [2010/05/23(日) 22:32:39 ] 初心者ページもかなり読みましたよ プログラミングは2年やってますし
56 名前:デフォルトの名無しさん [2010/05/23(日) 22:32:53 ] static メンバ関数
57 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:48:53 ] ここで中途半端な知識を身につけたら あとで正しく理解するのに苦労しそうだな
58 名前:デフォルトの名無しさん [2010/05/23(日) 22:48:54 ] 読んだことも使ったこともあるけど、何をやってるのか、どう違うのかわからないっていう
59 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:53:17 ] 2年やってこんなことも分からないなんて、正直なところすごいかわいそうだと思った
60 名前:デフォルトの名無しさん [2010/05/23(日) 22:55:57 ] 業務5年以上やっても、fopenシラン奴もいる
61 名前:デフォルトの名無しさん [2010/05/23(日) 22:56:00 ] だから聞いてるんじゃん
62 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:58:57 ] >>60 給料泥棒すぎるだろそいつ…
63 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:18:36 ] >>46 staticメンバならそのまま呼べる。そうでないならインスタンスを作成してから呼ぶ。
64 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:30:50 ] >>60 普通API使うだろ。知らなくてよし
65 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:46:50 ] 「普通」っていうのはたいてい「俺は」って意味のところを大勢に見せたいだけだよね。
66 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:49:12 ] 標準で済む操作にOSのAPIを直で使って環境移行の手間を増やす馬鹿野郎は貴様か。
67 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:49:14 ] 普通はそうだね
68 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:07:07 ] 直APIだと、一般的にはパフォーマンスも落ちるわけだしね。 勘違いしてる初心者も多いけど ラップ(バッファリング)することによって システムコールの回数を減らす方が、 毎回呼び出すよりずっと処理が軽くなるから。
69 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 01:24:28 ] 激しく亀レスなんだが、前スレ857の int tolower(int c); これってなんでint型を使うんですか?charじゃダメなんですか? なんだけどさ VCではあらかじめロケールの設定をしておくとマルチバイト文字も変換できるようだ。 #include <cstdio> #include <clocale> #include <cctype> using namespace std; void main() { setlocale( LC_CTYPE, ".932" ); char str[] = "A"; int n = tolower( ((int)(unsigned char)str[0] << 8) | (int)(unsigned char)str[1] ); str[0] = (n >> 8) & 0xff; str[1] = n & 0xff; puts( str ); } 少なくとも、VC2005とVC2010でこれ動かすと、a と表示される。 だから、charでは不足する。 標準C的には、どうかは知らんが・・・ 同様の手順を踏めば、 is系、たとえばisdigitも全角文字の1とかにも反応する。 さすがに、ローマ数字や漢数字はだめだったけど…
70 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 10:27:23 ] >>68 モダンなOSなら自分でバッファリングしてるし メモリマップトI/Oや非同期I/Oもある 標準ライブラリを使うのはパフォーマンスのためというのは間違いで、 単純に移植性のためだ それと、Windowsではファイル名が固定の場合以外にfopen()使ってるプログラムは 全て糞と断定していい
71 名前:デフォルトの名無しさん [2010/05/24(月) 13:23:21 ] Aのcppのファイルでexternした構造体があってグローバルで宣言して凄い呼び出す関数の中で初期化される Bのcppでグローバル位置で宣言するとA.objで既にあるので未解決のシンボルとエラーが出る Bのcppの使う関数の中で宣言すると通る なぜですか?それと、値はちゃんと入ってますか?
72 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 13:28:30 ] >>71 宣言と定義を含め、externするとか初期化するとか、用語の使い方が胡散臭くてよくわからん。 意味をよく調べて言いなおすか、ソース貼ったほうがいいよ。
73 名前:デフォルトの名無しさん [2010/05/24(月) 13:40:40 ] ありがとうございました 全く同じ物を代入しようとしてたみたいです それで未解決になったのかはわかりませんが。
74 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 13:46:26 ] >>70 言いたいことは彼と一緒だと思うよ。直APIという言葉がうさんくさいけど、 その後を読めばAPI使ったほうが軽いといっているように見える
75 名前:デフォルトの名無しさん [2010/05/24(月) 15:43:53 ] >>70 「カーネルモードへの移行」が、 単純な関数呼び出しより重い処理だと言う話だ。 OSのキャッシュとかは全然関係ない。 メモリ確保等でも同様。
76 名前:デフォルトの名無しさん [2010/05/24(月) 15:46:24 ] 常に非同期I/Oしか使わないとでもいうならともかくね。
77 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 16:57:18 ] は?お前らアホじゃねーの? パフォーマンスの話だろ? パフォーマンスが重要なら、 mmap()やwritev()やreadv()、sendfile()のような物が使えるときはそれを使う 当たり前だろ DBMSみたいなソフトウェアの実装でstdio使ってるとでも思ってるのか? Berkeley DBのソースでもよめや stdio使うのは移植性だよ
78 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:03:18 ] >>77 実測で差が有意だ と わかってるなら
79 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:06:28 ] >>78 勿論有意だからこそ、本当にI/Oパフォーマンスが重要なところでは 誰もstdioなんぞ使わないんだよ バッファリングしてるから速いって、アホか? stdioバッファへの余分なコピーが「常に」発生するのがstdioだ ポータブルなgetc()やらではマルチスレッド対応の排他制御までオマケつきだ
80 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:09:33 ] つまり、「ふつー」のアプリではstdio使うのが当然と言うことですね。 ファイルI/Oなんかよりも遥かにのんびりしたヒューマンI/Oがあるんですから。
81 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:10:27 ] それはそうと、 >それと、Windowsではファイル名が固定の場合以外にfopen()使ってるプログラムは これの根拠を知りたい。
82 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:18:22 ] >>80 Windowsではstdioは使っていいけどfopen()はダメ >>81 ファイルシステムがUTF-16なのに、fopen()はUTF-16ファイル名を扱えないからだよ
83 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:26:13 ] >>82 ってことは、ファイル名が固定でなくても制限できればいいんでないの? つまり、「ユーザに任意のファイル名を扱わせたいのならfopen()はダメ」ってことじゃない?
84 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:32:37 ] >>83 厳密に言えばそうなるかもしれんが、何かそこに重要な意味があるの?
85 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:36:14 ] 糞と断じるには根拠に乏しいかと。 「ユーザに任意のファイル名を選択させておいてfopen()を使っているプログラムは糞」なら兎も角。 最初からそう書いていれば、無用な反発も避けられるし>81が質問する必要もなかった。
86 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:37:22 ] おまえら文字コードとかロケールとかどこで勉強してんの? 近所の大型書店走査しても参考書売ってねーんだけど
87 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 17:44:12 ] >>85 面倒くさい奴だな… > Windowsではファイル名が固定の場合以外にfopen()使ってるプログラムは糞 と > ユーザに任意のファイル名を選択させておいてfopen()を使っているプログラムは糞 は大した違いないだろ 後な、現実問題として、例えばユーザプロファイルディレクトリのような ファイルシステム上重要なディレクトリも全てUTF-16で、 Windowsにおいて、それはプログラムが勝手に選べるものじゃないんだぞ? Windowsでfopen()使ってるのは、Unix系のソフトウェアの手抜き移植か オモチャだけだよ
88 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 18:42:00 ] >>86 MSDNとかmanとかで勉強してみてはいかがか
89 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 21:33:02 ] C++のクラスで int hogehoge::createHash( char *p, int size ) { //処理 } int hogehoge::createHash( ) { return createHash(data, size); } 見たいに、内部データのハッシュを返す関数と オーバーロードして任意のハッシュを返す関数二つを公開してるんだが これだとクラスが使われ方知ってない?とか言われた こういう書き方って駄目?静的にすればいいのかな
90 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 21:45:57 ] createHash(char*,size_t)はhogehogeの情報がいらないからメンバにしない createHash(const hogehoge &)にする staticかfriendにしなければ実装できなければそうするか、あるいはメンバcreateHash()にする
91 名前:デフォルトの名無しさん [2010/05/25(火) 01:02:22 ] class A が class B のオブジェクトを作り、それがさらにclass Cのオブジェクトを 作るという関係があるとします。 これら、A,B,Cはフレームワークの提供する クラスで変更はしたくありません。 ここでAを継承したAA, Cを継承したCCを作り、CCからそれを作ったAAの仮想メソッドを 呼びたいと思います。 AAは1つのインスタンスしか作らないので、AA::instance()という スタティックメソッドを作り、それをCCのコンストラクタから呼ぶ様にしました。 AA, CCは元のフレームワークを少々カスタマイズした階層という感じです。 さて、ここで実際のアプリを書く時に、さらにAAを継承したAAAを書き、 それを書けばCCはAAAの仮想メッソドを呼ぶ様にしたいと思ったのですが、 static methodってvirtualに出来ない、よってAAA::instanceというものは書けない、 という事を知って詰まってしまいました。 何か別の手はあるのでしょうか?
92 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 01:07:16 ] >>91 AA::instance() を static じゃなくて virtual にすればいいんじゃないの?
93 名前:デフォルトの名無しさん [2010/05/25(火) 01:51:03 ] >>92 AAのインスタンスが無い(もともとインスタンスを獲る為のメソッド)ので virtualを呼ぶ為のオブジェクトがありません。
94 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 01:52:17 ] >>93 だったら渡せよ。
95 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 01:53:10 ] 日本語で伝えられないならコードを書けばいいのに。
96 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 02:34:37 ] B、Cのオブジェクト一つ一つがAのポインタを保持すればいいだけじゃないか こう言うとメモリの事とかについて何か言い返してきそうだな
97 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 02:57:57 ] >>96 そう出来れば楽なのですが、制約事項としてB,Cは改変したくない。 結局、グローバルでは出来るのかなと試して、一応希望の動作をしたのが以下のコードです。 AAがA,CCがCから派生というのは省略。 // AA.h class AA { public: AA(); virtual void doA(); }; extern AA *global; // AA.cc #include "AA.h" AA *global; AA::AA() { global = this; } void AA::doA() { /* doA */ }; // CC.h class CC { public: void doA(); } //CC.cc #include "AA.h" #include "CC.h" void CC::doA() { global->doA(); }
98 名前:91 mailto:sage [2010/05/25(火) 03:02:50 ] で、この2つのクラスがある状態で (#include 略) main () { AA a; CC c; c.doA(); } とするとAA::doA()が呼ばれる. さらに class AAA : public AA { public: virtual void doA(); }; void AAA::doA() { /* doA */ } main() { AAA a; CC c; c.doA(); } とするとAAA::doA()が呼ばれます. これでAA* と CCの間にクラスBを挟んだ 関係があっても無関係にAA*とCCが結びつけられた. というのをstatic method で出来ないかと思ったのが91の質問でした.
99 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 03:03:50 ] >>97 なんで CC::doA() に引数で渡さないの?
100 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 03:05:47 ] >>98 じゃぁこれで。 template<class A> class CC { void doA() { A::doA(); } }; CC<AA> c; CC<AAA> c;
101 名前:91 mailto:sage [2010/05/25(火) 03:22:52 ] >>99 CC::doA()が呼ばれる文脈でAAのインスタンスへの参照が無いからです. ここで書いたmain()は省略した見本でして、実際の実行環境の制限事項を 反映してません。 >>100 出来ればCCは1つのライブラリで済まし、AAから派生したAAA1, AAA2, AAA3 に対して1つのバイナリで済ませたいなと思ってます。CCの機能はそれぞれの AAA*に対して全く共通なので。
102 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 03:40:31 ] >>97 できてるじゃん。
103 名前:91 mailto:sage [2010/05/25(火) 03:52:20 ] >>102 いや、出来てるんですけど、グローバルを使っていいのかな? もっとC++っぽい やり方があるならば知りたいなと思いました。
104 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 03:57:07 ] >>103 既存のフレームワークとやらでメンバ変数経路は変更不能で、 呼ばれる文脈とやらも変更不能なんだろ? そこに AA のインスタンスを渡す必要があるんだろ? グローバル使う以外に何も見えてこないじゃないか。
105 名前:91 mailto:sage [2010/05/25(火) 04:00:40 ] >>104 ありがとうございます。 そうはっきり言って頂いてすっきりしました。
106 名前:デフォルトの名無しさん [2010/05/25(火) 08:21:14 ] C++で構造体を作ってクラスのprotectedのメンバに入れてクラスに他所のcppの関数中でその構造体にメンバが入るような関数を作った のですが「.」を押してもメンバ変数がポップアップされません これは上手く入ってないのでしょうか?
107 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 09:42:04 ] >>90 有り難うございます。 内部のcreateHashはclass独自の物ですが、中々優秀で他でも流用したいが為に公開していました。 一々、hogehogeを作成しメンバ設定、その後にcreateHashでは面倒に思えるのですが。。 今はstaticを付けていますが、今後は別の方法を試すべきでしょうか?
108 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 10:40:41 ] 汎用ハッシャーを分離してモジュール化すればいいじゃない
109 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 11:53:25 ] >>108 有り難うございます 皆さんだったら、どのように書きますか? 是非参考にさせて下さい。
110 名前:デフォルトの名無しさん [2010/05/25(火) 14:58:59 ] ウォッチしてる値がある値になった時にブレークさせるような方法はありますか?VC++2008EEです
111 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 15:23:45 ] >>110 msdn.microsoft.com/ja-jp/library/7sye83ce.aspx msdn.microsoft.com/ja-jp/library/350dyxd0 (VS.80).aspx
112 名前:デフォルトの名無しさん [2010/05/25(火) 15:34:41 ] >>111 ありがとうございました
113 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 17:44:49 ] operator .* (obj, func)でobjをバインドしたfunctionを返せば メンバ関数ポインタをエミュレートできるとおもったら.*はオーバーロードできねーのかよ ->*ならできるのにこの差別はひどい。がっかりだ
114 名前:デフォルトの名無しさん [2010/05/25(火) 17:45:58 ] 日本語で喋れやカス
115 名前:113 mailto:sage [2010/05/25(火) 17:50:36 ] >>114 要約するとうるせーよ死ねカスってことです
116 名前:デフォルトの名無しさん [2010/05/25(火) 17:53:44 ] 日本語も喋れない奴にプログラミングは無理 これ、豆知識なお坊ちゃん
117 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 20:14:36 ] >>114 低脳は>>113 は理解できない >>113 が何を言っているか解るか? なら日本語でお前がしゃべってくれ
118 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 20:33:35 ] なんか必死な奴がいるな
119 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 21:30:14 ] >>114 阿呆な奴は>>113 の言ってることを理解できない 君は>>113 が言ってることを理解できてるのかい? 理解できているなら君が日本語で話してくれ 駄目だ 117が何を言いたいのか分からん
120 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 21:47:12 ] >>113 を理解するのは阿呆にはできない。しかも>>113 は日本語になっていない。 もし>>114 が阿呆でなく、理解できるのであれば、>>117 は>>113 を理解できない阿呆であるので >>114 が日本語に翻訳してくれないだろうか。 ということじゃないの? >>114 は>>113 を理解できていないのは明白なので、なぜ>>114 に対してそういったのかは 俺にもわからん。
121 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 22:19:54 ] そんなことよりMoreC++Idiomの日本語訳を早く埋めてくれ。英文読むのめんどくさい
122 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 22:20:32 ] >>119-120 >>113 を訳してくれ、低脳君
123 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 22:44:18 ] >>122 自己紹介乙
124 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 22:45:09 ] >>119-120 >>113 の >.*はオーバーロードできねーのかよ 出来ない理由を教えろ
125 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 22:50:39 ] そういう仕様だから
126 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 23:01:20 ] >>124 operator.をオーバーライド可能にするとメンバへのアクセス手段がなくなるから、とかじゃなかったっけ? で、operator.*も同じ理由。 D&Eにそんなようなことが書いてあった気がする。
127 名前:デフォルトの名無しさん mailto:sage [2010/05/25(火) 23:05:43 ] . と -> .* と ->* こう見ると分かりやすいな
128 名前:デフォルトの名無しさん [2010/05/26(水) 06:34:03 ] ファイルの名前を取得したいのですがどうすれば良いですか?
129 名前:デフォルトの名無しさん [2010/05/26(水) 06:35:28 ] FindFirstFileですね。わかりました
130 名前:デフォルトの名無しさん [2010/05/26(水) 07:27:41 ] charの配列があるのですが改行で区切られてる間の文字列を取得したいのですが getsかなと思って調べたら絶対に使うなとか書いてあるし、fgetsはファイルを扱う関数なのでどうすれば良いかわかりません 教えてください
131 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 08:01:06 ] >>121 インポート依頼が処理されずに止まったままなんだ。
132 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 09:04:24 ] >>130 fgets(...., stdin)
133 名前:デフォルトの名無しさん [2010/05/26(水) 09:11:35 ] >>132 ありがとうございます fgetの一つ目の配列は取得した文字を入れる配列ですよね? 二つ目の引数のstdinは標準入力から取得すると見たように思うのですが、どうやって元の文字列の配列を選択するのでしょうか?
134 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 09:35:37 ] >>133 日本語でOK。 文字列から文字列を分解したいのか、(gets()のように)標準入力から文字列を得たいのか、どっちなのかと。 後者ならchar buf[DesiredSize]; fgets(buf, sizeof(buf), stdin);とすればいいし、 前者ならsscanf()かsprintf()で切り張りすればいい。
135 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 09:38:53 ] strtok(...,"\n") ただし、元の配列の中身は破壊される
136 名前:デフォルトの名無しさん [2010/05/26(水) 09:42:50 ] >>134 >>135 ありがとうございます strtokで\0を入れた後、それぞれを配列に入れる方法がわかりません 教えてください
137 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 09:47:25 ] 目的がよく判らんが、改行でばらす程度なら破壊型でスレッドセーフでない実装もあるstrtok()は要らん。 尤も、sscanf()をどうしても使いこなせないならstrtok()を使うことを止めはしないが。
138 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 09:48:57 ] >>136 なんで自分がやりたいことの説明ができないの? 馬鹿なの? 日本人じゃないの?
139 名前:デフォルトの名無しさん [2010/05/26(水) 09:51:26 ] もしかしてsscanfで"%s \n %d \n",str1,str2とすれば良いだけですか?
140 名前:デフォルトの名無しさん [2010/05/26(水) 09:54:01 ] >>138 すません やりたいことはchar 型の文字列があって\nがたくさんあって、ファイルで表示すれば1行ごとになるはずの文字列を取り出してそれぞれの行を違う配列に入れたいのです
141 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 09:54:29 ] ダメだこいつ。
142 名前:デフォルトの名無しさん [2010/05/26(水) 09:56:14 ] できれば行が多くなった時に配列をたくさん作るのを避ける方法も教えて欲しいです
143 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 10:19:02 ] めんどくせーから C++ で iostream と string で getline() 使えよ。
144 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 10:43:00 ] まぁ、先ずは入出力をきちんと定義するところから始めようか。 入力は改行文字を多数含んだ文字列と言うことだが、それはいきなり渡されるということなのか? 要は、作ろうとしているのは関数なのかプログラムなのか、その辺りもはっきりさせてくれ。
145 名前:デフォルトの名無しさん [2010/05/26(水) 10:51:01 ] 関数を作ってるのではありません。関数の中でグローバルの変数である配列に改行を含んだ文字列を入れまして その配列から改行までの区間を何個か取り出して、違う配列に入れるなりして元の文字列のある行の文字の部分だけを新しい文字列として使いたいのです
146 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 10:57:25 ] >>145 すでにでかい配列に読み込み済みなら gets() も fgets() も関係ないな。 そのままプログラム書けよ。 ひととおり書いて、 codepad.org/ に晒して、不満な箇所を具体的に 挙げるといいよ。
147 名前:デフォルトの名無しさん [2010/05/26(水) 11:00:42 ] >>146 なるほど、でかい配列を使いたくないのでfgetsなどでやるわけですね。 sscanfでできそうなので続けて見ます
148 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 11:06:44 ] strchr()で改行文字を探して、一文字ずらして行頭のリストを作れば事が足りそうなんだが。 つーか、なんでグローバル変数なんかにテキスト入れるのかねぇ。 相変わらず説明下手だし。
149 名前:デフォルトの名無しさん [2010/05/26(水) 11:12:13 ] >>148 知識が無いので自分も何を伝えるべきなのかわからないのです >strchr()で改行文字を探して、一文字ずらして行頭のリストを作れば事が足りそうなんだが。 >つーか、なんでグローバル変数なんかにテキスト入れるのかねぇ。 と当たり前のごとく言われても、どういう方法なのか、なぜグローバル変数にテキストを入れたらいけないか、普通はどうするのか、等、わからないのです。
150 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 11:21:56 ] やりたいことをきちんと説明できないからこそ、 弄られることになるし 詳しく説明してもらえないし 見当違いのレスを読むことになるわけで。 心穏やかに他人になった積もりで>145を読んで、 それで何をしたいか判るかね。
151 名前:デフォルトの名無しさん [2010/05/26(水) 11:25:55 ] >>150 どこがわからないのですか? 自分は完璧に説明したつもりなのですが そちらは知識が多すぎて混乱してしまうのかもしれませんが
152 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 11:28:22 ] いいからプログラム書け。日本語はこの際あきらめろ。
153 名前:デフォルトの名無しさん [2010/05/26(水) 11:31:25 ] char str[]="fafafad\nfakfjak\nfakdfad\nfkajfk\nfjak"があって例えばnfakfjak\を取り出したいということなのですが
154 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 11:33:35 ] 「なのですが」?続きはどうした?
155 名前:デフォルトの名無しさん [2010/05/26(水) 11:37:42 ] これをchar str1[] = nfakfjak\; の状態にしたいのです
156 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 11:52:42 ] char const * str0 = str; char const * str1 = NULL; char const * str2 = NULL; char const * str3 = NULL; : : str1 = strchr(str0, '\n'); if (str1) { ++str1; str2 = strchr(str1, '\n'); if (str2) { ++str2; str3 = strchr(str2, '\n'); : : } }
157 名前:デフォルトの名無しさん [2010/05/26(水) 22:15:52 ] ウォッチを見ていると配列の後のほうまで意味不明の文字が入ってたりしますが strcmpを使うとちゃんと一致したりします あれはどうなっているのでしょうか?
158 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:18:35 ] ナルまでを比較するので。
159 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 22:21:51 ] ナルェ
160 名前:デフォルトの名無しさん [2010/05/26(水) 22:25:42 ] 犠牲になったのだ
161 名前:デフォルトの名無しさん [2010/05/26(水) 23:13:46 ] マジキチ defineの最後に;つけてたら一番最後の関数で)だの;}のエラーが出やがった 偶然気付かなきゃ一生やってるレベル
162 名前:デフォルトの名無しさん mailto:sage [2010/05/26(水) 23:21:49 ] 一生やってろ
163 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 00:05:19 ] >>157 デバッガの使い方はその開発環境のスレでどうぞ。つーか、Cの文字列の仕組みくらい勉強しましょう。
164 名前:デフォルトの名無しさん [2010/05/27(木) 11:34:42 ] LPCTRとかが良くわからないのですがキャストしたらエラーが取り合えず消えるので全部キャストでも問題ありませんか?
165 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 11:49:37 ] LPCTRってなんだよ・・ LP: LongPointer(16bit時代は32bitポインタをLongPointerと呼んだ) C: Const T: Tchar STR: STRing これらを適当に組み合わせただけ
166 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 13:48:26 ] わかりにくいからTSTRCLPにすればいいのに
167 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 18:24:52 ] >>164 死ねばいいと思うよ
168 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 20:09:14 ] >>164 問題尾大有りだ
169 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 20:13:38 ] Windowsプログラムの場合は、適当にLPCSTRとか入れればいいよ 結構適当でも動く
170 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 22:10:06 ] C++ができれば他の言語なんて楽勝とかいうけどVBAムズイじゃん。使っててすげー気持ち悪い
171 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 22:11:20 ] 変数のスコープを限定できない言語は難しい
172 名前:デフォルトの名無しさん mailto:sage [2010/05/27(木) 22:16:20 ] VBA使ってみて配列の下限が自由なのは一見便利そうに見えるけどコードが汚くなるだけだと気がついた
173 名前:デフォルトの名無しさん [2010/05/28(金) 09:15:30 ] FindFirstFileやfopen等、ファイル処理の勉強をしているのですが ファイル名を変更するにはどうすれば良いのでしょうか? ファイル名 変更 c++等とぐぐっても出てきません。方法を教えてください
174 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 10:02:24 ] >>173 検索の仕方が間抜け過ぎだろ。 「ファイル名変更」「c」で検索して3番目によると、rename()を使えとある。
175 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 10:46:14 ] 循環参照を気にせず仕えるスマポってweak_ptrのようなカウンタを2重にもつ形式が一番手っ取り早いのでしょうか?
176 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 13:39:53 ] コードのシンプルさではカウントがいいかな newのオーバーヘッドを避けたいなら侵入型リストでもいい
177 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:08:51 ] std::vector等を自分のソース内でVector等と置き換えて書きたいのですが #define Vector std::vector と書く以外でいい方法はありますか
178 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:11:33 ] >>177 置き換えないのが一番いい
179 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:11:55 ] 継承したりメタ関数を使ったり
180 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 15:25:03 ] >178 そのうち自作クラスと置き換えとか色々やってみたいので 差し替えが簡単なように書いておきたいのです >179 メタ関数というのは初耳ですが調べて試してみます ありがとうございました
181 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 16:09:35 ] >>177 using std::vector;
182 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 16:57:29 ] クラスの所属するnamespaceじゃなくてstdにswapを追加するメリットってあるの? using std::swapをしらなくてstd::swapにしちゃうカスが同僚にいても安心程度のメリットしかないように思えるんだけど…
183 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 17:19:51 ] >>176 オーバーヘッドは気にならないからシンプルにいけるカウンタ方式がいいのだけど weak_ptrと同様の実装をするとダングリングポインタの問題をどうにかしないといけないんですよねぇ・・・
184 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 18:33:57 ] >>182 stdにswapを追加したことはないが、std::swapの特殊化を明示的に行うことは多々あるな
185 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 20:31:12 ] >>182 boost::swapもあるよ
186 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 20:33:23 ] 繰り返し使うところは、stdつけたほうがいいな。他人も使うようなコードは。ライブラリ。 usingつかうと名前かぶる危険。 defineの置き換えもつかワン方が良い。 ただの置換のうえに、他のコードにも影響出る。
187 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 21:16:32 ] >>182 ないだろうな stdの中をいじるデメリットの方が大きいと思う
188 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 21:39:50 ] 特殊化するならメリットはある テンプレートのライブラリで値を交換するとき 通常(?)はstd::swapを使うでしょ 特殊化されていれば効率とか、例外安全性があがる可能性がある
189 名前:188 mailto:sage [2010/05/28(金) 21:51:00 ] ごめん、質問ちゃんと読んでなかったわw
190 名前:デフォルトの名無しさん mailto:sage [2010/05/28(金) 21:58:26 ] >>188 通常はstd::swapを使うってのは無いな オブジェクトの型がプログラマにわかってるならドキュメントなりヘッダを調べて メンバのswap 同じ名前空間のswap stdのswap の順番に明示的に書く オブジェクトの方がテンプレートでコードを書いてる時には分からない場合は TMPでメンバのswapを検索してあればそれを明示的に使う 見つからなければusing std::swap;して修飾なしのswap
191 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 00:10:33 ] メモリの確保量調べる方法はないですか。これはできないです。 char *A=new char [1000]; cout<<sizeof(A)<<endl;
192 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 00:16:37 ] 自己解決しました _msize ヒープに割り当てられたメモリ ブロックのサイズを返します。
193 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 00:35:07 ] 確保されているメモリ調べると[1000]でちょうど1000にはならないな。 わりといい加減に確保してくるな。
194 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 01:08:53 ] >>190 そんな手間をかけなくて済む(かつ、バグの温床に)ならないようにstd::swapを特殊化するわけだが。。。 気にせずstd::swapでかけるようになるんだよ。
195 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 01:15:38 ] >>194 関数テンプレートの部分特殊化ができれば全部それでもいいんだけどね
196 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 01:32:51 ] >>191 std::vector 使え。
197 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 03:18:09 ] >>195 浅はかな俺を許してくれ。 つまるところがんばって書き分けないとダメってことになるのかなorz
198 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 07:44:15 ] >>190 std::swapを特殊化せずに、その検索をやってくれるのがusing boost::swap
199 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 07:54:32 ] usingいらなくね? boost::swap(lhs, rhs);
200 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 08:10:55 ] それはなかでusingしてるし
201 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 08:14:06 ] >>200 そこが便利なところ
202 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 08:26:33 ] >>198 メンバは検索してくれないじゃん・・・
203 名前:デフォルトの名無しさん mailto:sage [2010/05/29(土) 19:03:04 ] >>202 普通メンバswapがあったらフリー関数swapも作るだろ常識的に考えて
204 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 22:23:13 ] sin関数を使おうと#include <math.h>したのですが デバッグでウォッチを見ると 「sin(0.0) CXX0017: エラーです: シンボル "sin" が見つかりません」 となってしまいます、動作自体はしっかりしているようなのですが 気になりますので教えてください
205 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 22:24:06 ] たしかmathは何かのコンパイルオプションがいるはず
206 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 22:26:09 ] -lmのことか
207 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 22:55:12 ] >>205-206 ありがとうございます 恥ずかしながらコンパイルオプションの追加の仕方がわかりません... プロパティ->リンカ->コマンドラインの追加のオプションで-lmとしてみたのですが検討外れのようです visual C++ 2008 EEを使用しています、繰り返しお願いします
208 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 22:58:57 ] ああ、デバッグのウォッチか ウォッチに関数は使えないぞ
209 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 23:04:27 ] >>208 なるほど、ありがとうございます!
210 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 23:08:17 ] 数学関数くらい使えるようになって欲しいとは思うんだけど 何で使えないのかねえ
211 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 23:25:54 ] >>208 あれ? VC++ だといろんな式の評価ができたような? そこに fopen() とか突っ込んで嵌ってたこともあったり。 夢だったのかもしれん。
212 名前:デフォルトの名無しさん mailto:sage [2010/05/30(日) 23:51:32 ] 関数は使えるよ msdn.microsoft.com/en-us/library/0taedcee.aspx 静的リンクする場合は最終的にリンクされてる関数しか呼べないらしい それでもsinはCXX0047だったけど abort()とか{,,MSVCR100D.dll}abort()したら死んだ printfも出来たよ
213 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 15:16:05 ] 公開されているライブラリは スタティックリンクライブラリ ではなく ダイナミックリンクライブラリ(DLL) であることが多いいです、なぜ? それぞれのメリット・デメリット教えて欲しいです 自分はいつもスタティックリンクライブラリにしているので気になりました
214 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 16:50:32 ] 関連アプリを全部ビルドしなおすのがめんどいから。 あと関連アプリが全部ちょっとずつ大きくなるから。
215 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 17:10:02 ] dllで公開する関数って引数にintとか使ったらintの長さが違うコンパイラだとまちがいが起こるかもってことだよな?
216 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 17:21:13 ] コンストラクタで引数を取って その引数と同一の値で生成されたインスタンスが既に存在する場合にはその参照を返すような 引数の値に対してインスタンスの数が必ず一つであるような仕組みをどう構築したらよいでしょうか?
217 名前:デフォルトの名無しさん mailto:sage [2010/05/31(月) 17:25:48 ] >>216 flyweight+handlebody
218 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 10:29:53 ] ハンガリアンなんて今更、とおもいつつも ポインタとメンバ変数と大域変数だけは気になってプリフィックス付けてしまうのだが 逆に中途半端で気持ち悪い気もする・・・ 今後はプリフィックスをつかわなくても解りやすい命名に変えて言った方が良いのでしょうか?
219 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 12:22:23 ] >>218 メンバ変数と大域変数は型の間違いと違って コンパイラでの検出がされにくい場合があるのでつけるのもありという論がある ポインタの場合、ポインタとそうでないものを区別して認識しながら書かなきゃいけないって やり方自体がそもそも、ミスの元といえる。これは理想論すぎるかもしれないが >今後はプリフィックスをつかわなくても解りやすい命名に変えて言った方が良いのでしょうか? もしこれが、g_の代わりにglobal_みたいにするとかいう意味なら ハンガリアンが叩かれる意味を理解してないと思われる
220 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 19:34:47 ] VisualStudio2005を利用しています C#でいう#regionを代用できるものはC++にありますか?
221 名前:デフォルトの名無しさん mailto:sage [2010/06/01(火) 19:47:26 ] >>220 msdn.microsoft.com/en-us/library/b6xkz944 (VS.80).aspx
222 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 01:17:30 ] template <typename T>class Hoge{ private: int a; public: template<typename T2> void foo(Hoge<T2> &src){ a = src.a; //ダメ } } この処理をaのGet関数などを使わずうまくこなす方法はないでしょうか?
223 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 01:22:43 ] >>222 何が「ダメ」なの?
224 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 01:35:41 ] >>223 これをやろうとするとprivateメンバへのアクセスが出来ないとエラーをはきます 当たり前といえば当たり前なんですがうまく回避することは出来ないでしょうか・・・
225 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 01:38:18 ] >>224 friend 質問するときはエラーが発生するコードとエラーメッセージを忘れるな。
226 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 01:59:16 ] >>225 friend関数にしてしまうと this->a = src.a; のような操作が出来ないのでは 自身を引数に渡すように引数を追加するしかないのかなぁ とにかくやってみるとして template<typename T2>friend void foo(Hoge<T2> &src){ としたら error C2995: 'void foo(Hoge<T> &)' : 関数テンプレートは既に定義されています となってしまいました、どこで間違えたのでしょう・・・?
227 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 02:07:25 ] >>226 friend はメンバ関数も指定できる。
228 名前:デフォルトの名無しさん mailto:sage [2010/06/02(水) 07:57:45 ] template <class T> class Hoge { template <class> friend class Hoge; public: template <class U> void func(Hoge<U> & other) { x = other.x; } private: int x; };
229 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 22:51:00 ] 質問です。 VS2008にて、setのfindを使い if (hoge.end() != hoge.find(a)) とやると、STLのxtreeファイルの中で map/set iterators incompatible というエラーを出しASSERTされてしまいます(デバッグモードなので) 使い方が間違っているとは思えないのですが、VSのSETのfindは使えないのでしょうか・・・?
230 名前:デフォルトの名無しさん mailto:sage [2010/06/03(木) 22:57:38 ] >>229 すいません、自己解決しました if (hoge1.end() != hoge2.find(a)) こんな感じのことになっていました・・
231 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:37:36 ] www.dotup.org/uploda/www.dotup.org943706.jpg 画像のようなx,yを渡したら 角度θが帰ってくるような関数ってありますか
232 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:39:38 ] tan2 多分
233 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:44:56 ] >>231 あーたん
234 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:46:14 ] >>232 ,233 atan2()ですね ありがとうございました
235 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 11:47:47 ] そうそう
236 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 12:28:22 ] りゅうび
237 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:05:02 ] 積分を行う関数を以下のように作りました。 double Integ( double (*f)(double),double a,double b){ int n = 10000; double z ; int X = 1; double S1 = 0.0; double S2 = 0.0; for(z=a+(b-a)/(2.0*n); z<=b-(b-a)/(2.0*n); z+=(b-a)/(2.0*n){ if(X%2 == 1){ S1 += (*f)(z); } else{ S2 += (*f)(z); } X += 1; } I =(h/3.0)*( (*f)(a) + (*f)(b) + 4.0*S1 + 2.0*S2); return I; しかし、これはf(x)=1/xのような被積分関数の変数が一つの場合でしか動きません。 これを多変数の場合にも応用するにはどうすればいいでしょうか? 例えばf=2*x+x*y+zをx(y,zはxによらない)で積分するような場合です。
238 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:18:30 ] hってどこから出てきたんだ?
239 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:20:49 ] >>237 二重積分・多重積分の話ですか?
240 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 13:22:35 ] 単に f(x,y,z) = (2+y) g(x) + z h(x) g(x) = x h(x) = 1 と考えて、g と h を x で積分すればいいだけでしょ (2+y) も z も単なる係数なんだし あと、ループが非常にあぶなっかしい ループ変数は整数の変数にすること 数値誤差で端が入らない事がある
241 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:01:06 ] >>238 h=(b-a)/(2.0*n)です。ごめんなさい >>239 f=2*x+x*y+zだと double f (double x,double y,double z){ return 2*x+x*y+z; } で引数の数が合わない状態になってしまうので、どうしたらいいのかと >>240 >ループ変数は整数の変数にすること >数値誤差で端が入らない事がある そうなんですか、気をつけます
242 名前:デフォルトの名無しさん mailto:sage [2010/06/06(日) 14:25:20 ] >>239 そのfを使うのは無理やね >>240 にある通り、係数を分離して各項で係数以外の部分を積分するしかない
243 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 11:45:20 ] GDI+について質問です。 Gdiplus::Graphics* g1 = Gdiplus::Graphics::FromHDC(hdc); Gdiplus::Graphics* g2 = new Gdiplus::Graphics(hdc); Gdiplus::GdiplusShutdown() delete g1; //error delete g2; //error 上記を実行しようとするとdelete部分でエラーが出てきます。 しかし、GdiplusShutdownの前にdeleteするときちんと解放されます。 これはdeleteしなくてもGdiplusShutdownがメモリを解放していると考えていいのでしょうか? それともdeleteしないとメモリリークが発生するのでしょうか?
244 名前:デフォルトの名無しさん mailto:sage [2010/06/07(月) 11:49:40 ] GdiplusShutdown()の説明に -- You must call GdiplusStartup before you create any GDI+ objects, and you must delete all of your GDI+ objects (or have them go out of scope) before you call GdiplusShutdown. -- とあるね。
245 名前:243 mailto:sage [2010/06/07(月) 13:00:06 ] >244 返信ありがとうございます。 おかげですっきりしました。次はリファレンス読んでから質問することにします。
246 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 13:12:22 ] スコープガード的な用途に使いたいんですが、生ポの所有権を無理やり奪えるタイプのスマポって標準かboostに在りますか?
247 名前:デフォルトの名無しさん mailto:sage [2010/06/08(火) 13:28:04 ] >>246 std::auto_ptr
248 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 08:58:43 ] >>247 あ、説明足りませんでしたね sumapo<int> s(new int); int *p = std::move(s); // sの中の生ポがpに移動、sの中身はnullptrになる こういう事がしたいんです
249 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 09:14:49 ] >>248 std::auto_ptr<int> s(new int); int *p = s.release(); // sの中の生ポがpに移動、sの中身はnullptrになる
250 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 14:39:58 ] デストラクタ呼ばれるんじゃ?
251 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 14:46:09 ] release()は所有権を放棄するだけでデストラクタは呼ばれない。
252 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 15:06:55 ] まじかよ めちゃくちゃ便利じゃねえか
253 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 16:01:15 ] >>249 サンクスです。auto_ptrってめったに使わないからreleaseメソッドの存在に気づきませんでした
254 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 22:46:41 ] >>252 さあ洗濯バサミとunique_ptrの有能さに気づくんだ
255 名前:デフォルトの名無しさん mailto:sage [2010/06/09(水) 22:49:11 ] unique_ptrは削除子が静的だから物足りない
256 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 01:08:07 ] >>255 std::unique_ptr<T, std::function<void (T*)>> で動的にもできるんじゃね?
257 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 02:11:29 ] なるほど これはそう使うのか
258 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 21:15:04 ] >>256 これって削除子のnewで例外出たときにまずくない? #include <memory> #include <functional> #include <iostream> #include <cstdlib> #include <new> void * operator new (std::size_t size) { std::cout << "op new" << std::endl; static int count = 1; if(count-- == 0){throw "fack!";} return malloc(size); } void operator delete (void *p) { std::cout << "op delete" << std::endl; free(p); } struct Hoge { Hoge(){std::cout << "Hoge()" << std::endl;} ~Hoge(){std::cout << "~Hoge()" << std::endl;} }; int main(void) { try{std::unique_ptr<Hoge, std::function<void(Hoge*)>> p(new Hoge, [](Hoge *p){std::cout << "delete" << std::endl; delete p;}); }catch(...){ std::cout << "oh..." << std::endl;} return 0; }
259 名前:デフォルトの名無しさん mailto:sage [2010/06/10(木) 23:08:38 ] fack
260 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 06:35:57 ] >>258 まずいよ。 でもそれは boost::shared_ptr の動的削除子を使うときでも同じことでしょ。
261 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 06:59:54 ] >>256 これってもしかしてshare_ptrに続くCRT境界越えてもおkなスマポじゃね? codepad.org/Qix7z8cq
262 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 12:20:26 ] shared_ptrはデリータのクローンに失敗してもちゃんと後始末してくれるよ
263 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 12:33:45 ] >>261 それだとunique_ptr自体もエクスポートしないといけないんじゃないか。
264 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 12:38:12 ] >>262 コンストラクタに入った後ならね。 ここで問題にされてるのはその前の、引数列の評価中〜実引数初期化中に発生する例外でしょ。 www.boost.org/libs/smart_ptr/shared_ptr.htm#BestPractices
265 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 12:39:38 ] >>262 それ以前に、 shared_ptr のデリータのコピーコンストラクタは例外を投げてはいけない という制約がついてた。 www.boost.org/libs/smart_ptr/shared_ptr.htm#allocator_constructor > The copy constructor and destructor of D must not throw. ... > The requirement that the copy constructor of D does not throw comes > from the pass by value. If the copy constructor throws, the pointer is > leaked. Removing the requirement requires a pass by (const) reference. N3092 で unique_ptr のほうみたら、そっちにも同様の制限があった。 (20.9.10 p14)
266 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 14:23:16 ] ほとんど関数かキャプチャなしのラムダでしょ アロケータ内蔵するにしても大抵の場合staticか共有ポインタで所持する 機能的には有用だけどコピーで例外から逃れられないデリーターなんて存在するのか?
267 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:12:03 ] C++のコピーコントラクタってfooクラスに、 foo(const foo&); って宣言しておけば、 foo b; b = a; ってすればfooクラスに定義されているポインタオブジェクトもディープコピーされるの?
268 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:14:45 ] いいえ
269 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:53:55 ] >>266 メモリじゃないリソースを突っ込みたくなったときはcloseに失敗することもあるかもしれない
270 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:54:16 ] >>268 ダメなんですか。ありがとうございました。 もっと調べてみます。
271 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 16:55:57 ] あ、そういうことじゃなかった。 デリータのコピーに失敗することがあるかどうかだもんな はずかちい
272 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 19:15:28 ] DLLで関数を通じてPODの遣り取りをするとするじゃん PODのアライメントとかを揃えるためにpragma pushをしろと言われたんだけど pragmaって移植性ないじゃないですか なのでpragma無しでPODの移植性を確保したいんですけどどうすればいいですかね?
273 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 19:17:35 ] そのDLLはWindows以外でも動作するのかね?
274 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 20:45:30 ] 本当にpragma pushが要るのかね?
275 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 22:40:07 ] スマポの削除子ってテンプレート関数ボインタでよくね? って思ったんだけとクラスにしてるのは 何か理由あるの?インラインさせりため?
276 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 22:42:10 ] DLL から OS Windows を想定すっけど pragma pack で他環境(VB etc.)にも対応可能なアライメントで固定化汁という意図か?
277 名前:デフォルトの名無しさん mailto:sage [2010/06/11(金) 22:59:00 ] >>263 関数だけで大丈夫くさい 変数に入ってるアドレスをcallしてる
278 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 09:53:19 ] >>275 デリーターが関数オブジェクトかもしれないから
279 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 18:47:25 ] 友達の代理で質問するんでよく分からんのですが www1.axfc.net/uploader/Sc/so123049 をコンパイルして実行したら www1.axfc.net/uploader/Sc/so123050 になってしまったそうです 最後の行だけなぜか表示されなかったということです どこに原因があるんでしょうか? OSはたぶんubuntuだと思います(ウィンドウの色からして コンパイルは端末でgccを使ったそうです
280 名前:279 mailto:sage [2010/06/12(土) 18:49:37 ] すんません リンク間違えました www1.axfc.net/uploader/Sc/so/123049 www1.axfc.net/uploader/Sc/so/123050
281 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 18:55:00 ] \nを入れて味噌
282 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 19:10:51 ] 画像で出てくると思わなかったよ
283 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 20:15:26 ] >>281 伝えときました >>282 友達に画像で渡されたので……
284 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 20:20:24 ] 今度はテキストで貰ってきてくれ、なの
285 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 20:37:04 ] >>284 すんません。。。
286 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 21:23:17 ] int main(int argc, char *argv[]) で、プログラムを実行するとき引数に英1文字AかBかCかDが指定できるとして、 A,B,C,D以外が入力されたときにエラーを表示するための if文の条件文の書き方が分かりません。 if(argv[1] != "r") とすると、引数に何を入力しても該当してしまいます。 どうすればいいでしょうか
287 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 21:24:09 ] 書き間違えました、 if(argv[1] != "A") です
288 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 21:26:46 ] >>287 それは文字列へのポインタの比較なんで文字列の中身の比較ではない。 文字列の中身の比較はstrcmpを使う
289 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 21:29:36 ] 気持ち悪いけど if (strcmp(argv[1],"A")&&strcmp(argv[1],"B")&&strcmp(argv[1],"C")&&strcmp(argv[1],"D")) こっちも気持ち悪いけど if (strchr("ABCD",argv[1][0]))
290 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 21:35:39 ] C++ならこうか std::string a(argv[1]); if((a!="A")&&(a!="B")&&(a!="C")&&(a!="D")) { }
291 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 21:37:54 ] >>289 前者はオプション文字列の長さが1である必要があるのに、 後者はオプション文字列の長さをチェックしていない。 いっそ、これでいいのでは? if (argv[1][0] != 'A' || argv[1][0] != 'B' || argv[1][0] != 'C' || argv[1][0] != 'D' || argv[1][1] != '\0')
292 名前:286 mailto:sage [2010/06/12(土) 22:05:20 ] 皆さんありがとうございます。 "A"がポインタであること、'A'と"A"が違うということが分かっていませんでした。
293 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 22:27:36 ] 結局分かってないし何度もすみません・・ >>291 で書くと、引数をAで実行しても該当するようです。どうしてでしょうか
294 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 22:32:09 ] \0のところがいらないんじゃ… 間違ってたらスマソ
295 名前:デフォルトの名無しさん mailto:sage [2010/06/12(土) 23:04:03 ] なんだかんだ言ってエバーはやっぱ面白いなぁ
296 名前:286 mailto:sage [2010/06/13(日) 00:56:43 ] if (argv[1][0] != 'A' || argv[1][1] != '\0') とすると、うまくいきます。'A'以外を入力すると実行されます。AAと入力した時も実行されます。 ですが if (argv[1][0] != 'A' || argv[1][0] != 'B' ) とするともう何を入力しても実行されるようになってしまいます。 環境が悪いのでしょうか・・?orz 言語はCで、linuxでgccを使っています。
297 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 01:03:52 ] 今は高校で論理学ってやらないんだっけ?
298 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 01:04:38 ] 条件をよく見ろ 'A'以外 ま た は 'B'以外 だから何入力してもtrueに決まってる
299 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 01:08:30 ] ぐはっ ありがとうございます。失礼致しました;;
300 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 21:38:09 ] DLLを作るのも使うのも全部WINDOWS→リトルエンディアン って認識でいいの?
301 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 22:26:26 ] >>300 今はintelだけなんでそうなる。
302 名前:デフォルトの名無しさん mailto:sage [2010/06/13(日) 23:42:46 ] >>301 AMDとVIAは星になったのかw
303 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 06:50:37 ] >>302 俺もintelだけ、といわれるとなんか変な言い方だなぁとは思うけれど。 互換性があるという言い回しにした方がお気に召しますか?
304 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 08:53:13 ] IA-32と言えば何も問題は無かったのに
305 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 09:20:40 ] 要するにDLL作るときにエンディアンも気にしないといけないんですか
306 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 11:11:43 ] 大丈夫、エンディアン以前にプラットフォームが違っていれば動かない。
307 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 17:59:17 ] >>306 お前は何を問題としているかわかってない
308 名前:デフォルトの名無しさん mailto:sage [2010/06/14(月) 18:08:05 ] Windows上でエンディアンを気にしなきゃいけない状況って ・ネットワークを使う ・クロスプラットフォームを考慮(cygwin等) ・他ハードをエミュレーションする くらいしか思いつかんが。
309 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:31:39 ] int array[N]; のarrayは&array[0]と同じって本に書いってあったんだけど で、多重配列 int mulary[N][M][][]...[Z]; の時のmularyは何と同じになるの? &mulary[0]? &mulary[0][0][0]...[0]? .... で、なんでそうなるの?
310 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:51:22 ] 不思議なことにどれをやっても同じなんだよ そういうふうにメモリ配置されてるから
311 名前:デフォルトの名無しさん mailto:sage [2010/06/15(火) 23:55:08 ] >>309 型はこれと一緒 &mulary[0]
312 名前:デフォルトの名無しさん mailto:sage [2010/06/16(水) 01:13:23 ] >>309 多次元でも関係ない。 array が &array[0] と同じように、 mulary は &mulary[0] と同じ。
313 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:06:13 ] >>311-312 どもども。 何で配列名が&array[0] 、 &mulary[0]になるように決めたんですか?
314 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 01:11:15 ] >>313 >>309 がそう決めたから
315 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 04:28:55 ] >>313 便利だから
316 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 06:32:10 ] >>313 printf(&"Hello World"[0]); とか書きたいか?
317 名前:デフォルトの名無しさん mailto:sage [2010/06/17(木) 07:17:35 ] >>316 地味にヤだな、それw
318 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 16:11:35 ] >>313 決めたっていうかその表現にある通り、単に配列要素の先頭のアドレス拾ってるから 同じになるってだけじゃね。意味わかれば別に悩む所じゃないぜ
319 名前:デフォルトの名無しさん mailto:sage [2010/06/18(金) 18:52:55 ] &*(array+0) と &array[0] が同じということを知れば arrayが特殊でないことが分かるはず
320 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 22:33:23 ] 「クラス名::」で呼び出せるものは静的なもの、 「クラス名.」で呼び出せるものは動的なもの ってことで、おk?
321 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 22:59:52 ] クラス名::hoge インスタンス.hoge
322 名前:デフォルトの名無しさん mailto:sage [2010/06/21(月) 23:11:31 ] class A { public: void func1() {} void func2() { A::func1(); } static void static_func() {} }; A a; a.static_func();
323 名前:デフォルトの名無しさん [2010/06/23(水) 02:18:51 ] ある変数(10桁)の 1の位: 10の位: 100の位: 1000の位: ・ ・ ・ ってな感じで出力する簡単な計算式教えてください おねがいします
324 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 02:29:24 ] 10で割ったあまりを出力して、 変数を10で割ったものを変数に代入する というのを繰り返す
325 名前:デフォルトの名無しさん [2010/06/23(水) 02:36:38 ] >>324 ありがとうございます
326 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 23:04:41 ] 排他処理ってどんなふうにやればいいんですか
327 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 23:14:36 ] 環境も書かずに排他処理とな?!(AAry
328 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 23:14:50 ] セマフォ、ミューテックス、クリティカルセクションでぐぐれば解る
329 名前:デフォルトの名無しさん mailto:sage [2010/06/23(水) 23:38:44 ] DWORD WINAPI ThreadFunc1(LPVOID lpParam) //スレッドの1 { WaitForSingleObject(g_mutexTest, INFINITE); //所有権取得 //排他的な処理 SetCursorPos(def_x, def_y); ReleaseMutex(g_mutexTest); //所有権放棄 return 0; } void CreateMutexTest() { g_mutexTest = CreateMutex( 0, FALSE, NULL); hThread1 = CreateThread(NULL, 0, ThreadFunc1, NULL, 0, &ThreadID); } void CloseMutex() { if (g_mutexTest) { CloseHandle(g_mutexTest); g_mutexTest = NULL; } } CreateMutexTest(); CloseMutex();
330 名前:329,326 mailto:sage [2010/06/23(水) 23:41:06 ] 途中で送信してしまいました ググったら>>329 のようなものが出てきたんですけど これでいいんですか?
331 名前:330 mailto:sage [2010/06/23(水) 23:43:36 ] 環境はWin7 VC++です
332 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 05:14:55 ] static RECT rect; を計算して求めたleft, top, right, bottomで初期化したいのですが rect.left=left; rect.top=top; rect.right=right; rect.bottom=bottom; は不恰好なので rect = {left, top, right, bottom}; と試してみましたがコンパイルエラーになりました。 RECT tmp = {left, top, right, bottom}; rect = tmp; そこでこうするとうまく動いたのですが、もっといい方法はありますか? Win7 VC++ 2008です。
333 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 07:38:41 ] Windows APIの構造体のやつならSetRect関数
334 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 14:03:02 ] 配列の要素数を標準入力cinで入力することは出来ないでしょうか? int num; cin >> num; int test[num]; 「定数式が必要です」と出て失敗します 何故だ…
335 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 14:10:43 ] >>334 配列の要素数に変数を使うことはできない 定数じゃないと そういうときはnew使うとかvector使うとかしないと
336 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 15:25:40 ] 定数式が必要です、って言われて何故だとかメッセージを読む能力なさすぎだろ
337 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 16:05:14 ] 初心者歓迎って書いてるから、ま、あまり目くじら立てるなよ。 きっと、変数と定数の区別がまだつかないんだよ。
338 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 18:18:15 ] おしえてください!俺はC言語の初心者です。csvファイルのデータを要素ごとに構造体に格納するのを、 struct nakami{ char name1[80]; int num1: char comp_name[2][80]; ・・・・・・ }nk[グローバル変数x]; みたいな構造体にして。csvファイルへの読み込みのポインタをfpという変数で持ってきて、 char str[80], num[4], trash[80]; int i; for(i = 0; i < グローバル変数y; i++){ fgets (str, 500, fp); strcpy (trash, strtok( str, ",¥n")); strcpy (nk[i].name1, strtok[NULL]); strcpy(num, strtok[NULL]); nk[i].num1 = atoi(num); ・・・・・・ }
339 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 18:19:48 ] >>338 の続きです といった感じで格納を続けていくようにしました。 グローバル変数yはcsvファイルの読み込む列の数についてで、先に取得しています。グローバル変数xは150とプログラムの一番最初にdefineで書いています。 これを実行すると途中でプログラムに問題が発生して強制終了してしまいました。 間あいだに、printfで構造体の中身を含め、ループ中をチェックをしていたのですが、 yが74あって、取得したいcsvの列が0から73までのとき、途中の列までは無事に格納されていたのですが、 iが57までループを繰り返し、インクリメントされた後、何故か1に戻っていました。 そのため、終端に来る前にcsvの方が終わってしまい、強制終了するのだと思います。ループが73列目の格納作業まで終えて、74列目を読み始めて強制終了するみたいです。 初心者なので凄くおかしなことを言っていたり、 説明不足で、これだけの文では分からないかもしれませんが、なにとぞご回答頂きたく存じます。
340 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 18:28:20 ] >>338-339 それじゃコンパイル通らないだろ コピペしろコピペ ttp://codepad.org/ ついでにcsvもどっかにうpしろ
341 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 19:19:39 ] >>340 了解です。 このプログラムは2chのとある企画のアイディア推敲の一助にと、慣れないC言語を使って作っていたものです。 わけのわからないcsvファイルですが、ご理解よろしくお願いします。 色々無茶苦茶で、半端な部分も多いです。初心者なので、読解にご迷惑をおかけするかもしれません。 一応コンパイル出来るはずです。 コピペ codepad.org/ea8bb8jm 問題は730〜835行目の関数の特に811行目のループが始まってから起こるみたいです。 csvファイル sugar310.dip.jp/cgi/upload/source/up24683.csv
342 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 20:24:31 ] >>333 その名もズバリな関数があったんですね。調べ方が未熟でした。 無事綺麗なコードが書けました。 レスありがとうございました。
343 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 22:54:33 ] >>341 csv読み込ませるとnum周りのスタックが破綻したって出たな 配列の大きさを大きくしたらとりあえずエラーは出なくなったけど… ttp://codepad.org/dNFSlvxj これはGUIで作った方が分かりやすい気がする ちょっと文字数オーバーしたら落ちるし C++あたり勉強してstd::stringとか使った方がいいんじゃないか
344 名前:デフォルトの名無しさん mailto:sage [2010/06/24(木) 23:50:44 ] c++の命名規則の例が詳しいサイトとかないでしょうか?
345 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 00:00:40 ] >>343 細かく見ていただき大変ありがとうございます!! 色々と自分のプログラムの汚いところがスッキリしてて驚きがあって感動してます。 ただ、自分がwinでvisiual C++2008のコマンドプロンプトからclでコンパイルしていたものを、 ちょっとした都合でwinがネットに繋げられなかったでの、 人のmacのxcodeに送ってそれをttp://codepad.org/ にコピペしたためか、 今winでclでコンパイルすると色々とエラーが出てしまって・・・、上手くいってるか直ぐに分からないです。 すみません。 対処法も教えていただけましたし、色々手も加えていただいたので、winにあるものとしっかり見比べて、理屈の理解をしていこうと思います。 C++も勉強してみたいと思います!! ありがとうございました!!!
346 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 08:40:17 ] 組み込みCでタスクの単体試験がしたい。 内部で状態が変わるようなタスクのテスト項目が思い付かない。
347 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 08:44:13 ] 単体試験は単体でするもの、組み込んでするのは別の試験。 内部で状態が変わっても影響ないならNOPにしとけ〜。
348 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 10:32:33 ] 別にcodepadに貼らなくても自分の所でgcc + MinGW4.5.0でコンパイル すればいいやん あ、ソースを晒すためか
349 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 15:14:19 ] すいません int** aはどういうことでしょうか? int* aならポインタ宣言と分かるのですけれど**が2個付くのは意味があるのでしょうか?
350 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 15:29:18 ] ポインタのポインタってことだ COMとかでインターフェースのポインタをもらうときとかに使うな
351 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 15:29:48 ] >>349 ポインタのポインタ int a; int* b = &a; int** c = &b; といった感じでポインタ変数をさらに指し示せる。 関数から(戻り値以外の方法で)ポインタ値を返す時に使われるな。
352 名前:デフォルトの名無しさん mailto:sage [2010/06/25(金) 15:36:04 ] >>349 >>350 慣れてないとややこしそうですな 精進します ありがとうございました!
353 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 19:42:40 ] 引数なしローカル変数なしの再帰関数を作ったとしたら、これはどこまで再帰してもスタックオーバーフローを起こさないって考えていい?
354 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 19:50:52 ] 末尾再帰が最適化されたらそうなるだろう。 が、もし最適化されなかったらリターンアドレスを積みまくって死ぬから、 オーバーフローは起こると考えたほうが安全。
355 名前:デフォルトの名無しさん mailto:sage [2010/06/26(土) 19:51:31 ] >>353 戻ってくる場所をスタックに積むからいつかスタックオーバーフローを起こす
356 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 00:07:01 ] サンクスです おとなしくループ回すでござる・・・
357 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 04:14:38 ] 質問させてください。 参照カウントで管理するオブジェクトを作ろうとしています。 これは自動変数として確保されたくないのでコンストラクタをprotectedにして、 staticなオブジェクト生成用のメソッド(Create)を作ってそこでnewしています。 ただこれではクラスを継承するたびにサブクラス側でもCreateと同等のメソッドを用意しなければならなくなってしまいました。 これが結構面倒に感じています。 何かスマートな実装方法はないでしょうか?
358 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 05:02:19 ] >>357 CRTPパターン使うとか? ttp://codepad.org/xnLk4KaL まあ、ふつうはFactoryパターンでやるけど。
359 名前:357 mailto:sage [2010/06/27(日) 05:42:25 ] >>358 ありがとうございます。 リンク先のものが使えそうです。 ちなみにFactoryパターンでググったらFactoryMethodとAbstractFactoryが出ましたがどちらでしょうか?
360 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 09:18:30 ] 自動変数を封じるならデストラクタを弄るだけでもできる コンストラクタは複数有るのに対してデストラクタはひとつだからこっち弄るほうが楽だと思う ttp://codepad.org/nwwgoygy ttp://codepad.org/FA3LoEDN
361 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:03:30 ] 初歩的な質問ですが、教えて下さい。 void S(char okini[SIZE][2][100]) {` int i; int a; for(i=0;i<SIZE;i++) { printf("URLを入力してください"); scanf("%s", okini[i][0]); printf("タイトルを入力してください"); scanf("%s",okini[i][1]); } printf("削除したい番号を入力してください"); scanf("%s",&a); okini[a-1][0][100]=´x´; okini[a-1][1][100]=´x´; } お気に入りを削除する関数を作りたいのですが、 どうやって削除すればいいのですか? 削除したいやつを「x」と置き換えようとしたのですが エラーが発生しました。
362 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:17:21 ] >>361 hoge[100]と宣言した配列で使えるのはhoge[0]からhoge[99]まで。 っていうのはともかく、代入したいのは文字列だから、strcpy()を使わないと strcpy(okini[a - 1][0], "x");
363 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:29:56 ] >>362 ありがとうございます。 大変申し訳ないのですが、strcpy()はまだ習っていません。 他に何か方法はありませんか・・・?
364 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:35:32 ] >>363 宿題なら↓へ C/C++の宿題片付けます 137代目 pc12.2ch.net/test/read.cgi/tech/1276810079/ テンプレをよく読んで守ること。 # okini[a-1][0][0]='\0'; とか
365 名前:デフォルトの名無しさん mailto:sage [2010/06/27(日) 20:52:48 ] >>364 どうもありがとうございました。 そちらに行ってみます!
366 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 22:48:49 ] 「この文章の中に 1は□個、2は□個・・・9は□個ある」 というのをcで解こうと思ったのですが、なかなかうまくいきません 助言お願いします kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10759.txt
367 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 23:15:51 ] 恐ろしい物を見た気がする 何がやりたいのかはっきり言って分からない
368 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 23:20:39 ] なんだこのインデントの数は これはC以外の何かだ
369 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 23:28:30 ] 何なんだこれは IOCCCにでも出すつもりか
370 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 23:32:54 ] すいません、上のほうで出てたmutexで質問です。 www.geekpage.jp/programming/linux-network/book/07/7-41.php ここのサンプルプログラムをコンパイルしたら、 pthread_mutexattr_setpsharedがないと怒られました。 いろいろ調べた結果、_POSIX_THREAD_PROCESS_SHARED が未定義な環境だとはわかりましたが、 どう回避していいかわかりません。排他制御するにはどうしたらいいか教えてください。
371 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 23:32:56 ] この文章の中にと書いてるが 何も文章を入力してないんだよな これはなかなか歯ごたえがあるぜ
372 名前:デフォルトの名無しさん mailto:sage [2010/06/28(月) 23:35:00 ] >>370 環境書け環境
373 名前:370 mailto:sage [2010/06/28(月) 23:51:22 ] すいません、環境はFreeBSD 6.0です。
374 名前:デフォルトの名無しさん [2010/06/29(火) 00:38:37 ] ここで質問させていただきます。 upsurusuru.hp.infoseek.co.jp/cgi-bin/src/up5422.txt このtxtにプログラムの一部を書いています。 このプログラム内で for(int i=0; i<n; i++){ fin >> a >> b >> c >> d >> e; txt[i].setdata(a ,b ,c ,d ,e);} としたあと double test(Person txt[], int n) {int sum = 0; double te; for(int i=0;i<n;i++){ sum = sum+txt[i].setdata;} te=sum/n;} ここへtxt[i]を送り、txt[i]の中からdだけを取り出したいのですがどうしたら良いでしょうか? 助言お願いします
375 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 00:56:03 ] Personクラスの定義ぐらい書けや
376 名前:デフォルトの名無しさん [2010/06/29(火) 01:08:09 ] すみません upsurusuru.hp.infoseek.co.jp/cgi-bin/src/up5424.txt
377 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 01:47:26 ] >>374 簡単に言うとprivate変数のdをいじくれないからメンバ関数serdata()から dを引き出したいって事? それはあまり綺麗な設計じゃないな dだけアクセサ作ったら? double Person::dvalue() const { return d; } みたいな それは嫌なのかな?
378 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 01:49:35 ] もしアクセサを作ることでどこからでもdを参照できるようになるのが嫌なら、 関数test()をPersonのfriendにすればいいじゃない friendってそういう風に使うんだぜ
379 名前:デフォルトの名無しさん [2010/06/29(火) 02:03:51 ] >>378 それをやってみます。 回答ありがとうございます。
380 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 06:43:47 ] うん
381 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 08:59:10 ] friendよりstaticメンバー関数にしたほうがきもちいいと思うんだがどうか
382 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 11:43:46 ] >>381 それだとthisが渡されないから個々のインスタンスのdをいじれないぞ
383 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 12:12:36 ] txt[]で渡してるじゃん
384 名前:デフォルトの名無しさん [2010/06/29(火) 12:21:34 ] codepad.org/Yv5gQYon 自作のクラスのインスタンスをpush_backしたvectorをソートしようとしています。 codepadではコンパイルエラーは無かったのですが、 自宅のPC(Gentoo Linux, g++ (Gentoo 4.4.3-r2 p1.2) 4.4.3)だと以下のようなエラーが出てしまいます。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/10761.txt コードのどこかが悪いのでしょうか? それとも足りない環境があるのでしょうか? codepadで出力結果がソートされていないのも何故か分かりません。 ご教示ください。
385 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 12:46:36 ] >>383 ああそういう事か それならいいかもね >>384 ちょwwSTL関係のエラーコード貼るな 貼るならSTLFiltとかで整形してから貼れ それより肝心のソースコードは?
386 名前:384 [2010/06/29(火) 13:13:36 ] >385 コードは>384の1行目です。 STLFiltはちょっと調べてみます。
387 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 13:19:28 ] >>386 取り敢えず気が付いた事を一つだけ ポインタをソートしてるよ 実体をソートしたいなら比較叙述関数を作るか関数オブジェクトにして与えないと
388 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 13:21:42 ] >>384 ポインタの順序付けは実体の順序付けと関係ない。 実体の順序付けを使うように比較関数を作って渡せ。 あとは gcc じゃなくて g++ 使ってみな。
389 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 13:24:54 ] 取り敢えず応急処置だけどソートは出来てるっしょ codepad.org/6do3erz8
390 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 13:30:08 ] こういう時はBoost::lambdaとかC++0xのラムダ式がとても役に立つよな
391 名前:384 mailto:sage [2010/06/29(火) 13:43:54 ] 確かにgccを使っていました。g++にしたらコンパイルできるようになりました。 codepad.org/mOjod85K のコードでうまくソートできました。 ありがとうございました。
392 名前:384 mailto:sage [2010/06/29(火) 13:45:50 ] >389 >391のレスをしてから気付きました。 どうもありがとうございます。
393 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 14:15:48 ] delete しとけよ。
394 名前:デフォルトの名無しさん mailto:sage [2010/06/29(火) 14:32:10 ] 参照はがしできるなら剥がしてからファンクタに渡すラッパー作っとくと便利
395 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 15:12:13 ] コマンドプロンプトで 関数に0個の引数を指定できません fatal error U1077 : C:\Program Files\Microsoft Visual Studio 8\VC\BIN\cI..EXE : リターンコード0x2 と表示されたのですがどーゆーことでしょう? もしスレ違いだったら申し訳ありません
396 名前:デフォルトの名無しさん mailto:sage [2010/06/30(水) 15:22:17 ] コマンドプロンプトでなにしたんですか
397 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 10:02:20 ] 環境非依存で整数型のビット長を調べるメタ関数は有りますか?
398 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 10:14:45 ] sizeof(IntType) * CHAR_BIT メタ関数は上式で自作しなさい。
399 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 10:54:59 ] 質問させてください。 c++プログラムの中で、既に存在する.exeファイルを実行して、 標準出力へ返ってくるはずの返り値をC++ソースの中で変数に格納したいのですが、 どのような書き方をすればよいでしょうか?? 教えていただけると幸いです。
400 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 11:02:20 ] >>399 環境に拠るが、popen()ではどうだろう。
401 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 18:36:42 ] >>398 それが表現ビット長と一致するとは限らないんだぜ std::numeric_limits<IntType>::digits + std::numeric_limits<IntType>::is_signed が正しい
402 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 19:17:11 ] 整数型の実ビット長が表現ビット長と一致しない環境ってある? そりゃ非PODだったら違ってくるだろうけど。 規格ではどうなってるんだろう。
403 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 22:45:18 ] 質問です。VC++2008EEですがソース分割の仕方がいまいち分かりません。簡単に組んでみたところエラーが出てしまいました。 >1>sub.obj : error LNK2005: "class c_Sub Sub" (?Sub@@3Vc_Sub@@A) は既に main.obj で定義されています。 >fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました。 どこが間違っているのかご教示お願いします。 ttp://codepad.org/niRaaCvJ
404 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 22:53:36 ] >>403 ttp://www.geocities.jp/ky_webid/c/032.html
405 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 23:26:50 ] >>404 どうもです。 14行目を } static Sub; とすることでリンカ通りました。(これでよいのかも今一分かりませんが…
406 名前:デフォルトの名無しさん mailto:sage [2010/07/01(木) 23:34:05 ] staticじゃSubの実体がいくつもできちまうじゃねえか。 だからグローバル変数はヘッダではextern宣言して どれかcpp一つで実体を定義しろっつーの。
407 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 07:10:29 ] >>398 ,402 sizeof(型名) * CHAR_BIT != 有効ビット幅 portable-c.jugem.jp/?eid=18
408 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 18:25:01 ] >>407 >Intelのi686をターゲットとするGCCでは、long double型の有効ビット幅が80ビット FPU に80bitで数値を渡す(スタックに積む)命令はあるのだろうか?
409 名前:デフォルトの名無しさん mailto:sage [2010/07/02(金) 21:44:35 ] tbyte ptrで行けない?
410 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 13:02:24 ] AT&A記法ならfstpl
411 名前:410 mailto:sage [2010/07/03(土) 14:00:45 ] 方向逆の上lじゃなくてtだった fldt
412 名前:デフォルトの名無しさん [2010/07/03(土) 15:00:00 ] templateはコンパイル時に型が代わるってことでおk?
413 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 16:40:54 ] 型が変わるというか、"型ごと"(←重要)に生成される バイナリが肥大化するから気をつけて
414 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 16:47:44 ] さんくすっす わかったっす
415 名前:412 mailto:sage [2010/07/03(土) 16:48:13 ] >>413 thx
416 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 19:50:45 ] いえいえ
417 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 23:22:12 ] ふと疑問に思ったので教えてください。 例えば、x=7,y=5,z=9のとき、 a=__min(__min(x,y),z); と書いても実行可能で、aに5が代入されますか?
418 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 23:24:09 ] >>417 __min の動作が分からない
419 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 23:25:32 ] 実際に試せない環境にでもいるのだろうか
420 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 23:29:22 ] >>419 yes
421 名前:デフォルトの名無しさん mailto:sage [2010/07/03(土) 23:38:45 ] 標準マクロのminでええやんと思う 代入されるかどうか、という話はyes (__minがちゃんと定義されているならだが)
422 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 00:07:15 ] >標準マクロのmin えっ・・・?
423 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 00:12:57 ] >>421 ありがとうございました。 超初心者ゆえに個人的な制約が色々あるわけです。
424 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 01:52:36 ] windows.hやkernel.hに含まれてるmin/maxマクロはC/C++標準ではありませんよ…
425 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 02:12:36 ] stdの方はマクロじゃないよな
426 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 10:08:13 ] PNGといえばlibpngのように、 Bitmapの読み書きをするクロスプラットフォームな デファクトスタンダード的なライブラリがあれば教えてください。
427 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 18:16:05 ] 初歩的な質問ですみません #include<stdio.h> void calc(int &po); int main(void){ int miku=39; calc(miku); printf("%d\n",miku); getchar(); return 0; } void calc(int &po){ po=po*2; return; } これはcalc()関数にmikuを代入しているのですか それともmikuのアドレスを渡しているんですか そもそも文法的に正しいのですか 普通に動くので困ってしまいました
428 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 18:32:55 ] 参照だもん正しいよ
429 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 18:46:27 ] いや、本当はポインタ使いたかったんですが 気が付いたらこんなのになってしまいました
430 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 20:09:37 ] ん、なんで動くんだ
431 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 20:12:03 ] 参照を渡している 内部的にはアドレスを渡しているかも知れないしそうじゃないかもしれない とりあえず文法的には合ってる
432 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 20:15:25 ] >>430 C++は初めてか?力抜けよ
433 名前:430 mailto:sage [2010/07/04(日) 20:19:33 ] 参照を渡してたら、*po=*po*2としないと行けないんじゃないか?
434 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 20:20:58 ] それはvoid calc(int *po);の場合。
435 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 20:22:02 ] >>433 CじゃないC++だ。 C++では参照とポインタは別物
436 名前:430 mailto:sage [2010/07/04(日) 20:27:54 ] そうなのか、横からスマンかった。
437 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 20:51:46 ] あれ、それじゃあこれはC++の文法ですか? てっきりCのものかと
438 名前:デフォルトの名無しさん mailto:sage [2010/07/04(日) 20:56:00 ] C++が使える環境ならC++勉強したほうがメリットあるぞ。
439 名前:デフォルトの名無しさん [2010/07/05(月) 07:23:05 ] >>437 >>427 はCでコンパイルエラーになるはずだが?
440 名前:デフォルトの名無しさん [2010/07/05(月) 13:30:44 ] C言語です unsigned char buff[] = { 0x01, 0x1A, 0x00, 0x3F }; char str[256]; strの中身を"011A003F"としたいのですがどうすればよいのでしょうか
441 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 13:33:47 ] sprintf(str, "%02X%02X%02X%02X", buff[0], buff[1], buff[2], buff[3]);
442 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 13:41:24 ] strcpy(buff, "011A003F");
443 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 13:41:32 ] >>441 ありがとうございました sprintfの使い方は目からウロコが落ちました
444 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 13:42:39 ] 質問の仕方が悪かったみたいです >>442 さんには余計な手間を取らせて申し訳ない
445 名前:デフォルトの名無しさん mailto:sage [2010/07/05(月) 14:22:21 ] #if 0 sprintf(buff, "%02X%02X%02X%02X", buff[0], buff[1], buff[2], buff[3]); #elif 0 str[0] = '\0'; for (unsigned ic = 0; ic < sizeof(buff); ++ic) { sprintf(strchr(str, '\0'), "%02X", buff[ic]); } #else for (unsigned ic = 0; ic < sizeof(buff); ++ic) { sprintf(& str[ic * 2], "%02X", buff[ic]); } #endif
446 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 02:15:54 ] 派生クラスが初期設定で基底クラスに「*this」という値を渡していたのですが、 「this」なら派生クラスのアドレスですが「*」が付くと何になるのでしょうか・・・?
447 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 02:24:49 ] CRTPかな? 値か参照だけど、多分参照。
448 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 10:27:00 ] C言語でMySQLを制御したいのですが、どうしたら良いでしょうか
449 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 10:30:47 ] >>448 てきとーにライブラリを探してください
450 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 14:46:03 ] なんか変数へのアクセスはアクセサ関数を使って〜と杓子定規にいわれるけど C#でいうところのプロパティ的なモノはpublic変数でも良いのかなと最近思うようになったが アクセスレベルを設定できないからそれはどうかな?とも思う やはりちょっと見た目が悪くなるけどアクセサを使うべきなのでしょうか?
451 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 16:48:12 ] アクセス制限以外のアクセサ関数のメリットとして、 仮に内部実装が変わっても(例えばintだったのがdoubleになっても) 関数でラップしとけば呼び元に影響しない、とかもある でも個人的には、よほどリスクがあるのでなければ 変数の方がすっきりしていい
452 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 20:35:39 ] >>450 変数は隠蔽するのが基本。公開すると変数の使用方法が統一できずバグだらけになりやすい。 変数と1対1にアクセサを作った場合は変数を公開したのと変わらなくなるのでよろしくない。
453 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 21:27:48 ] >>450 > なんか変数へのアクセスはアクセサ関数を使って〜と杓子定規にいわれるけど いや今の時代は言わないよ。 逆に、あるクラスのメンバを全部パブリックにするという ノーガード戦法もあるが、それが有効なこともたまにある。 まあ単に変数をまとめたいだけの時だけどね。 普通は、クラスはちゃんとしたinterfaceとなるメンバ関数を持っていて、 使い方を知るのに内部構造を知らねばならないような クラスはクソ設計と言われる。 まあ現実は納期とかあるからやむをえずクソ設計になっちゃうこともあるけど。
454 名前:デフォルトの名無しさん mailto:sage [2010/07/06(火) 22:06:34 ] >>453 構造体も使ってあげて
455 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 02:25:40 ] >>450 先にクラスの外部インターフェースを考えろ。 メンバ変数ありきで関数を作ったりしてる限り、見た目がどうとか以前に糞クラス確定。
456 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 08:41:00 ] 要はケースバイケース 抽象化したい場合はメンバ関数経由にすればいいし 実装が固定なら直接アクセスすればいい
457 名前:デフォルトの名無しさん mailto:sage [2010/07/07(水) 23:36:26 ] 設計不足の言い訳ですか?
458 名前:デフォルトの名無しさん mailto:sage [2010/07/08(木) 03:49:07 ] 全てはインタフェースについて記述せよと、 かのエリック・ガンマ先生も言っておられてだな
459 名前:デフォルトの名無しさん mailto:sage [2010/07/09(金) 20:04:53 ] >>444 気にしないでくれ、俺優しいからさ
460 名前:デフォルトの名無しさん mailto:sage [2010/07/12(月) 22:56:30 ] 存在しないメンバを呼ぼうとしたら見つかるまで暗黙変換してくれればプロクシ作りやすくて便利なのに
461 名前:デフォルトの名無しさん mailto:sage [2010/07/13(火) 21:44:29 ] #define Q_D(Class) Class##Private * const d = d_func() こんなマクロがあったのですが、##Privateはどこから来ているのですか? また、ClassってのはClass Tの省略形ってことでおk?
462 名前:デフォルトの名無しさん mailto:sage [2010/07/13(火) 21:59:39 ] >>461 入門書読もうな
463 名前:デフォルトの名無しさん mailto:sage [2010/07/13(火) 22:19:02 ] >>462 は説明できないわけ
464 名前:デフォルトの名無しさん mailto:sage [2010/07/13(火) 22:30:18 ] トークン連結でググれ
465 名前:461 mailto:sage [2010/07/13(火) 22:57:35 ] >>464 thx
466 名前:デフォルトの名無しさん mailto:sage [2010/07/13(火) 23:59:19 ] ここまで俺の自演
467 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 22:24:53 ] ヘッダファイルで変数は「m_」という名前から始まっている場合が多いですが、 GUIプログラミングの場合はボタンやラベルも「m_」から始めていますか?
468 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 22:26:43 ] 俺はm_btnAddとかやってるな
469 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 23:25:54 ] >>467 「m_」は「クラスのメンバ変数」って意味だと思うぞ。 なので、ボタンやラベルを指す変数がクラスのメンバ変数ならやはりm_を使う。
470 名前:デフォルトの名無しさん mailto:sage [2010/07/15(木) 23:44:47 ] ちなみにメンバ変数にはうしろに _ をつけるという流儀もある 何にもつけないというやり方もある
471 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 18:31:24 ] C/C++(C#が扱えればなお嬉しい)が使えるIDEで UMPC(ATOM/メモリ512MB)程度のスペックのPCでも実用に耐えるようなモノはないでしょうか?
472 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 18:32:25 ] VC6
473 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 19:12:24 ] VC6っていま手に入ります・・・?
474 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 19:56:40 ] VC6 は C++ じゃないので論外。
475 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 20:30:23 ] >>471 VC8とか9は普通に使えたけど。
476 名前:デフォルトの名無しさん mailto:sage [2010/07/16(金) 21:02:32 ] メモリ512MBってのが厳しいな EeePCのメモリ2Gに増設して使ってるが、コード書くだけならVS2005でもそこそこいけてるな
477 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 00:47:13 ] >>475 ビルドとかしなければ使えそうですか? それなら移動端末に買おうと思うのですが
478 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 06:41:34 ] それだけの用途でなんでIDEが欲しいの? C#が主目的なら分からなくもないけど、別に携帯のメモでいいじゃんって思っちゃう。 擬似コードメモるだけで十分だよ。
479 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 07:09:07 ] 入力補完が欲しいんでないの
480 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 07:51:35 ] 馬鹿は大変なんだね。
481 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 18:04:31 ] externとグローバール変数の違いがよくわかりません どのようにちがうのですか?
482 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 18:14:15 ] externは他のソースコードに書かれたグローバル変数を使うためのおまじない
483 名前:デフォルトの名無しさん mailto:sage [2010/07/17(土) 18:18:04 ] >>481 変数におけるextern宣言は、その変数の定義が同一コンパイル単位内にないことの表明だね。
484 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 09:15:46 ] >>474 VC6 は c++, MSC は c
485 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 09:29:39 ] >>474 え?
486 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 09:39:17 ] >>485 標準への準拠の度合いを言ってるんだと思うよ
487 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 09:43:24 ] >>486 それなら確かに同意
488 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 11:58:15 ] C++のコードを読んでいると、newが成功しているか調べているコードがよくある気がします newってそんなに失敗しやすいんですか それとも、ネットワーク/ディスプレイ/スレッドなどの明かにリソースが限られているものだけ、 newの失敗しやすいのでif文で調べていると考えてもいいのでしょうか
489 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 12:19:53 ] >>488 newが失敗するって2通りあって、メモリが足りなかった場合と、クラスのコンストラクタが例外を投げた場合なんだけど、 前者は趣味で書く分にはほとんど気にしなくていい。 newできないほどメモリが逼迫していたらもうマトモにエラー処理ができないだろというのもある。 後者は発生する可能性があるならちゃんとチェックしなくちゃいけない。 クラスのドキュメントを読んで、コンストラクタが失敗する場合があるかどうかをよく確認しましょう。
490 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 12:20:13 ] >>488 >newが成功しているか調べているコードがよくある気がします >newってそんなに失敗しやすいんですか それ本当に newが成功してるかどうかを調べてるコード? その処理単位に再入した時にヌルかどうかを調べてるとか、そういう実装都合とかじゃなくて
491 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 12:20:44 ] >>488 失敗するかどうかの前にもしそのコードが下のように if で確認してたら100%意味がないことに注意ね int* a = new int; if (!a) { // エラー処理 } 理由は new は失敗すると例外を投げるから(new が nullptr を返すことは決してない) new する以上失敗しうるし、そもそもどんな環境で実行されるかも事前に予期できないので、 失敗してもいいように備えてるだけじゃないかな強制終了されるなんてユーザは望んでないと思うし
492 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 12:22:41 ] 失敗しやすいかどうかはともかく エラーチェックを怠るとデバッグに苦労するよ
493 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 12:24:39 ] 結論、今やnewの結果をチェックするコードは無意味。 寧ろ、適切に例外処理をしておくべし。 # MSVCならcatchじゃなくてCATCHを使うのかな?
494 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 12:29:26 ] >>488 メモリ確保については環境によるだろうが、通常は失敗しない。 しかし、たとえばWindowsで目一杯メモリを使うと 仮想メモリが不足しているとか警告が出てくると思うが、 そういう状況では失敗するかもしれない。 それはそうと、newが失敗したときはデフォルトで例外を投げるので、 if文で失敗を調べるのは方法が間違っているかもしれない。
495 名前:488 mailto:sage [2010/07/18(日) 12:58:13 ] >newが失敗するって2通りあって、メモリが足りなかった場合と、クラスのコンストラクタが例外を投げた場合なんだけど、 コンストラクタでは例外が発生しないフレームワークを使っています また、個人的にはコンストラクタの例外が嫌いなので作らないようにしたいと思います >それはそうと、newが失敗したときはデフォルトで例外を投げるので、 これは、システムが保証している事なんですか
496 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 13:20:25 ] VC6の時代に作られた
497 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 13:43:32 ] 少なくともC++03とC++0xの規格ではnewでメモリ確保に失敗したときは std::bad_allocを投げるよう定められている。
498 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 14:49:10 ] bad allocはめどいから投げっぱなしにしてmainで取って終わりにしちゃうよね普通
499 名前:デフォルトの名無しさん mailto:sage [2010/07/18(日) 18:07:44 ] ああstd::bad_allocを投げるような場合はprintf()もまともに動くかどうか わからん状態だからな
500 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 02:07:17 ] win7 64bitでVisualStudio2005は問題なく動作します? 64bitアプリを作成するには専用コンパイラが必要というだけで普通に使う分には問題ないですよね?
501 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 02:57:51 ] >>500 すべての機能が正常に動くかはわからんが、とりあえずこっちの64bitWin7では動いている。 32bitアプリも64bitアプリもビルドできる。
502 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 09:39:54 ] >>495 何年前からタイムスリップしてきたんですか?
503 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 11:23:40 ] 煽りとか要らない
504 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 14:28:18 ] >>501 ありがとう、これでPCの更新ができるわ
505 名前:デフォルトの名無しさん mailto:sage [2010/07/19(月) 20:03:34 ] >>504 www.microsoft.com/japan/msdn/vstudio/support/tools.aspx
506 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 18:32:31 ] frind classにしても「private メンバー にアクセスできません。」というエラーが出てしまいます class A{ private: int aaaa; public: friend class B; }; class B{ public: void err(int hoge){ hoge=30; } }; main(){ A a; B b; b.err(a.aaaa); } ソースを要約するとこんな感じです ggってみて似たような質問があったのですが、それでは名前空間がどうたらという結果でしたがクラスA,Bは名前空間に入れていません using namespace std;は使っていますが関係あるかどうか・・・
507 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 18:37:30 ] >>506 friend class B; と書くと、Bのメンバ関数からAのメンバにアクセスできるようになる。 そのソースではa.aaaaが書いてあるのはmain() main()はBのメンバか? B::err()の中身が気にはなるが、まぁ別の話。
508 名前:デフォルトの名無しさん mailto:sage [2010/07/20(火) 18:51:43 ] なるほど・・・そういうことでしたか main関数の中身をなんらかのクラスを作って移住させれば動きました。ありがとうございます errで意味ないことしてるのは渡すメンバーの中身を書き換えたりしない・・・みたいな意味合いです
509 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 13:57:17 ] 自作のヘッダやライブラリをまとめておく場所って定石みたいなものがありますか? 基本どこでもいいと思ってるんですけど、こうやっておくと便利、みたいなものがあれば教えて頂きたく。 OSはWindowsで、Visual Studioでの使用を想定してます。
510 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 13:58:43 ] >>509 どこでも置いてもいい インクルードパス指定すればおk
511 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 18:24:57 ] >>510 どこへ置いてもあまりメリット・デメリットはないってことですかね。 適当な場所を決めてまとめるようにします。 ありがとうございました。
512 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 19:47:19 ] /usr/includeとかってのはバカなのか?
513 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 20:36:13 ] ホーム直下に俺様ライブラリフォルダを作ってる ルート権限がない計算機で仕事することもあるし
514 名前:デフォルトの名無しさん mailto:sage [2010/07/21(水) 20:57:20 ] %HOME%\My Include %HOME%\My Library これに入れるとすごくWindowsっぽいですよ。 >>512 ないない。せめて/usr/local/include
515 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 00:27:11 ] 定期的に更新する5つのオブジェクトの内容を画面に表示するとき ・ひとつの表示クラスに5個のオブジェクトを所有させる ・表示領域を担当する表示クラスを5個作ってそれぞれを結びつける どちらにした方がやりやすいでしょうか・・・?
516 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 00:33:40 ] その5つのobjは互いに全然関係ないもの?
517 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 00:41:05 ] ひとつのクラスもしくは多態的な関係です
518 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 07:37:34 ] >>515 スレ違いっぽいね。 ↓こっちでどうぞ。 pc12.2ch.net/test/read.cgi/tech/1187922645/
519 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 20:58:57 ] new Test();とnew Test;は何か違う事はありますか?
520 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 21:03:47 ] >>519 前者は引数無しコンストラクタを呼び出す 後者はデフォルトコンストラクタを呼び出す
521 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 21:11:37 ] >>520 thx
522 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 22:55:06 ] メンバ変数ってnewでインスタンス化する意味ってあるんですか?
523 名前:デフォルトの名無しさん mailto:sage [2010/07/22(木) 22:57:22 ] メンバ変数がポインタの場合とか
524 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 01:25:56 ] >>519-521 てきとうなこといってんじゃねーよ。 後者は POD について値が不定となる。 POD じゃなければどちらも同じ。
525 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 15:30:06 ] >>519-521 これはひどいwwww >>522 すげー巨大だからヒープに確保しておきたいという事情がある時とか。
526 名前:デフォルトの名無しさん mailto:sage [2010/07/23(金) 15:43:02 ] >>522 配列を持つクラスを継承すると罠にハマる
527 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 01:09:10 ] >>526 くわしく
528 名前:デフォルトの名無しさん [2010/07/24(土) 08:28:38 ] >>520 をさらし上げ
529 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 15:17:51 ] >>526 それ、そのクラスかお前がバグってただけだろ。
530 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 16:16:57 ] >>526 まさか配列の各要素がDeep copy されなくて云々なんて言わないよな? そんな事で罠とか言わないよな?
531 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 16:25:41 ] >524 も同じレベル。 >後者は POD について値が不定となる。 POD じゃなければどちらも同じ。
532 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 16:38:36 ] 間違ってると思うなら正しい答えを書こうぜ
533 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 16:38:57 ] ・・・つまり、何がちがうんだってばよ?
534 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 17:06:43 ] 試したけど>>524 の正しいよな codepad.org/QCtdPthw
535 名前:デフォルトの名無しさん mailto:sage [2010/07/24(土) 21:35:04 ] お前らこれで満足だろ §5.3.4 New 15 A new-expression that creates an object of type T initializes that object as follows: ? If the new-initializer is omitted: ? If T is a (possibly cv-qualified) non-POD class type (or array thereof), the object is defaultinitialized (8.5). If T is a const-qualified type, the underlying class type shall have a user-declared default constructor. ? Otherwise, the object created has indeterminate value. If T is a const-qualified type, or a (possibly cv-qualified) POD class type (or array thereof) containing (directly or indirectly) a member of const-qualified type, the program is ill-formed;
536 名前:デフォルトの名無しさん [2010/07/24(土) 23:52:30 ] >>531 プッ
537 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 00:00:05 ] >>524 正しいじゃん
538 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 03:50:53 ] いくつかの乱数を作るときに、全ての乱数の和が常に同じになるようにすることって出来ますかね? 例えば1〜5の範囲の乱数を3つ作って、その3つの乱数の和は常に10になる、みたいな "同じ数"から乱数分引いていって、残った分を最後の乱数にすればいいかと思ったんですが それだと上の例で5が2つ出たら最後は0になって範囲外になってしまいます
539 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 04:46:45 ] #define N 3 #define R 5 int r[N]; int left = 10; int i, tmp; for(i = 0; i < N - 1; ++i){ tmp = left - (N - i); r[i] = (rand() % (tmp < R - 1 ? tmp : R - 1)) + 1; left -= r[i]; } r[N - 1] = left;
540 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 04:57:55 ] 適当に乱数を3つ出して、その比率に応じた数値に直せば良いんじゃないの。 もちろんそれをやると実数になっちゃうので、最後の微調整は必要だけど(あと0を除く処理とかも)。 例えばrand()を使って 23, 66, 70 の3つが得られたとすれば 23 + 66 + 70 = 159 から それぞれ 10 * 23/159, 10 * 66/159, 10 * 70/159 にするとか。 まあ最後の要素は引き算にすべきで、さらに 2つ目からn-1個目の切り上げ切り捨ての判断も 個々にではなく、それまでの累計を基にしないと 最後の数が(引き算で求めても)範囲外になる可能性が出てきちゃうね。
541 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 12:56:05 ] >>538 割合を乱数で出したらダメなの? 例えば常に和が10と決まっていて乱数範囲が1〜5だと言うなら、 和に対して 0.5〜0.1 の乱数を一つと、 1.0 から 上の乱数を引いた物に対して、また 0.5〜0.1 の乱数を求めれば
542 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 13:06:28 ] >>540 と >>541 は考え方は似てるけど、>>541 の方がスマート
543 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 13:11:33 ] 和が10になる組み合わせを列挙しておいて 乱数でいずれかの組み合わせを選択する 数値の出力順も乱数で決定する この方法なら最初の組み合わせを限定する事で 特定の数値が出やすいとかいうのを排除しやすい
544 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 13:27:33 ] 和が1000で50個の値の組み合わせ、とかだった場合どうすんのそれw
545 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 13:35:09 ] いずれにしても 1, 1, 5 とかの順番で出ちゃったら破綻するな 最後は引き算にして、範囲外になったら最初から振り直すのが確実じゃね? やり直しなしで求めるとした場合 出したい乱数の合計値をT、乱数の最大値・最小値をRmax・Rmin、 これまでに出た乱数の合計値をt、残りの乱数の個数をNと置いて N>1の時は乱数の下限値を max(Rmin, T-t-(N-1)*Rmax) 上限値を max(Rmax, T-t-(N-1)*Rmin) N=1(最後の一回)の時は r[n] = T-t とすれば良いかと。
546 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 13:42:56 ] >>539 でいいじゃん
547 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 13:51:23 ] >>546 1が2回出たら困るやん
548 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 14:28:53 ] >>541 でいいじゃん
549 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 15:36:49 ] randが0吐いたら困るんじゃね
550 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 15:41:06 ] これで満足か? #include<stdio.h> #include<stdlib.h> #define MAX_NUM 5 #define MIN_NUM 1 #define SUM_NUM 10 #define NUM_NUM 3 void swap(int *a, int *b){int c;c=*a;*a=*b;*b=c;} int main(void){ int i, sum, rest, max_num, min_num; int nums[NUM_NUM]; for(i=NUM_NUM-1,rest=SUM_NUM;i>=0;i--){ max_num=MAX_NUM; min_num=MIN_NUM; if(rest-(MAX_NUM*i)>MIN_NUM) min_num=rest-(MAX_NUM*i); if(rest-(MIN_NUM*i)<MAX_NUM) max_num=rest-(MIN_NUM*i); if(max_num<min_num) exit(1); nums[i]=rand()%(max_num-min_num+1)+min_num; rest-=nums[i]; } for(i=0;i<NUM_NUM;i++) swap(&nums[i], &nums[rand()%(i+1)]); for(i=0, sum=0;i<NUM_NUM;i++){ printf("%d\n", nums[i]); sum+=nums[i]; } printf("\nsum=%d\n", sum); return 0; }
551 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 15:55:29 ] まあ>>538 を読めば、自身がわかってないことがわかるが 最後の数字(最後に限らないが)を、それまでに算出した数を元に決めるやり方というのは 「乱数」の性質を満たしておらず、最後の数字に偏りが出る。 ただ、それでも良いのかもしれないけどね。
552 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 16:50:50 ] 総和が決まっててそれを構成する複数の値を求めたいってのは、 幅が決まってる数直線上に、複数の区切り位置をランダムに決めてくのと同じ事なので、 >>541 の考え方がシンプルでいいかもしれない。割合のランダム
553 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 18:56:01 ] 文字列を暗号化して色々な事に使いたいのですが、 RSAとAESのライブラリがある所をご存知ないですか?
554 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 19:02:53 ] main関数のreturnについて質問。 C/C++の宿題片付けます 138代目 pc12.2ch.net/test/read.cgi/tech/1279286575/416 416以降main関数のreturn 0;は省略可能か、 それが規格上の言語仕様なのかコンパイラ依存なのか、 スレチな議論が延々と続いてるんで、引き取ってくれ。
555 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 19:16:30 ] return文 wikipedia return文に遭遇しないまま関数の終わりまでプログラムが実行された場合、 そこに式を省略したreturn;が行われたと見なされる。ただし、C99とC++98では、 main関数に限り、そのmain関数の戻り値の型がintであればreturn 0;が あったと見なされる(X3010 9頁 5.1.2.2.3、X3014 35頁 3.6.1 5節参照)
556 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 19:17:14 ] いつの版のか知らんが手元にあったやつ載せとく。これでいいだろ。 > 5.1.2.2.3 Program termination > 1 If the return type of the main function is a type compatible with int, a return from the > initial call to the main function is equivalent to calling the exit function with the value > returned by the main function as its argument;9) reaching the } that terminates the main > function returns a value of 0. If the return type is not compatible with int, the > termination status returned to the host environment is unspecified.
557 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 20:05:00 ] C/C++の宿題片付けます 138代目 pc12.2ch.net/test/read.cgi/tech/1279286575/551-553 551 名前:デフォルトの名無しさん[] 投稿日:2010/07/25(日) 19:40:48 >>1 > 気に入らない質問やその他の発言はスルーの方向で。 return 0; は ○省略可能 ×不要 552 名前:デフォルトの名無しさん[sage] 投稿日:2010/07/25(日) 19:41:43 【結論】 mainのreturn 0; は ○不要 ○有ってもいい △記述の省略は可 C99では、mainの } に達したら、0を返して終了する。 C++では、mainの最後に達したら、return 0; を実行する。 553 名前:デフォルトの名無しさん[] 投稿日:2010/07/25(日) 20:02:21 return 0; は ×不要 ○省略可 ○各自で適切に記述 勝手に不要としないで下さい ><; お前の存在こそ、このスレにとっては不要です ><;
558 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 20:11:35 ] 不要と省略可能がどう違うのか説明してもらわないと、わけがわからないな。 どうせくだらない思い込みだからどうでもいいんだけど。
559 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 20:17:37 ] なかったらデフォルト値が使われるだけで不要な訳ではない ということでしょう
560 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 20:28:53 ] みんな目的語省略しすぎだな. プロセスローダ側から見てmainの返値は不要ではない return 0; の記述は省略可能 retrun 0; を省略できる場合にわざわざ書く労力は不要
561 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 21:15:58 ] 政治的に正しい言語定義が必要だな
562 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 23:26:38 ] 記述が不要だって言ってるのに終了コード自体が不要だって言ってると勘違いした人が、 わざとなのか知らないが、誤解を埋めるための目的語を添えずにわめき続けている、と。
563 名前:デフォルトの名無しさん mailto:sage [2010/07/25(日) 23:50:26 ] もう放っておけばいいよ
564 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 12:55:10 ] くだらない質問ですが、mapを使う際、変数名はどう命名するのが自然ですか? たとえばこのような場合、address_map? store_map? std::map<std::wstring, int> hoge; hoge[店の名前] = 場所
565 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 13:15:46 ] >>538 です 多くの回答ありがとうございました 割合をランダムで出す方向で行きたいと思います
566 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 17:36:50 ] >>564 冗長でいいなら、店の名前_場所_mapのようにするのが自然。 もうちょっと縮めたいなら、場所_mapの方が良好だと個人的に思う。
567 名前:デフォルトの名無しさん mailto:sage [2010/07/26(月) 22:57:34 ] >>566 ありがとうございます 普通の配列のように、値の方で命名するのも良さそうですね
568 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 13:24:17 ] C++の型は静的であって、型を間違えたところでコンパイラに怒られるだけ どのコンテナなのかもしくは配列なのか分からないんじゃ、扱い方が分からないんじゃないかと言われるかもしれないが どのみちmapだとだけ分かってもどうせ格納してる型を知るには宣言に飛ぶ必要がある コンテナの種類を載せることも冗長ではないか
569 名前:デフォルトの名無しさん mailto:sage [2010/07/27(火) 23:30:18 ] 「場所マップ」、「場所リスト」とかなら分かるけど「場所」だけじゃ気持ち悪いじゃん
570 名前:デフォルトの名無しさん mailto:sage [2010/07/28(水) 01:00:04 ] 場所[店] と書いて使うんならありじゃね?
571 名前:デフォルトの名無しさん mailto:sage [2010/07/28(水) 09:40:15 ] ユーザー定義の構造体やクラスを関数の返り値にするのってコストの面や 返り値が変更点になったときその影響範囲が広くて大変なことになりそうですが 普通にやって良いものなのでしょうか? それでも2値以上返す場合はそうするしかないのでしょうか?
572 名前:デフォルトの名無しさん mailto:sage [2010/07/28(水) 21:19:52 ] const unsigned char s[] = "char"; const unsigned char *s = "char"; 下の書き方だとgccに怒られるのですが、なぜ怒られるんですか?
573 名前:デフォルトの名無しさん mailto:sage [2010/07/28(水) 23:18:30 ] あるクラスのメソッドで構造体を引数にとるとき クラスが多態的になるとき引数の構造体も多態的に扱うというのは有りなのでしょうか? また、このとき構造体も基底部をインターフェイスとした方がいいでしょうか?
574 名前:デフォルトの名無しさん mailto:sage [2010/07/29(木) 00:04:06 ] >>572 上の"char"は{ 'c', 'h', 'a', 'r', '\0' }の構文糖。 下の"char"では無名のconst char[]が作られ、 const char*はconst unsigned char*に変換できないのでエラーになる。
575 名前:デフォルトの名無しさん mailto:sage [2010/07/29(木) 00:47:45 ] >>571 コストは実測してみろ。 影響範囲がどうのということは代替案はグローバル変数か?ありえん。 たいていは読みやすく書いておけばいい。 「返す」というなら素直に戻り値にするのがいいだろう。
576 名前:デフォルトの名無しさん mailto:sage [2010/07/29(木) 00:48:29 ] >>572 エラーメッセージ嫁。
577 名前:デフォルトの名無しさん mailto:sage [2010/07/29(木) 00:49:34 ] >>573 クラスが多態的なのと引数が多態的なのは関係ない。別々で考えて好きにすればいい。