1 名前:デフォルトの名無しさん mailto:sage [2010/05/09(日) 10:31:46 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/ スレを勃てるまでもないC/C++の質問はここで 10 pc12.2ch.net/test/read.cgi/tech/1242300936/ スレを勃てるまでもないC/C++の質問はここで 11 pc12.2ch.net/test/read.cgi/tech/1245059383/ スレを勃てるまでもないC/C++の質問はここで 12 pc12.2ch.net/test/read.cgi/tech/1248010352/ スレを勃てるまでもないC/C++の質問はここで 13 pc12.2ch.net/test/read.cgi/tech/1260842197/ スレを勃てるまでもないC/C++の質問はここで 14 pc12.2ch.net/test/read.cgi/tech/1269273471/
75 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 19:19:58 ] 別オブジェクトのデストラクタを呼ぶ形になるだけなら問題ない
76 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 19:48:20 ] >>75 それなら再帰とはいわん
77 名前:デフォルトの名無しさん mailto:sage [2010/05/12(水) 20:58:09 ] thisもパラメータとして考えるとれっきとした再帰 まあ普通は再帰と言わないだろうけど 木構造で考えるとそうなってんだろうなあ、とは思うが
78 名前:デフォルトの名無しさん [2010/05/12(水) 22:52:24 ] 「〜だけなら」とか「〜として考えると」とかは一切なく、 デストラクタが直接にでも間接にでも自身を呼び出す再帰関数であって全く問題ない。
79 名前:デフォルトの名無しさん mailto:sage [2010/05/13(木) 02:14:33 ] ~A() 内で this->~A() は規格で違法なんじゃね? きちんと調べてないけど
80 名前:デフォルトの名無しさん mailto:sage [2010/05/14(金) 15:37:18 ] ソケットプログラミングでおぬぬめの本はありますか。
81 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 13:47:37 ] >>79 うんだろうね。 規格は知らないけど、デストラクタの二重呼び出しという不正なコードになるね。 引数も無いから再帰の終了条件も無いし意味の無いコードだな。
82 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 13:49:47 ] 規格を知らない奴がごちゃごちゃ言うなw
83 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 13:58:53 ] >>79 = >>81 = ド素人
84 名前:デフォルトの名無しさん mailto:sage [2010/05/15(土) 14:20:36 ] 教授とか就職先の人とかに「君Cできる?」って聞かれたときに 「できますよ」って答えるにはどのくらいの知識が必要?
85 名前:デフォルトの名無しさん [2010/05/15(土) 14:24:17 ] >>84 知識は関係ないよ。やる気を試しているだけ。 仕事が欲しくないなら「できません」って言えばいい。
86 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 02:36:53 ] >>85 >>84 はあれだよ。つまり『やらないか』って言われたんだと思うよ。 「はじめてだけど……がんばりますっ!」って言えば高ポイントだったに違いない。
87 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 14:52:12 ] ありすぎて困るw
88 名前:デフォルトの名無しさん mailto:sage [2010/05/16(日) 22:45:27 ] 一つ質問させてください。 あるオブジェクトを登録できる管理クラスを用意し、 オブジェクトを登録後、オブジェクトが削除されたら登録も 自動的に解除するという機能を入れようと考えています。 管理クラスからもオブジェクトメソッドにアクセスできるようにしたいのですが、 この場合単純に相互参照を使用するのが一番良い方法なのでしょうか? 現状ではこのような形を考えています。 class Child{ private: Controller* m_pController; // Controller::register時に入る public: ~Child(){ m_pController->unregister( this);} void setControllerPointer( Controller* pController){ m_pController = pController;} void update( void); // Controllerから呼びたい }; class Controller{ private: Child* m_pChild[6]; public: void redister( Child* pChild, unsigned int slot); void unredister( Child* pChild); }; よろしくお願いします。
89 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 01:10:41 ] >>88 相互参照は後々トラブルの元だから避けるのが一番良い方法。 登録解除でオブジェクトを削除にするのが無難。所有者をはっきりさせるように設計しよう。 俺も昔そういう構造を作ることもあったけど今は作らないようにしている。
90 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 15:16:12 ] 質問です。 #include <iostream> #include <string> using namespace std; int main() { string org = string("org"); string org2 = string("org2"); string org3 = string("org3"); string &str = org; // コピーコンストラクタで初期化 string &str2 = org2;// コピーコンストラクタで初期化 string &str3(org3);// コピーコンストラクタで初期化 str2 = org; // コピー代入 str3 = org; // コピー代入 return 0; } コメントの理解で良いのでしょうか。 string &str2 = org2;がよくわかりません。
91 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 15:32:17 ] >>90 >// コピーコンストラクタで初期化 というのは3つとも全部間違い 参照をセットしているだけで、コンストラクタが呼び出されたりはしない
92 名前:90 mailto:sage [2010/05/17(月) 20:55:29 ] >>91 とても勉強になりました。参照難しいです。 ありがとうございます。
93 名前:デフォルトの名無しさん mailto:sage [2010/05/17(月) 21:31:04 ] >>89 ありがとうございます! やはり方向ははっきりさせないとあかんのですね
94 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 23:52:46 ] 9×9の2次元配列を3×3の小さなブロック9個で区切り左上から 0,1,2, 3,4,5, 6,7,8,と番号をつけるとします。 各番号のブロックにある数字を足し、1次元の配列にブロック内の数の合計を保存したいです。 以下のプログラムを書いた場合、1次元の配列の添え字を工夫すると簡単にプログラミングできる と聞いたのですが、どうしても思いつきません。アドバイスお願いします。 (i=0;i<10;i++) (j=0;j<10;j++) total[ここの添え字を工夫]=data[i][j]; totalを2次元配列にする方法は思いつくのですが、1次元に保存する方法がどうしてもわかりません。 よろしくお願いします。
95 名前:デフォルトの名無しさん mailto:sage [2010/05/20(木) 23:55:18 ] 数独?
96 名前:デフォルトの名無しさん [2010/05/21(金) 00:05:07 ] int data[81]; int total[3][3]; for(n=0;n<3;n++) for(m=0;m<3;m++) for(j=0;i<9;i++) for(i=0;j<9;j++) total[n][m] = data[m*3+i + (n*3+j)*9];
97 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 00:13:43 ] for(i = 0; i < 9; i++) total[i] = 0; for(i = 0; i < 9; i++) for(j = 0; j < 9; j++) total[(i / 3) * 3 + j / 3] += data[i][j];
98 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 03:23:12 ] 8つのCPUが動作している環境において、 GDBでのデバッグ時に各CPUのプロセスで set debug_flag2 = 0x00008040 set test_flag5 = 0x00802020 などとと入力したい。 これを8回も入力するのが大変なので 一つのCPUで入力すれば各CPUでも設定されるようにしたいのですが そういう処理って可能ですかね? (第一引数をデバッグフラグ名の文字列, 第二引数をフラグ値 のような関数を作成したい)
99 名前:94 mailto:sage [2010/05/21(金) 23:02:14 ] >>96 +97 ありがとうございます。 もう少し大きいM×Nの配列で、p×qサイズごとの合計の値を調べるにはどうしたら良いでしょうか?
100 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 23:36:59 ] 応用力皆無だな
101 名前:デフォルトの名無しさん [2010/05/21(金) 23:43:35 ] >>99 int data[M*N]; int total[q][p]; int t,i,j,m,n; for(n=0;n<N;n++) for(m=0;m<M;m++) { for(j=0;j<q;j++) for(t=i=0;i<p;i++) t = data[m*p+i + (n*q+j)*M]; total[n][m] = t; }
102 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 23:50:13 ] Mはpの整数倍なのか? Nはqの整数倍なのか?
103 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 23:50:30 ] なにやってるか理解できれば、それをアレンジするだけだと思うんだが
104 名前:デフォルトの名無しさん mailto:sage [2010/05/21(金) 23:55:10 ] まあ基本すらできなかったんだから応用なんて無理だね
105 名前:94 mailto:sage [2010/05/22(土) 00:00:20 ] >>101 totalは1次元の配列で処理したいです。 >>102 Mはpの整数倍・Nはqの整数倍でおkです。
106 名前:デフォルトの名無しさん [2010/05/22(土) 00:06:05 ] int data[M*N]; int total[q*p]; int t,i,j,m,n; for(n=0;n<N;n++) for(m=0;m<M;m++) { for(j=0;j<q;j++) for(t=i=0;i<p;i++) t = data[m*p+i + (n*q+j)*M]; total[n*M+m] = t; }
107 名前:デフォルトの名無しさん [2010/05/22(土) 00:12:18 ] それ、授業中に3〜4行で書けるって言われたんじゃねぇの?
108 名前:デフォルトの名無しさん [2010/05/22(土) 00:30:51 ] int data[M*N], total[q*p], n, t, i; for(n=0;n<M*N;total[n++] = t) for(t=i=0;i<p*q;i++, t=data[n%M*p+i%p + (n/M*q+i/p)*M]);
109 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 00:55:57 ] int i, j, data[M][N], total[(M/p)*(N/q)]; for(i=0; i<M; i++) for(j=0; j<M; j++) total[i/p*(N/q)+j/q] += data[i][j];
110 名前:デフォルトの名無しさん [2010/05/22(土) 01:26:27 ] int data[M*N], total[q*p], n, t, i; for(i=0; i < M*N; i++) total[i/(M/p)%(M/p) + (i/M)/(N/q)*(M/p)] += data[i];
111 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 01:33:47 ] なんだろう、このアホは
112 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 01:36:34 ] そんなに悔しかったのか?
113 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 01:49:25 ] え?w
114 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 01:59:55 ] wwwww
115 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 02:08:28 ] >>109 >for(j=0; j<M; j++) じゃなくてfor(j=0; j<N; j++) じゃね? >>110 pとqを勘違いしてね?
116 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 02:41:15 ] あんなの質問してるやつに分かるわけないだろwwwwww
117 名前:デフォルトの名無しさん [2010/05/22(土) 02:55:31 ] >>115 > pとqを勘違いしてね? そう?
118 名前:デフォルトの名無しさん [2010/05/22(土) 03:03:26 ] int data[M*N], total[q*p], n, t, i; for(i=0; i < M*N; i++) total[i/p%(M/p) + (i/M)/(N/q)*(M/p)] += data[i];
119 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 03:07:05 ] 元は二次元配列なのに執拗にdata[M*N]に拘るのは病的だなw
120 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 03:35:46 ] >>117 pとqは小さなブロックのサイズなのに、total[q*p]じゃそうならないだろ
121 名前:デフォルトの名無しさん [2010/05/22(土) 03:37:03 ] ああ、そうだな。
122 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 08:23:57 ] >>109 totalを0で埋めるか初期化しないとまともな結果にならんだろw
123 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 08:58:18 ] staticならすべて解決
124 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 10:40:25 ] 標準の組み込み型って char 1byte 固定 short 2byte以上 long 4byte以上 short <= int <= long float 32bit 固定 double 64bit 固定 long double 80bit 固定 であってる?
125 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 10:49:21 ] 規格の話なら char 1byte 固定 short <= int <= long しか合ってない 1byte >= 8bit short 最低でも-32767〜32767を表現可能 long 最低でも-2147483647〜2147483647を表現可能 float <= double <= long double 値の範囲は面倒くさいので略(最低でも表現でいないといけない指数とか桁数とかはある)
126 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 10:55:42 ] つまり、 char = short = int = long 1byte = 32bit でも規格合致
127 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 12:33:30 ] VC++限定にしても long double 64bit だしなあ。
128 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 13:33:43 ] g++は128bitだな 80bit分しか使ってないけどアラインメントの関係で DOS時代に使ってたTurbo C++は80bitだったと思う
129 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 13:57:25 ] >>128 >g++は128bitだな -m96bit-long-double がデフォルトのこともある。環境によって異なる。
130 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 14:10:51 ] DLLとかLIBファイルってバイト長整数長少数モデルとかいちいち考えてやらないといけないの?めんどくさくね?
131 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 14:34:55 ] >>122 文句言うなら、回答書いてみろよ
132 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 17:08:07 ] >>131 悔しいなら正解書いてみろよ
133 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 19:10:57 ] >>131 「totalを0で埋めるか初期化」するって書いてるだろw
134 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 19:15:44 ] コードかけよw
135 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 19:18:12 ] え? そんなコードも書いてもらわないと分からないの?!
136 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 19:25:22 ] 自然言語で答えるだけならアホでも出来る。無駄レス。
137 名前:デフォルトの名無しさん [2010/05/22(土) 19:26:57 ] まあ、アホには出来ないだろうが、ど素人でも出来る罠
138 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:08:31 ] 宿題は自分で解こう
139 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:30:13 ] すみません、txtファイルに書いた2進数(10011101)をchar配列に保存しているのですが、 これをint型10進数(10011101 → 157)に直すシンプルな方法は無いでしょうか? 現状atoiで整数にしてから 10ずつ割りながら、整数で1の論理積を確認し、 別途1..2..4..8..と数値を足し合わせ作る手しか思い付かず。。 (※書き込み失敗したのか2度目の書き込みになります; もし別スレに誤爆しててマルチになってたらすみません;)
140 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:39:10 ] 文字列を後ろから走査してn桁目が1なら1<<nを足す
141 名前:デフォルトの名無しさん mailto:sage [2010/05/22(土) 21:43:14 ] 特別便利な方法はないけど、普通にやれば十分では? main() { char buf[]="10011101"; char *p; int x = 0; for(p=buf; *p ; p++) { x *= 2; if(*p == '1') x+=1; } printf("x=%d\n", x); /* x=157 */ }
142 名前:139 mailto:sage [2010/05/22(土) 22:25:44 ] >>140 ありがとうございます。ビットシフトでも良いのでしたね、記憶しておきます。 >>141 サンプルありがとうございます。 ポインタを使えばこうもシンプルに書けるのですね。 勉強になります。 2倍にする事でビットシフト同等の効果・・学んだ記憶が何とか蘇る程度でした。 とても勉強になりました。お2方、ありがとうございました。
143 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 20:38:46 ] wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
144 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 21:36:56 ] int num[100][100],i,j; int X1[4][4]={{0,1,2,3},{4,5,6,7},{8,9,10,11},{12,13,14,15}}; int X2[4][4]={{15,14,13,12},{11,10,9,8},{7,6,5,4},{3,2,1,0}}; int X3[4][4]=・・・・; int X4[4][4]=・・・・; for(i=0;i<100;i++) for(j=0;j<100;j++) num[i][j]+=X1[i%4][j%4]; この様なプログラムにおいて、X1〜X4を簡単に切り替える方法はありませんか? Xの配列は必要に応じて1〜4を選択したいのですが、プログラムで何カ所も使っているため、書き換えるのが非常に面倒です。 #define X "x1" として、X[i%4][j%4]としてみたのですが、予想通り無理でした。 1カ所書き換えるとすべてに適用されるような方法はありませんか?
145 名前:デフォルトの名無しさん [2010/05/23(日) 21:40:06 ] int *x[4][4] = {X1, X2, X3, X4};
146 名前:デフォルトの名無しさん [2010/05/23(日) 21:41:10 ] int x[][4][4] = {X1, X2, X3, X4};
147 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:05:46 ] #include <iostream> int main(void) { int x1[4][4]; int x2[4][4]; int x3[4][4]; int x4[4][4]; typedef int (*px_t)[4]; px_t x[] = {x1, x2, x3, x4}; x[0][1][2] = 100; std::cout << x1[1][2] << std::endl; return 0; } typedefなしで書く方法がわからんorz
148 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:13:24 ] int (*x)[4][4] = {x1, x2, x3, x4}; xはint型の[4][4]の配列へのポインタ
149 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:18:02 ] >>145 ,146, 148 コンパイルできない
150 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:35:50 ] int (*x[])[4] = {x1, x2, x3, x4};
151 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:39:23 ] >>147 <typeinfo>を使って生の型を
152 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:42:44 ] >>150 それでいいっぽいな ただし配列名での初期化が出来るのはC++のみで、Cだとコンパイルエラーが出た #include <iostream> #include <iomanip> int main(void) { int x1[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; int x2[][4] = {{17, 18, 19, 20}, {21, 22, 23, 24}, {25, 26, 27, 28}, {29, 30, 31, 32}}; int x3[][4] = {{33, 34, 35, 36}, {37, 38, 39, 40}, {41, 42, 43, 44}, {45, 46, 47, 48}}; int x4[][4] = {{49, 50, 51, 52}, {53, 54, 55, 56}, {57, 58, 59, 60}, {61, 62, 63, 64}}; int (*x[])[4] = {x1, x2, x3, x4}; int i, j, k; for (k = 0; k < 4; k++) { std::cout << "x = " << (k + 1) << '\n'; for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) std::cout << std::setw(4) << x[k][i][j]; std::cout << std::endl; } } }
153 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:51:33 ] Cだとわざわざこういう風に書かないとならん 面倒だな #include <stdio.h> int main(void) { int x1[][4] = {{1, 2, 3, 4}, {5, 6, 7, 8}, {9, 10, 11, 12}, {13, 14, 15, 16}}; int x2[][4] = {{17, 18, 19, 20}, {21, 22, 23, 24}, {25, 26, 27, 28}, {29, 30, 31, 32}}; int x3[][4] = {{33, 34, 35, 36}, {37, 38, 39, 40}, {41, 42, 43, 44}, {45, 46, 47, 48}}; int x4[][4] = {{49, 50, 51, 52}, {53, 54, 55, 56}, {57, 58, 59, 60}, {61, 62, 63, 64}}; int (*x[4])[4]; int i, j, k; x[0] = x1; x[1] = x2; x[2] = x3; x[3] = x4; for (k = 0; k < 4; k++) { printf("x%d = \n", k + 1); for (i = 0; i < 4; i++) { for (j = 0; j < 4; j++) printf(" %3d", x[k][i][j]); putchar('\n'); } } return 0; }
154 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:51:35 ] >Cだとコンパイルエラーが出た 当たり前だ。 Cだと配列の要素には定数以外使えない。 実行時に決まるスタック上のアドレスや関数呼び出しの戻り値などは 配列を初期化する値に出来ない。
155 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 22:51:45 ] >>151 かしこいな! こんな使い方があったのか
156 名前:デフォルトの名無しさん mailto:sage [2010/05/23(日) 23:30:19 ] ideone.com/ssEMB ideone.com/v9lsi codepad.org/QCxegedL なんだこりゃ だめだこれ
157 名前:デフォルトの名無しさん [2010/05/24(月) 00:03:15 ] クラスの配列で 要素0内の複数のメンバ変数を要素1に複製したいときって 普通にmemcpyでOK?
158 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:21:49 ] >>157 条件によっては大丈夫な場合もあるけどまったく保証はされない。
159 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 00:46:11 ] >>157 Cならおk C++なら、コピーするメンバ変数が組み込み型かPODならおk
160 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 02:29:54 ] ていうか a[1] = a[0]; でえーやん。 ディープコピーの問題だとかメモリ確保してた場合にどうだとかは 代入演算子をどうする(作る)かの問題だけど。
161 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 20:56:06 ] stl風にコンテナの中から絶対値が最大のモノを指すイテレータを探すにはどう書く? findだと最初のが見つかったら終わっちゃうよね あ、ちなみにソート済みコンテナではないです
162 名前:デフォルトの名無しさん [2010/05/24(月) 22:14:18 ] 質問です。Hoge という class が合ったとして、その配列の pointer を あるプログラムのheaderで以下のように定義して Hoge* h[2]; それをメインルーチンで以下のようにobject を指すようにしたとします。 h[0] = new Hoge("foo"); h[1] = new Hoge("bar"); そのときにデストラクタでは delete h[0]; delete h[1]; のように二回呼ばないといけませんか? それとも delete [] h; でいけるのでしょうか?何となく前者じゃないといけない気がするのですが。 よろしくお願いします。
163 名前:デフォルトの名無しさん [2010/05/24(月) 22:17:08 ] 2回呼ばないといけません。
164 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:27:20 ] VisualStudio2010でWIN32アプリケーションの勉強をしているのですが、 作った関数で戻り値に文字列を指定する事は出来るのでしょうか? 普通に LPWSTR CLASS(・・){ WCHAR str[100] 略 return str } とかやっても文字列は帰ってきませんし、他のサイトでは文字列を戻す関数作成のサンプルを見かけません。
165 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:27:40 ] >>162 delete[] h; は完全な間違いです。 未定義の動作ですから鼻から悪魔です。
166 名前:デフォルトの名無しさん [2010/05/24(月) 22:31:22 ] >>164 ローカル変数を戻り値にしちゃだめだよ。
167 名前:デフォルトの名無しさん [2010/05/24(月) 22:33:44 ] >>163 >>165 ありがとうございます
168 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:37:49 ] >>164 std::stringとかstd::wstring
169 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 22:40:38 ] >>164 文字列受け取りたい場合は void GetStr( WCHAR* str, int size ) { strに値をコピー } ってやったら?
170 名前:デフォルトの名無しさん [2010/05/24(月) 23:32:38 ] #include <stdio.h> int main(void){ int n=1; float w,kei=0,heikin,max,min; while(1){ printf("%d件目のデータを入力してください-->",n); scanf("%f",&w); if(w==0) break; kei+=w; if(n==1){max=w;min=w;} if(w>max) max=w; if(w<min) min=w; n++; } heikin=kei/(n-1); printf("合計 :%.1f[kg]\n" "件数 :%d[件]\n" "平均値:%.1f[kg]\n" "最大値:%.1f[kg]最小値:%.1f[kg]\n",kei,n-1,max,min); return 0; } 最小値にループを抜けるための条件のW=0が代入されてしまいます breakでループを抜けたらその後の kei+=w; if(n==1){max=w;min=w;} if(w>max) max=w; if(w<min) min=w; の文は処理されないはずではないのですか?
171 名前:デフォルトの名無しさん [2010/05/24(月) 23:33:52 ] 浮動小数点と==は相性悪いよ
172 名前:デフォルトの名無しさん mailto:sage [2010/05/24(月) 23:41:08 ] c言語の質問です。 main(void){ register int a[10], i; for(i = 0; i < 10; i++) scanf("%d", a[i]); } というようにレジスタ上の配列aに数値を読みこみたいのですが、 windowsのgccでコンパイルするとwarningが出てしまい、 配列aはレジスタ上に配置されずにメモリに配置されている予感がします これをレジスタ上に確保したままfor文で数値を読み込む方法はあるのでしょうか?
173 名前:デフォルトの名無しさん [2010/05/24(月) 23:41:44 ] nをint型にしていてもダメなんですか?
174 名前:デフォルトの名無しさん [2010/05/24(月) 23:42:30 ] >>173 は>>171 へ
175 名前:デフォルトの名無しさん [2010/05/24(月) 23:48:46 ] breakするかどうかは、nでは決まらないよね?