スレを勃てるまでもないC/C++の質問はここで 17at TECH
スレを勃てるまでもないC/C++の質問はここで 17 - 暇つぶし2ch250:デフォルトの名無しさん
10/10/16 00:01:21
VSだったらプロジェクト新規作成するときにDLL選べなかったっけ?

251:デフォルトの名無しさん
10/10/16 00:09:18
上司に
C++のスタティッククラスのコンストラクタに処理を書けば
何よりも早く呼ばれるからそこでLib全体の監視起動しろごるあ
ついでに終了処理をデストラクタに書けば
Libが存在する間ずっと動く処理が書けるだろ?簡単だろ?ごるあ
と言われたのですが、
そんなことできるんでしょうか?・・・orz

252:デフォルトの名無しさん
10/10/16 00:13:04
シュワルツカウンタというカッコいい名前のテクニックがあってな。たぶんそれのことでしょ

253:デフォルトの名無しさん
10/10/16 01:29:11
おお!

254:デフォルトの名無しさん
10/10/16 07:56:18
>>251
スタティック(静的)クラスなるものはC++にはない。Managed C++にはある。

255:デフォルトの名無しさん
10/10/16 08:17:00
>>252
カッコいいか? 少なくともやってる事はダサダサだぞ。

256:デフォルトの名無しさん
10/10/16 08:18:38
文盲乙

257:デフォルトの名無しさん
10/10/16 08:31:11
staticなstorage classって意味でなら出てくる
その時のクラスってのはいわゆるclassやstructのことじゃなくて、autoやstaticとかの話
普通のstatic変数の初期化はプログラムで最初に実行されるけど
クラスとかは最初に制御が移った時点で初期化される
なので、宣言と同時に定義もしてしまうこういうやり方で出来るってことじゃないかな

static class A{public: A(){printf("hoge");}} a;

258:デフォルトの名無しさん
10/10/16 08:35:01
って、俺全然スレの流れ読めてないな・・シュワルツカウンタなんてあるのか
レスした後で気づくとか

259:デフォルトの名無しさん
10/10/16 13:24:04
結論は

C++の静的クラスなるものは全メンバがstaticなクラスのことで
静的クラスはコンストラクタデストラクタを持てない

→ >>251 はGCCでは不可能

でOKでつか??

260:デフォルトの名無しさん
10/10/16 13:31:38
>>259
スタティッククラスってのは存在しないだろう。
仮に非スタティックメンバーが無くてもデフォルトコンストラクタは呼べるしnewもできる。

261:デフォルトの名無しさん
10/10/16 14:25:05
全てのメンバがデフォでstatic修飾されたクラスとか
constクラスとかあったら一部の人が大喜びするかもな

262:259
10/10/16 15:31:07
>>257
結論は>>252の方法を使えば、可能ってことでしょ
じゃなきゃ、C++ライブラリのcoutとかは処理系依存ってことになってしまう
259で説明したことは仕様書の6.7に書いてる。読み違えてなければ。

全メンバがスタティックなクラスでも
staticを付けてクラスを宣言してもコンストラクタ/デストラクタは持てる
後者は、コンストラクタがちゃんと動いたときのみデストラクタが走る

263:デフォルトの名無しさん
10/10/16 15:36:09
boost::randomを使っていて

 mt19937 gen(time(0));
 uniform_smallint<> dst(1, 6);
 variate_generator<mt19937&, uniform_smallint<> > rand(gen, dst);
 cout << rand() << endl;

のように書いている(実際には乱数を使って色々処理をする)のですが、
ここの分布関数を設定で切り替えて動かすようにしたいと考えています。

が、生成される rand() はみんな違うシグネチャを持つので、後段の
処理の部分だけ1つのコードにまとめることができず、C++でどう書くのが
普通なのか悩んでいます。

こういう場合、

 class wraprand {
 public:
  wraprand(boost::function<int()>) { ... }
  wraprand(boost::function<double()>) { ... }
  wraprand(boost::function<bool()>) { ... }
  double operator() () { ... }

のようにアダプタを書いて、rand を boost::function を介して
ラップして持ち回る以外に簡単な方法はないでしょうか?


264:デフォルトの名無しさん
10/10/16 15:42:01
>>262
お前、頭壊れてない?
>>259と正反対の事言いだすなら、取り消してから言い出せよ。

265:デフォルトの名無しさん
10/10/16 15:55:25
template <class R> void func(R rand)
{
cout << rand() << endl;
};
でいいんじゃないの?

266:デフォルトの名無しさん
10/10/16 16:58:31
うわーすんません、262は、名前欄が本来は257で
リンク先が259です。ケアレスミス。

267:デフォルトの名無しさん
10/10/16 18:13:26
よくバグを出す人と見ますた

268:デフォルトの名無しさん
10/10/16 18:32:22
はじめて投稿させていただきます初心者です。
今キーボードから入力した無数の数字の中から、
大きいものを順番に上から3つ表示するプログラムを作成中で、
インターネット上で同様のプログラムがあったので拾ってきました。
ここでif以降の処理の意味が理解できませんでした。
おそらく上から順番に次々と数字を代入している処理なのでしょうが・・
また最初に定義されていない「t」という変数の意味と、
t=a a=d d=tとループするような代入を繰り返していることの意味や、
なぜ同じ変数を指定しているのに処理が実行できるのかがわかりません。。
どなたかわかりやすく教えていただけないでしょうか

#include <stdio.h>
int main() { float a,b,c,d; int i; a=b=c=0;
for(i=0;i<10;i++){ scanf("%f",&d);
if(d>a){ float t=a; a=d; d =t; }
if(d>b){ float t=b; b=d;  d =t;}
if(d>c){ float t=c; c=d; d =t; }
}
printf("%.1f>%.1f>%.1f\n",a,b,c);
return 0;
}


269:デフォルトの名無しさん
10/10/16 18:42:36
>>268
いわゆるswap、入れ替えのコードだね。
変数xとyの値を入れ替えたいと思ったとき、
どんな代入文を書けばいいか想像してみよう。

270:デフォルトの名無しさん
10/10/16 19:10:47
>>267 その通りです生きていくのが辛い助けt

>>268 例えば、a=b;b=aでa,bが交換出来るか考えて見るといいよ

271:デフォルトの名無しさん
10/10/16 20:29:57
違う場所から書き込んでます>>268です。

>>269さん>>270さんありがとうございます。
直接代入する形だとa=bになって意味がなくなるので便宜上別の数を利用しているんですね
定義なしでも使える数があるということなのかな?少しわかった気がします
そう考えてみると、最初abcの値が0からスタートして、
仮に入力が1,2,3,4,5 と入力された場合は
0,0,0 => 1,0,0 => 2,1,0 => 3,2,1 => 4,3,2 => 5,4,3
と次々と大きい数字を入れていくってことですか?!
ぐぐぐなんかすごい感動してきたプログラムおもしろいなああ

272:デフォルトの名無しさん
10/10/16 21:14:39
なぜ2ちゃんねるは、技術的な事を質問すると
誰も答えてくれないのですか?

273:デフォルトの名無しさん
10/10/16 21:18:42
具体的でない質問は考えうるケースが多すぎてエスパーが必要になるからじゃね

274:デフォルトの名無しさん
10/10/16 22:44:05
あのスレの901が技術的な質問だというなら病院行った方がいい

275:デフォルトの名無しさん
10/10/16 23:40:08
ググっても答えが見つからない問題は、答えてもらえる可能性は低いわな。
そういう時に自分でなんとか出来るかどうかって所で、人は二種類に分けられるんだと思う。

276:デフォルトの名無しさん
10/10/16 23:40:43
いいや10種類に分けられるよ

277:デフォルトの名無しさん
10/10/17 00:43:26
はいはい死んでね

278:デフォルトの名無しさん
10/10/17 03:06:09
>>271
何か勘違いしてねぇか?
>268のコードではtもちゃんと定義しているぞ。
if(d>a){ float t=a; a=d; d =t; }
このコードは、こういう意味だ。
if (d > a) {
float t = a;
a = d;
d = t;
}
勿論、tはここでも定義されているし、他のif文の後のブロック内でも定義されている。
つまり、tはブロック内でのみ有効な変数として定義されているわけだ。
一応念の為に書き添えておくと、そのコードは所謂「ソート」の前哨戦だな。
ソートの世界は深くて楽しいぞw

279:デフォルトの名無しさん
10/10/17 14:22:35
簡単な質問ですが、よろしいでしょうか?

strcatで \ を連結する場合は
'\\'でエラーがでてしまうので"\\"にしたのですが
これであっていますでしょうか?

280:デフォルトの名無しさん
10/10/17 14:29:06
>>279
正しい。

281:デフォルトの名無しさん
10/10/17 14:30:01
ありがとうございます。

282:デフォルトの名無しさん
10/10/17 15:33:46
>>279
どうせその後ファイル名も連結する積もりなら、sprintf()を使った方が手っ取り早くないか?

283:デフォルトの名無しさん
10/10/17 15:37:33
char buf[256];
sprintf(buf, "%.174s\\%.80s", path, file);

284:デフォルトの名無しさん
10/10/17 16:19:43
>>278
あああなるほど!!!そういうことだったんですね
float t ってこの場所で定義していたのか・・・
ブロック内だけで定義するってこともできるんですね。すごい勉強になります
またお世話なるかもしれませんがよろしくお願いします
ありがとうございました!

285:デフォルトの名無しさん
10/10/17 19:51:32
大量の画像ファイルを扱うプログラムを作っているので
メモリ上にキャッシュし、キャッシュの容量が大きくなってきたら解放したいのですが、
どんな風にやればいいでしょうか

ファイル名から画像を取得できる連想配列と連結リストをそれぞれ用意して、
キャッシュの容量が一定値に達したら
リストの最初の画像を取得→連想配列からも削除

という方法を考えましたが、もっと良い方法があれば知りたいです

プログラムの殆どで参照カウントを使っているので、キャッシュから
画像を取得するときに必ずカウントを増やさなければいけないのも気になります

286:デフォルトの名無しさん
10/10/17 20:21:31
Javaにはそういうとき便利な連想配列と連結リストが合体したLinkedHashMapっていうのがあるんだけどな・・・

287:デフォルトの名無しさん
10/10/17 21:23:10
for(std::list<int>::iterator it = l.begin(),int i = 0;
i < 10; ++i) {
<iro iro>;
}
とやりたいのですが、FOR文の最初の項には文を一個しかかけないのでしょうか?


288:デフォルトの名無しさん
10/10/17 21:36:22
はい、残念ながら

289:デフォルトの名無しさん
10/10/17 21:40:05
>>287
,の後に宣言は書けないんじゃね?

290:デフォルトの名無しさん
10/10/17 21:41:22
それって不便な仕様だよね
{
list<int>::iterator it = l.begin();
int i = 0;
while(i < 10)
{
・・・
++i;
};
}
とか書けばほとんど同じといっていいけど不恰好だ

291:デフォルトの名無しさん
10/10/17 22:06:26
ループはint iに依存してるからそっちだけforに残したりする

292:デフォルトの名無しさん
10/10/17 22:08:13
for(pair<std::list<int>::iterator,int> it(l.begin(),0);it.second<10;++it.second){
//iroiro
}
すごく…不恰好です…
書いといていうのはあれですが…
こんなのは…嫌です…

293:デフォルトの名無しさん
10/10/17 22:09:28
std::list<int>::iterator it;
int i;
for(it = l.begin(),i = 0; i < 10; ++i) {
<iro iro>;
}
これならいけるけどね

294:デフォルトの名無しさん
10/10/17 22:12:34
思ったんだけと、287含め、誰もitインクリメントしてないよね
itを10進めながら処理するループだと思ってたけど、違うのかな?

295:デフォルトの名無しさん
10/10/17 22:40:00
if( int i = 1 )
 for( std::list<int>::iterator it = l.begin(); i <= 10; ++i ){
  <iro iro>;
 }

296:デフォルトの名無しさん
10/10/18 10:03:32
質問があります。
今、データを読み込んで整理しています。
手順としては
1、データを1行ずつ読み込む(行はたくさんあります)
2、読み込んだデータをif文で整理しています。

しかし、if文を用いているのですがすべて同じ結果になってしまいます。
何故か分かる方はいらっしゃいますか?
ちなみに先生に聞くと読み込むプログラムはあっていてif文が間違っていると言われました。
私が書いているのは以下のような具合です。
int a = s.b + s.c;(sのクラスは用意しています。)
if ( a = 1){
if ( s.nenn == 2 || s.nenn == 3 ) {
cout << s.kei << endl;
}
}
if ( a = 2){
if ( s.nenn == 2 || s.nenn == 3 ) {
cout << s.kei << endl;
}
}


297:デフォルトの名無しさん
10/10/18 10:07:34
とりあえずは = と == 間違えてるからかな

298:デフォルトの名無しさん
10/10/18 10:35:22
297の書き込みをしてくださった方ありがとうございます。
無事に出来ました。
本当にありがとうございました。

299:デフォルトの名無しさん
10/10/18 15:32:16
if文の際に例えば1のデータだけを持ってきたいときは
if ( a == 1){} 
等で示すのは分かるのですがデータが空欄のものを持ってきたいときは
どのようにすればよいのでしょうか?

300:デフォルトの名無しさん
10/10/18 15:37:07
if ( a == 0 ) {}

301:デフォルトの名無しさん
10/10/18 17:01:01
C言語より先に日本語

302:デフォルトの名無しさん
10/10/18 18:41:34
ローカル変数やメンバ変数が破棄される際、その順番は規格で決まっているのでしょうか?
決まっているなら、その順番を教えていただけないでしょうか。

303:デフォルトの名無しさん
10/10/18 18:45:09
書かれた順にコンストラクトされてその逆順にデストラクトされる

304:デフォルトの名無しさん
10/10/18 19:59:13
メンバ変数の場合、初期化リストに書いた順番でなく宣言に書かれた順番に従う。

305:302
10/10/18 22:35:42
>>303-304
勉強になります。
どうもありがとうございました。

306:デフォルトの名無しさん
10/10/18 22:43:40
初期化リストの構文がクソ。

307:デフォルトの名無しさん
10/10/19 10:47:14
インデントなどのスタイルを指定したらそれに合わせてコードを整形してくれるアプリって在りますか?
あるなら名前を教えてほしいのですがよろしいでしょうか?

308:デフォルトの名無しさん
10/10/19 10:56:19
>>307 indent

309:デフォルトの名無しさん
10/10/19 14:14:19
VisualStudio

310:デフォルトの名無しさん
10/10/19 22:16:38
質問です
ヒープ領域にメモリを取れる限界量というのは決まっているんでしょうか?
short int *array = new short int[200000];
という類の事をしたらコンパイルは通るものの、アプリケーションがフリーズしてしまいます

311:デフォルトの名無しさん
10/10/19 22:19:23
積んでるメモリとスワップ領域に相談してくれ

312:デフォルトの名無しさん
10/10/19 22:22:04
>>310
たったそんだけでフリーズするの?

313:310
10/10/19 22:34:08
>>311
メモリ4GBを積んでいるので、数MBのnewくらいなら大丈夫かと思ったんですが・・・

>>312
してしまいます・・・
デバッガで追いかけたところ、
short int *array = new short int[200000];
のarrayに-12851という値が入っているのみなので、配列の確保に失敗しているのかなと思った次第です

314:デフォルトの名無しさん
10/10/19 22:43:42
>>313
ちがう原因でフリーズしてんじゃないの?

315:デフォルトの名無しさん
10/10/19 22:47:38
>>314
大きいサイズの確保をし始めたら出てきた上にデバッガで追えないのでコレかと思ったのですが・・・
もうちょっと探してみます

316:デフォルトの名無しさん
10/10/20 09:33:10
>>313
アドレスに正負は関係ないだろ。
スタックやヒープを壊しているとかの落ちな予感。

317:デフォルトの名無しさん
10/10/20 09:46:39
C++で、全メンバが「=」で代入できる構造体は
その構造体自体も「=」で一発で代入できるのに、
比較って「==」で全メンバを比較してくれないんでしたっけ?

もちろん、自分で構造体にoperator==()を作ればできるでしょうけど。


318:デフォルトの名無しさん
10/10/20 11:21:39
してくれない

319:デフォルトの名無しさん
10/10/20 11:31:14
>>318
そうでしたか。面倒だな。
勝手に代入してくれるなら勝手に比較もしてほしかった。

320:デフォルトの名無しさん
10/10/20 12:43:20
>>319
eqとequalのどっちを期待してるか分かんないだろ。

321:デフォルトの名無しさん
10/10/20 15:40:20
普通の関数は
クラスの中でstatic関数にしておくのと
そのままの関数とするのと
どちらが良いですか?


322:デフォルトの名無しさん
10/10/20 17:06:09
時と場合によるのでその都度考えてください

323:デフォルトの名無しさん
10/10/20 18:07:04
>>321
馬鹿な事を聞くな。
クラスの中でsutatic関数にしたら、普通の関数じゃ無くなるだろ。
そのまま意外はあり得ない。

324:デフォルトの名無しさん
10/10/20 18:08:07
酢たちc

325:デフォルトの名無しさん
10/10/20 18:11:06
>>323
んなことない

が、そのクラスとまったく無関係の機能をクラスに押し込めるのもどうかと思うが

326:デフォルトの名無しさん
10/10/20 18:16:00
sutatic関数わらう。普段からローマ字生活なんだろうな。

327:デフォルトの名無しさん
10/10/20 18:31:09
>>321は「出刃包丁とアーミーナイフどっちがいいですか?」みたいな質問だろ。
そんなの用途によるに決まってる。

328:デフォルトの名無しさん
10/10/20 20:13:51
>>313
たった400MB位屁でもない筈だが。
まさかとは思うが、メモリが足りなくてswapしているなんてオチじゃないよな。


329:デフォルトの名無しさん
10/10/20 21:02:25
普通にスワップだと思うが。
メモリは前から順番に使うわけじゃない。分散して使っている。
10MB細切れの合計400MBだったらスワップせんかもしれんけどね。
連続した400MB?スワップして当然だろ。

330:デフォルトの名無しさん
10/10/20 21:11:33
それなんてへぼOS…

331:デフォルトの名無しさん
10/10/20 21:40:15
400MB・・?

> short int *array = new short int[200000];

俺には 400KB に見えるが・・・ まぁ最近視力落ちてるからな・・・

332:デフォルトの名無しさん
10/10/21 11:24:46
400KBだろ。だから>328で「たった」なんだろう。

333:デフォルトの名無しさん
10/10/21 16:52:18
01|struct A {
02|  struct P {
03|    template<typename _T>void foo(){}
04|  };
05|};
06|template<typename _A>struct B : _A {
07|  typedef typename _A::P P;
08|  void bar(){
09|    P p;
10|    p.foo<B>();
11|  }
12|};

g++ で 10 行目でエラーが出てしまうのですが
このような関数呼び出しをしたい場合はどのようにすればよいのでしょうか?

関数 foo の引数にダミーのポインタを渡す等をせず、型情報だけを渡したいです
B のテンプレートパラメタ _A には A を継承した様々なクラスが指定される感じです


334:デフォルトの名無しさん
10/10/21 16:58:25
p.foo<B<_A> >();
でどうよ

335:デフォルトの名無しさん
10/10/21 18:54:55
>>333
URLリンク(codepad.org)
こうかな

336:デフォルトの名無しさん
10/10/21 22:53:08
ポインタをどういうタイミングで使えばいいのかが、わかりません
ぶっちゃけ、C++では関数の戻り値がポインタ以外はポインタを使う意義がわかりません
私がポインタを必要とするプログラムを、書いたことが無いだけでしょうか?

337:デフォルトの名無しさん
10/10/21 22:55:22
>>336
データ構造とアルゴリズムを勉強しましょう
ポインタがもしなかったらこの世界が崩壊理由が理解できるでしょう

338:デフォルトの名無しさん
10/10/21 23:13:09
C++を長い間使ってる人が
ポインタなんでC++の入門書の最後で扱うべき、少なくともイテレータや参照よか後にしろ
とかこぼしてたみたことあるから、まぁ色々とあるんだろうなとか

339:デフォルトの名無しさん
10/10/21 23:20:25
STLを覚させて高級言語として使わせる
ポインタとか低レベルのものは後でいいという考え方もまあ理にかなってはいるけどね
業務・実践向けの教え方だとこっちの方がいいと思う

340:デフォルトの名無しさん
10/10/22 00:36:21
そして増える64bitプログラム。嵩張るポインタの運命やイカに!

341:デフォルトの名無しさん
10/10/22 01:27:17
ポインタ、配列関連の質問なのですが、

#include<stdio.h>

void main()
{
int i;
char a[20];
for (i=0;i<=9;i++) {
scanf("%c%*c",&a[i]);
a[i+1]='\0';
printf("%s\n",&a);

}
}

これのchar型配列をNULLで初期化する意味を教えてください。




342:デフォルトの名無しさん
10/10/22 01:38:06
C/C++には文字列型というものがなく
\0で文字列の終わりを表すため。
もし\0が無ければ、配列aを見ていって\0が見つかるまで表示する
なければ多分、バッファオーバーフローして\0が見つかるところまで表示する

343:デフォルトの名無しさん
10/10/22 01:45:56
>>342

ありがとうございます

344:デフォルトの名無しさん
10/10/22 02:17:28
いまいちどこで質問していいかわからなかったのですが、
パソコン上でなっている音の波形データをとってくる方法ってありますか?
itunesとかで再生している音を外部からとってくるイメージなんですけど
オーディオデバイスにアクセスしたりとかできるんですかね?

345:デフォルトの名無しさん
10/10/22 04:46:07
メモ帳のウィンドウプロシージャのアドレスが取得できないんだけど、誰か取得できたら教えて。
GetWindowLong(FindWindow("Notepad", NULL), GWL_WNDPROC)
がNULLになってる。
winmap使っても見えない。

346:デフォルトの名無しさん
10/10/22 10:20:52
はいはいスレ違い

347:デフォルトの名無しさん
10/10/22 10:29:49
フックしる

348:デフォルトの名無しさん
10/10/22 11:03:32
質問よろしいでしょうか?

c++の本でclassの中身の変数を、同じクラス同士で
a = b + cという感じに計算していたのですが、これはどのようにやるのでしょうか?

349:デフォルトの名無しさん
10/10/22 11:09:15
演算子オーバーロードでぐぐれ

350:デフォルトの名無しさん
10/10/22 13:00:13
関数の中でy=1等指定しても
メイン関数のほうではなかったことになりますが、
それを防ぐ方法はありますか?
できればコンソールアプリ内での知識でお願いします。

351:デフォルトの名無しさん
10/10/22 13:01:14
入門編スレへどうぞ

352:デフォルトの名無しさん
10/10/22 13:12:33
>>350
引数を「値渡し」しても関数内で宣言された別の変数に値がコピーされてるだけなので
いくら関数内で変更しても呼び出し元には影響ありません
C言語なら「ポインタ渡し」、C++なら「参照渡し」をしてください
具体的なやり方はggrks

353:デフォルトの名無しさん
10/10/22 14:03:46
誰かboostをCに移植してください><

354:デフォルトの名無しさん
10/10/22 14:09:31
ググれとか言ってる奴はスレタイ読めないの?

355:デフォルトの名無しさん
10/10/22 14:09:38
>>353
漏れなくC++コンパイラがついてきますがそれでよければ承ります。
つーか、なんでCに拘るねん。

>>350
それを防ぐことを考えるよりも、先ずはローカル変数は関数毎に独立していることに慣れること。
受け渡しの方法は、引き数や戻り値、或いは構造体というキーワードで調べれば判る。

>>348
「classの中身の変数」の意味がよく判らんが、class Foo bar, bazとして
bar + bazなどとしているということなら、>349。

356:デフォルトの名無しさん
10/10/22 14:11:40
>>354
質問の体を為してないんだもん。回答しようがないやな。

357:デフォルトの名無しさん
10/10/22 14:12:14
キーワード書いてもらったんだから幾らでも調べられるだろう

358:デフォルトの名無しさん
10/10/22 14:13:41
それはおまえらが初心者だからだろwww
応えられないならそう言えよwww

359:デフォルトの名無しさん
10/10/22 14:15:44
こんなアホな質問するやつにポインタの説明とかしたくないしなぁ

360:デフォルトの名無しさん
10/10/22 14:16:05
>>358
おう、こんだけ応えているってぇのに何が気にいらねぇんだ、表に出やがれ。

361:デフォルトの名無しさん
10/10/22 14:16:38
上級者気取り()

362:デフォルトの名無しさん
10/10/22 14:17:23
幾ら煽っても回答は出ませんよ

363:デフォルトの名無しさん
10/10/22 14:23:43
>>362さん
>>352です
>>354と358は私とは別人です
どうかご教授願いたいです
あとggrskもわかりませんでした
できればコンソールアプリ内での知識でお願いします

364:デフォルトの名無しさん
10/10/22 14:28:24
>コンソールアプリ内での知識

365:デフォルトの名無しさん
10/10/22 14:28:56
ggrks とは↓
URLリンク(d.hatena.ne.jp)

366:デフォルトの名無しさん
10/10/22 14:29:11
>352と>355を読んでも未だ教えろと言うのだったら、正直プログラミングは諦めた方がいい。
自分の番号さえ書き間違える(or勘違いする)くらいだしな。

367:デフォルトの名無しさん
10/10/22 14:53:28
何ビット目が立っているかを調べるうまい方法ありますか?
入力は1つのビットだけ立っているものして、それ以外の場合
出力は不定でかまいません。

入力 -> 出力
0001 -> 0
0010 -> 1
0100 -> 2
1000 -> 3

368:デフォルトの名無しさん
10/10/22 15:00:27
右シフト何回して0になったか調べるじゃだめなの?

369:デフォルトの名無しさん
10/10/22 15:06:03
>>367
int x = 4 ;
for ( int i = 0 ; i < sizeof(int)*8 ; i++ ){
if ( x&(1<<i)){
printf ("%dビット目が立ってる\n", i ) ;
}
}

370:デフォルトの名無しさん
10/10/22 15:07:43
int n = 0;
if (x >> 16) { n += 16; x >>= 16; }
if (x >> 8) { n += 8; x >>= 8; }
if (x >> 4) { n += 4; x >>= 4; }
if (x >> 2) { n += 2; x >>= 2; }
if (x >> 1) { n += 1; x >>= 1; }

371:デフォルトの名無しさん
10/10/22 15:12:03
>>367
URLリンク(aggregate.org)のLeading Zero Countかな。

372:デフォルトの名無しさん
10/10/22 15:17:57
>>351
>>352
なるほど、ポインタを使えば確かにできそうです。
本当にありがとうございました。

373:デフォルトの名無しさん
10/10/22 16:07:54
>>334
>>335

レスありがとうございます
335 で行けました

スコープ演算子の後に template を使えるのは知っていたのですが
アクセス演算子の後にも使えるのですね


374:デフォルトの名無しさん
10/10/22 18:00:27
>>368-371
ありがとうございます。
参考にさせてもらいます。


375:デフォルトの名無しさん
10/10/22 21:05:44
POD pod = POD();

これってpod = {0};と同じように0初期化保証されますか?

376:デフォルトの名無しさん
10/10/23 02:15:17
Cでは#defineを使うようなパターンでC++ではconstを使う気がするのですが
CとC++の仕様の違いでしょうか?

377:デフォルトの名無しさん
10/10/23 03:49:47
#defineは様々な問題があるのでなるべくconstにしたいところだが
Cではconstにしても定数として扱われないので#defineにせざるをえない

378:デフォルトの名無しさん
10/10/23 09:45:35
Windows 7 32bit で Visual Studio 2010 を使っています。
C++のプログラムの中でコードを書いてコンパイルすることが目的です。
Microsoft Visual Studio 10.0\VC\bin にのみパスを通しています。
今回問題としているのはプログラム上での一時的な環境変数の追加です。

ofstream により適当な test.cpp ファイルを作ります。その後、
system("vcvars32");
system("cl /EHsc test.cpp");
として、test.cppをコンパイルしたいのですが
cl.exe - システム エラー
コンピューターに mspdb100.dll がないため、プログラムを開始できません。
となり、コンパイルが実行されません。

cmd.exe上でtest.cppのあるディレクトリまで移動して
>vcvars32
>cl /EHsc test.cpp
とした場合はコンパイルが成功し、test.exeが作成されることを確認済みです。

つまり知りたいことは、cmd.exe上でvcvars32を読んだ場合はパスの設定が有効になるのに、
system関数を使った場合はそうならないのは何故か。
また、もしそうならばc++のプログラム上でどのように一時的にパスを追加するのかです。
よろしくお願いします。

コードのリンクを貼っておきます。
URLリンク(codepad.org)

379:デフォルトの名無しさん
10/10/23 10:10:42
cmd.exe上でvcvars32を実行
cmd.exeを新しく立ち上げてcl /EHsc test.cppを実行
という動作になっているから

一時的にパスを追加するのはC++じゃ無理なのでWinAPIを使う

380:デフォルトの名無しさん
10/10/23 11:40:06
>>379
ありがとうございます。
ExpandEnvironmentStrings と SetEnvironmentVariable を用いて
プログラム上で一時的に環境変数を追加することができました。
Visual Studio のパスが埋め込んであってちょっと汚いですが
上手くいったコードを載せておきます。
URLリンク(codepad.org)

しかし最終的にはこうしました。これは C++ の話ではないので余談ですが。
system("vcvars32 & cl /EHsc test.cpp");

381:デフォルトの名無しさん
10/10/23 11:58:27
>>377
よく分かりました。
どうもありがとう。

382:デフォルトの名無しさん
10/10/23 19:15:04
explicitを使っていますか?
あまり見たことがないんですけど

383:デフォルトの名無しさん
10/10/23 19:54:52
え~使いまくりですよ~

384:デフォルトの名無しさん
10/10/23 20:01:00
ヘッダファイルを見ると大体が、メンバ変数にポインタを使っています
メンバ変数はポインタを使った方が、動作が速いのでしょうか?/

385:デフォルトの名無しさん
10/10/23 20:34:55
age

386:デフォルトの名無しさん
10/10/23 20:49:13
遅くなったり早くなったりします

387:デフォルトの名無しさん
10/10/23 20:51:30
ポインタにするにはその理由があるだけでしょ
速さ目的でやることじゃない

388:384
10/10/23 20:55:13
>>386
>遅くなったり早くなったりします
ポインタはすごく速いイメージがあるのですが、何故遅くなったりするんですか?

389:デフォルトの名無しさん
10/10/23 20:55:47
LinuxのGTKについて聞きたいことあるけど、ここでいいのかな?
この板のスレッド検索したら、MacとWinのGTKは見つかったけど
Linuxがない。Linux板に行って聞くべき?

390:デフォルトの名無しさん
10/10/23 21:04:07
>>389
ここのスレでgtkの話は..

391:デフォルトの名無しさん
10/10/23 21:06:54
>>390
ダメなのか?では、別のとこ探してみます。
ありがとう。

392:デフォルトの名無しさん
10/10/23 21:14:36
>>391
ダメじゃないけど、このスレは「C++相談室」と比べると書き込み少ないよ
大体が文法の事だったりするし

393:デフォルトの名無しさん
10/10/23 21:41:07
そうかぁ。では、聞いてみる。
GTKで、テキストを表示させたい。
フォントを指定して色を変更したりサイズを変更したり。
そして、表示したテキストをコピー&ペーストしたい。
という条件に当てはまるウィジェット知りませんか?
cairoを使うと、色やサイズは変更できるけど、コピペができない。
devhelpを探してみたけど、今日の昼から探しつづけて力尽きた。
知ってる人がいたら、ウィジェットの名前でいいんで教えてください。

394:デフォルトの名無しさん
10/10/23 22:24:37
GtkLabelかGtkTextViewか

395:デフォルトの名無しさん
10/10/24 03:08:20
error: a label can only be part of a statement and a declaration is not a statement

gotoを利用したラベルを使ってみたところ以上のようなコンパイルエラーが。
gotoを使わずにifでやれば動くのですが・・・。
むやみに使ってはいけないとはいえ、何がだめなのかわからないので悲しいです
どなたかどんなエラーなのか教えてください

396:デフォルトの名無しさん
10/10/24 09:08:16
>>395
gotoのためのラベルの直後には必ず文がないといけない。 }とかだとそのエラーが出る。
単純にlabel:;と書けばよかった気がする。

397:デフォルトの名無しさん
10/10/24 09:09:25
あ、そのエラーだと変数宣言の前にラベル置いちゃった系かな。
Cならラベルの位置を変数宣言の後に移動させてください。

398:デフォルトの名無しさん
10/10/24 19:53:03
メンバがポインタばっかりなのはなんで?

399:デフォルトの名無しさん
10/10/24 19:55:29
ポインタ大好きな人が書いたから

400:デフォルトの名無しさん
10/10/24 21:08:36
>>394
ちょっくら調べてみる。ありがと。

401:デフォルトの名無しさん
10/10/24 21:50:35
すみません。
状況に応じてプログラムを2つ(のexe)に分けたり、分けずに1つのままにするプログラムを作ろうとしています。
その中で共通利用するクラス(プログラムを分ける場合それぞれに複製するクラス)に
100近い変数を抱える構造体を送りたいのですが、
プログラムA側とプログラムB側で同じ構造体を送ろうとすると、当然定義の段階で衝突してしまいます。
中身が完全に一致で名前が違う構造体を送る方法 もしくはこういう状況に適した技法が有れば
ご助言頂けませんでしょうか・・? 100個全部引数にするのが妥当なのでしょうか・・?


402:デフォルトの名無しさん
10/10/24 21:53:25
日本語の読解能力が試されるな

403:デフォルトの名無しさん
10/10/24 21:54:48
パス1

404:デフォルトの名無しさん
10/10/24 22:01:19
>>401
中身が完全に一致してて名前が違う事が問題なら
受け取った時にキャストしてやればそれだけで解決しそうだけど。

>100近い変数を抱える構造体を送りたいのですが
…これまずそうじゃね?
参照じゃなくて値で送るの?

405:デフォルトの名無しさん
10/10/24 22:56:18
std::auto_ptrって使っている人いますか?
deleteをしているのは普通に見ますが、スマポを使っているところは見たことがありません

406:401
10/10/24 23:18:53
>>404
今回は全て参照送りという形で処理してしまいました。
キャスト…メモしておき今後修正が必要になった際調べて利用させて頂こうと思います。
ありがとうございました。


407:デフォルトの名無しさん
10/10/24 23:45:09
>>406
参照送りでいいんじゃないの?
そんなでかい構造体、値送りで送ったらパフォーマンスに影響が出そう…

408:デフォルトの名無しさん
10/10/25 06:30:45
なんだその病院送りみたいな

409:デフォルトの名無しさん
10/10/25 10:30:34
>>395 >>396
ありがとうございます。
ラベルを使わない方法で作りましたが、ラベルありでも動くように直してみます

410:デフォルトの名無しさん
10/10/25 16:25:22
strchrで問題が発生

(1)
buf[0]='a';
buf[1]=-126;
buf[2]=10;
buf[3]=0;
(2)
buf[0]='a';
buf[1]='a';
buf[2]=10;
buf[3]=0;

(1)と(2)を同じように
strchr(buf,'\n');
としても同じ結果になりません
(1)はNULLになります
(2)はNULL以外です
なぜちがうんでしょうか?仕様?

411:デフォルトの名無しさん
10/10/25 16:29:21
やってみたが
URLリンク(codepad.org)
どっちも同じに見えるが

412:デフォルトの名無しさん
10/10/25 16:40:09
すみません関数がちょっと違いました
テスト環境はVc6.0です
#include "stdafx.h"
#include <stdio.h>
#include <string.h>
#include <tchar.h>

int main(int argc, char* argv[])
{
char buf[4];

buf[0]='a';
buf[1]=-126;
buf[2]=10;
buf[3]=0;
printf("%p\n", _tcschr(buf, '\n'));

buf[0]='a';
buf[1]='a';
buf[2]=10;
buf[3]=0;
printf("%p\n", _tcschr(buf, '\n'));

return 0;
}

413:デフォルトの名無しさん
10/10/25 16:45:55
_tcschr はマルチバイト文字対応なので buf[1] と buf[2] が合わさって1つの文字とみなされてるんじゃないかと思われ

414:デフォルトの名無しさん
10/10/25 16:46:41
>>408
ワラタw

415:デフォルトの名無しさん
10/10/25 16:52:36
>>412
VS2010だとchar buf[4]; を wchar_t buf[4]; にしたら同じになったよ
charのままだと曖昧エラーが出てコンパイルが通らない

416:412
10/10/25 16:57:16
ありがとうございます
やはりマルチバイト文字なのがだめなのですね
文字入力されたものをファイルに書き込んでそれを読んだときに
どうしても最後に改行コードがくっついて困ってます
上の例みたいに日本語を中途半端に書き込んでると
改行コードを消せなくなります…


417:デフォルトの名無しさん
10/10/25 16:57:59
マルチバイトでコンパイルするとおかしい
wchar_t buf[4];にしてUnicodeでコンパイルすれば正常
つかなんでわざわざ_tcschr?

418:デフォルトの名無しさん
10/10/25 16:58:20
>>416
strrchr()使ったら?

419:412
10/10/25 17:07:52
実際のプログラムは汎用テキスト?使ってるので
_tcschrにしてますがマルチバイトで\nさがしちゃだめってことがわかりました
strrchrつかって\n消すことにしました
ありがとうございました

420:デフォルトの名無しさん
10/10/25 17:35:54
たっかい金出してVS2010が重たい
もまえらどんなPCスペックなのよ

421:デフォルトの名無しさん
10/10/25 17:36:47
趣味だからフリーで十分

422:デフォルトの名無しさん
10/10/25 17:44:18
フリーでもおもてーよ

423:デフォルトの名無しさん
10/10/25 18:24:47
>>420
i7-920と6GBDDR3と牛SSDで今のところストレスフリー

424:デフォルトの名無しさん
10/10/25 18:28:14
MSはソフトを重くして新しいパソコン買わして
新しいパソコンにインストールするwindowsを買わせようとしているのだからね
すなおにGCC+ECLIPSEをつかえばいいのだよ。

425:デフォルトの名無しさん
10/10/25 18:30:33
>>424
gcc も結構重い by PenIII 1GHz x 2

426:デフォルトの名無しさん
10/10/25 18:34:03
gccが思いなんて聞いたこと無いぞwwwwwwwwwww
eclipseが重いなら他にソフトいくらでもあるしwwwwwww

427:デフォルトの名無しさん
10/10/25 19:07:16
>>423
そこまでの環境を用意しないとダメなのか、アホらしいな

428:デフォルトの名無しさん
10/10/25 19:09:56
Eclipseが重いなら.NETも重いだろ
そんな糞な環境やめろよ
言語の学習するだけでストレスになるなんて馬鹿らしいだろ

429:デフォルトの名無しさん
10/10/25 19:20:03
gccとvsを比べるんじゃないよ
比べるならclとだろwww

430:デフォルトの名無しさん
10/10/25 21:22:18
俺も、VSを買おうかと思ったけど、PCかいなおさなきゃいけないから
やめた。

Qtを試してみたら、色々コンポーネントとかあるし(Gridとかもある)MDI対応だから
Qtでしばらくいく。開発環境も軽いし。

431:デフォルトの名無しさん
10/10/25 23:17:56
newをあまり使わなくてもプログラミングをすることができますが、
スタックオーバーフローが発生すると思います

最近のコンピュータ(メモリ4GB)くらいだと、どのくらいスタックが確保されるのですか?
また、newを使った時のメリットを教えてください

432:デフォルトの名無しさん
10/10/25 23:26:32
スタックサイズは意外と小さいよ
Windowsは1MB、Linuxは8MBじゃないかな

433:デフォルトの名無しさん
10/10/25 23:33:03
>>431
普通1MB程度
VS2010ならプロパティシートのリンカ→システム→スタックサイズの設定

new/deleteはオブジェクト指向のキモだろ
ポインタで仮想関数をポリモーフィズムする
参照でも出来るがやりにくい
スタックサイズとは関係無いヒープ領域から取られる

434:デフォルトの名無しさん
10/10/26 07:55:26
class A{
 B b;
}
class B{
 A a;
}
みたいな感じで互いのclassの変数をクラスに持たせたいんだけど、どうすればできますか?
これだとclassAでBが宣言されていないってエラーがでる

435:デフォルトの名無しさん
10/10/26 07:58:29
ごめんなさい色々試してたら解決した
class B;
class A{
 B b;
};
class B{
 A a;
};
とすれば使えるのね

436:デフォルトの名無しさん
10/10/26 07:59:46
>>434
つかえねーよ馬鹿
ちょっと考えて見ればわかるだろうがそれ無限に続いちゃうから無理
class B;
class A{
 B *b;
};
class B{
 A a;
};



437:デフォルトの名無しさん
10/10/26 09:07:43
ああそっか。通ったのは実際に組んでたのは変数ポインタにしてたからか

438:デフォルトの名無しさん
10/10/26 09:39:40
>>435

それ別にC++のクラスでなくても構造体でも無理だよ

439:デフォルトの名無しさん
10/10/26 09:47:31
遅い
遅すぎるよ

440:デフォルトの名無しさん
10/10/26 10:35:35
>>439
遅いんじゃなくて今見た所なの
わかる?アホ

441:デフォルトの名無しさん
10/10/26 10:37:48
だから遅いんだよアホ


442:デフォルトの名無しさん
10/10/26 10:39:58
アホが一人

443:デフォルトの名無しさん
10/10/26 10:40:44
二人

444:デフォルトの名無しさん
10/10/26 10:49:50
三人

445:デフォルトの名無しさん
10/10/26 11:07:48
>>441
お前がアホ

446:デフォルトの名無しさん
10/10/26 11:12:31
俺がアホだ!

447:デフォルトの名無しさん
10/10/26 11:14:07
俺も俺もー

448:デフォルトの名無しさん
10/10/26 11:31:36
>>445
アホ

449:デフォルトの名無しさん
10/10/26 11:36:44
アホばっか

450:デフォルトの名無しさん
10/10/26 12:07:04
>>448
とアホが申しております

451:デフォルトの名無しさん
10/10/26 12:08:33
>>448
^^;

452:デフォルトの名無しさん
10/10/26 13:07:26
A.V.アホ


453:デフォルトの名無しさん
10/10/26 13:40:22
失せろカスども

454:デフォルトの名無しさん
10/10/26 13:42:56
カスが一人


455:デフォルトの名無しさん
10/10/26 13:54:47
↑カス

456:デフォルトの名無しさん
10/10/26 16:41:26
stlのvectorでイテレータの直前(手前)に挿入ってどうやるのでしょうか?


457:デフォルトの名無しさん
10/10/26 16:52:18
v.(it, foo);

458:デフォルトの名無しさん
10/10/26 17:02:28
iterator insert( iterator itr, const T &value )
iterator insert( iterator itr, size_t num, const T &value )

459:デフォルトの名無しさん
10/10/26 17:10:59
>457-458
ありがとうございます。


460:デフォルトの名無しさん
10/10/26 17:14:13
すみませんがついでにもう一個しつもんです
find_ifの逆で最後に見つかった要素を返す関数はありますか?

461:デフォルトの名無しさん
10/10/26 17:16:47
>>460
rbegin()とrend()を使ってfind_if()を適用する

462:デフォルトの名無しさん
10/10/26 17:26:35
あーなるほど、

463:デフォルトの名無しさん
10/10/26 17:37:27
但し逆反復子を使った場合はこういう感じで素直な結果じゃないので注意

class Value : public std::unary_function<int, bool> {
int val;
public:
Value(int i) : val(i) {}
bool operator()(int i) const {
return i == val;
}
};

int main()
{
int a[] = {10, 24, 21, 42, 63, 31, 73, 25, 12};
std::vector<int> vi;

for (int i = 0; i < static_cast<int>(sizeof(a) / sizeof(a[0])); i++)
vi.push_back(a[i]);

std::vector<int>::const_reverse_iterator vicr = std::find_if(vi.rbegin(), vi.rend(), Value(12));

std::cout << *vicr << std::endl;

std::vector<int>::const_iterator vic = vicr.base();

std::cout << *vic << std::endl;
std::cout << *(vic - 1) << std::endl;
}

464:デフォルトの名無しさん
10/10/26 18:40:12
>>461,463
ありがとうございました。イテレータの理解が深まりました


465:デフォルトの名無しさん
10/10/26 19:01:16
逆順イテレーターを戻すといっこズレるのって気持ち悪くね?
なんでこんな仕様なの?禿げはアホなの?

466:デフォルトの名無しさん
10/10/26 19:01:45
慣れろ

467:デフォルトの名無しさん
10/10/26 19:57:26
URLリンク(codepad.org)
ずれてたほうが自然に書けるだろ?

468:デフォルトの名無しさん
10/10/26 20:04:32
baseは戻すではないよね、、、?

469:431
10/10/26 20:36:37
>>432-433
thx

470:デフォルトの名無しさん
10/10/26 21:29:33
実際>>463のプログラムでは *vic と逆参照している所はvectorの存在しない
場所の内容を呼び出すのでエラーなんだけどな

ポインタもイテレータも最後の要素の一つ先まで指せるが、逆反復子を使った場合
一番最後を指すのはありなん?配列は明らかにエラーだけど

471:デフォルトの名無しさん
10/10/26 21:32:24
ああそうかわかった
そういうエラーを防ぐために逆反復子はわざと一個ずらした所をポイントするようにしてあるんだ
base()メンバ関数で元のイテレータに戻した時にこのエラーが出やすいのでわざとbase()なんて
メンバ関数を呼び出さないと変換出来ないようなややこしい仕組みになってるんだな

472:デフォルトの名無しさん
10/10/26 21:38:32
>>468
普通のイテレータを逆順イテレータに変換する時はカッコで囲むだけでOK

vector<int>::iterator pos;
vector<int>::reverse_iterator rpos(pos);

しかし逆順イテレータを普通のイテレータに変換する時にはメンバ関数base()を
呼び出さなくてはならない

pos = rpos.base();

この時に>>470のようなエラーが起きやすいので注意をプログラマに促すために
わざとこのようなくどい方法を採っているのではないかと思う

473:デフォルトの名無しさん
10/10/26 21:45:10
質問です。ポインタのリストをメンバに含むクラスをSTLのvectorなどに
載せる場合、コピーコンストラクタでリストごとコピーするように
しなければうごかないでしょうか。かなりめげてますorz

474:デフォルトの名無しさん
10/10/26 21:53:05
unique_ptrとかに突っ込んどけばいいんじゃね

475:デフォルトの名無しさん
10/10/27 08:22:34
そのリストの実装にコピーコンストラクタがあるなら
そのクラスのデフォルトコンストラクタがあるから
動きはするだろうよ
それでいいのかは知らんが
むしろきっとデストラクタの関係で駄目なんだろうけど

476:デフォルトの名無しさん
10/10/28 15:21:32
//a.h
========
class A {
public:
A(void){};
~A(void){};
void foo(void);
void hoge(void);
};

//a_1.cpp
========
#include "a.h"
A::A(void) {}
A::~A(void) {}
void A::foo(void) { /* 普通のソース */ }

//a_2.cpp
========
#include "a.h"
void A::hoge(void) { /* 長いソース */ }

IDEはVisualStudio2008です。
このように分割コンパイルしたいのですが、a_2.cppでLNK2019が出てビルドできません。
externの使えないメンバ関数の定義を、(派生クラスにするのは無しで)
別のファイルに分けられる手法があれば、ご教授願えましたら幸いです。

477:デフォルトの名無しさん
10/10/28 15:45:42
A(void){};
~A(void){};

{}はずせ

478:デフォルトの名無しさん
10/10/28 15:52:36
すいません。そこは書き間違えました。

479:デフォルトの名無しさん
10/10/28 16:04:14
てか、普通に何の問題もないでしょ
リンクエラーはソースを分割したことじゃないと思われ

480:デフォルトの名無しさん
10/10/28 16:11:06
返答ありがとうございます。その方向で調べてみます。

481:デフォルトの名無しさん
10/10/28 16:31:22
テンプレートクラスでも使ってるんじゃないの?
まあ次からはハイエナ低スキルに噛みつかれないよう気をつけなよ

482:デフォルトの名無しさん
10/10/28 22:58:47
c++って本当に何でもできるよね~
勉強しても勉強しても、知らない文法があるし

483:デフォルトの名無しさん
10/10/29 00:25:52
>>473 です。>>474、475
どうもありがとうございます。unique_ptrですか。C++0x?勉強して
みます。結局、コピーコンストラクタを使わないようなテンプレート
クラスを作ったのですが、いつのまにか既存のクラスのコピー
コンストラクタを実装してました( ゚д゚)ポカーン 
いまおこったことをありのまま話すぜ(ポルナレフAA略

484:デフォルトの名無しさん
10/10/29 19:03:24
c++では定数定義に#defineよりもconstを使うほうが型も決まっていいんですよね.
"const.h"みたいに一つのヘッダに定数をまとめて定義し,それを複数のファイルでインクルードしている場合は
"const.cpp"に定義を書いて,"const.h"ではexternで宣言するのがウェブでよく紹介されている方法でした.
しかし,この方法だと,リンク時にしか定数の値が各ファイルからは分からないので,
配列を定義するときの添字にはコンパイルエラーで使えません.
ヘッダでconst定数定義をし,それを配列定義の添字に使う方法はないのでしょうか.

485:デフォルトの名無しさん
10/10/29 19:25:52
struct ArraySize
{
static int const value = 10000000000000000000000000;
};


int main(void)
{
int array[ArraySize::value]; // Oh. It's cool!!

return 0;
}

486:デフォルトの名無しさん
10/10/29 20:44:31
ヘッダにconst int x = 10;
みたいに書いちゃえばいいだけの話じゃないのか
というかそんなアホな方法がよく紹介されてるってマジかよ

487:デフォルトの名無しさん
10/10/29 20:55:13
>>485の方法いいね
俺はメモリ取られるのが気に入らないからenumにするけど


488:デフォルトの名無しさん
10/10/29 21:07:16
ごめんgcc4.4.5で確認したら取られてなかった。不思議な文法だな。

489:484
10/10/29 21:48:27
>>486
複数のファイルからインクルードされるヘッダなので、そのままだと多重定義になってしまいます。
複数の方が提案されてた方法ですし、アホではなく現実的だと思うのですが、
配列定義の添字には使えなくて困っていました。

>>485
ありがとうございます。試してみます。

490:デフォルトの名無しさん
10/10/29 22:36:01
>>488
普通の質問なんですけど、
メモリ確保されていないことっていうのは
どうやって確認すればいいのですか?

491:デフォルトの名無しさん
10/10/29 22:41:49
>>490
&ArraySize::valueがundefined referenceになったのでそう判断した。

492:デフォルトの名無しさん
10/10/29 22:50:20
>>491
まじすか
VC2010で
cout << &ArraySize::value;
で普通にアドレスが出てしまいました
これはコンパイラによるということでしょうか・・・?

493:デフォルトの名無しさん
10/10/29 23:03:37
規格書とか読まないので理由は知らない。codepadでも同様のエラー。
URLリンク(codepad.org)

494:デフォルトの名無しさん
10/10/29 23:12:25
>>493
なるほど・・・
ありがとうございました

495:デフォルトの名無しさん
10/10/30 10:51:40
>>489
多重定義になるわけねーだろ馬鹿

496:デフォルトの名無しさん
10/10/30 11:05:10
>>493
>>485
URLリンク(codepad.org)
根本的なことが間違ってる

497:デフォルトの名無しさん
10/10/30 12:20:08
>>489
>ヘッダでconst定数定義をし,それを配列定義の添字に使う方法はないのでしょうか.
この要求に答えるのが
const int x = 10;
なんだが

static にしないと定数扱いにならないんだよ

498:493
10/10/30 12:27:40
>>496
普通の書き方はそれだよね。それは知ってる。
ヘッダに書く方法を聞かれてて、そこに初期化を入れてた点がそんなことできるんだ、という点。
ヘッダにしか書かないので自動的に唯一のメモリが確保されてると思った。templateみたいに。
でもアドレスもなく右辺値としてだけ使用される点が不思議だな、と思ったというわけ。

どういうことなのか知っているなら、詳しく教えてくれると嬉しい。

499:デフォルトの名無しさん
10/10/30 12:53:21
>>496
定義を別にしなきゃいけないのは非const の時じゃなかったか?


500:デフォルトの名無しさん
10/10/30 13:38:42
static const で整数型メンバの場合宣言と同時に定義できる
C++0xなら整数型の制限は外れる

ネームスペーススコープで const int x = 10; と書いても static つけた時と同じ扱い

501:デフォルトの名無しさん
10/10/30 13:46:38
TMPの基本だよね

502:デフォルトの名無しさん
10/10/30 14:18:36
TMP関係なくね?

503:デフォルトの名無しさん
10/10/31 09:33:41
C++のxxx_cast<>()ですが、横に長くなって困ります。

aaa = retnterpret_cast<image_header_section *>(static_cast<hoge_section>(bbb))
2重に重ねただけで、悪夢です。

aaa = retnterpret_cast<image_header_section *>(
static_cast<hoge_section>(bbb))
↑ ここで改行しても意味無しです。

みなさんどのように改行していますか?

504:デフォルトの名無しさん
10/10/31 09:56:31
そんな複雑なcastを行わなければならない仕様にしない

505:デフォルトの名無しさん
10/10/31 10:57:18
自分でdefineすればええやん

506:デフォルトの名無しさん
10/10/31 12:29:20
defineが長くなるのもいやん。

507:デフォルトの名無しさん
10/10/31 12:51:29
それぐらい我慢しろよ…
複数行のdefineとか、inlineの代わりに使ってる事結構あるぞ

508:デフォルトの名無しさん
10/10/31 13:00:39
行幅が適切な複数行defineは許容範囲。
個人的な特性かもしれないけど、横に長いと視認性が極端に落ちるからいやん。

509:デフォルトの名無しさん
10/10/31 13:04:22
現状では制御文をスマートに置換するには#defineしかないしな、BOOST_FOREACHとか
std::for_eachとラムダ式の組み合わせは正直キモイっす

510:デフォルトの名無しさん
10/10/31 13:05:32
ハッカーになるとプログラム言語が小説のように読めるようになるから
改行する必要なくなる。
短い方が良いと思ってるうちはおこちゃまということだ。

511:デフォルトの名無しさん
10/10/31 13:08:43
ハッカー(笑)

512:デフォルトの名無しさん
10/10/31 13:15:36
マジレスした方がいいのかどうか分からない…

513:デフォルトの名無しさん
10/10/31 13:19:15
俺が変わりにマジレスしよう。
ハッキングするひとをハッカーと思っている人はおこちゃま。

514:デフォルトの名無しさん
10/10/31 13:20:16
hack-hacking
hacker

515:デフォルトの名無しさん
10/10/31 13:20:44
書き捨てコードを書いて遊んでるだけの人も広義のハッカー

516:デフォルトの名無しさん
10/10/31 13:29:22
だらだらハッカー話が続くのも嫌だからやっぱマジレスするわ

>>510
(笑)


517:デフォルトの名無しさん
10/10/31 14:04:22
>>510
小説のように読むためにも、句読点と同じように改行をする必要があると思うのだけれど…

518:デフォルトの名無しさん
10/10/31 14:32:10
お前のよく読む大好きな小説は句読点ごとに改行されている
ライトノベルというジャンルということを紹介してくれて有難うwww

519:デフォルトの名無しさん
10/10/31 14:36:14
おっさん何歳だ

520:デフォルトの名無しさん
10/10/31 14:38:29
いくらラノベだって句点のたびに改行してるわけじゃないぜ

521:デフォルトの名無しさん
10/10/31 14:39:06
詩じゃあるまいし

522:デフォルトの名無しさん
10/10/31 14:53:38
縦に長いコードは拒否反応が出るよ。
横に長いコードもイヤだけどまだ許せる。

523:デフォルトの名無しさん
10/10/31 15:01:33
ヘタレプログラマやな

524:デフォルトの名無しさん
10/10/31 15:02:26
>>522
逆じゃね?普通
エディタ何使ってる?

525:デフォルトの名無しさん
10/10/31 15:02:58
あれだろ、ワードで縦書きにして書いてるんだろう。

526:デフォルトの名無しさん
10/10/31 15:22:54
エディタは何でも使うけど、eclipse/VC/emacs/vim/サクラエディタとかかな

527:デフォルトの名無しさん
10/10/31 15:33:24
IDE使ってて横に長いソース見るのってものすごく嫌じゃない?

528:デフォルトの名無しさん
10/10/31 15:37:40
monoフォントもやめて、改行は段落ごとにして、
横の長さはエディタの自動改行に任せる
この自然言語風の書き方意外と読み易いけど誰も賛同してくれない

529:デフォルトの名無しさん
10/10/31 15:40:59
最近はディスプレイの横の解像度が1920くらいあるから横に長いコード見てもイラっとしなくなった
これ以上解像度上げるとフォントが小さくなりすぎて見難くなるが

530:デフォルトの名無しさん
10/10/31 15:50:13
>>527
さすがに全部はみ出てたらイヤだけどそんなのないし

531:デフォルトの名無しさん
10/10/31 17:43:31
new Hoge(), new Hoge;は何が違うんですか?

532:デフォルトの名無しさん
10/10/31 21:51:53
>>531
カッコ付きは非PODとPODで挙動が異なる

非POD・・・カッコ無しは不定値が入る、カッコありは0で初期化
POD・・・どちらも同じ意味

これもFAQになってきたな

533:デフォルトの名無しさん
10/10/31 22:02:14
>>532
逆じゃないか?

534:デフォルトの名無しさん
10/10/31 22:18:48
>>533
あ、ごめん逆だった

535:デフォルトの名無しさん
10/11/01 12:18:39
>>531-534
検索用に書き直してまとめ。
--
new Hoge(), new Hoge;は何が違うんですか?

カッコ付きは非PODとPODで挙動が異なる

POD・・・カッコ無しは不定値が入る、カッコありは0で初期化
非POD・・・どちらも同じ意味

これもFAQになってきたな
--

536:デフォルトの名無しさん
10/11/01 12:22:32
マージソートがわからん誰か教えて
void merge(int data1[], int n1, int data2[], int n2, int data3[]){
int index1, index2, index3, i;
index1 = index2 = index3 = 0;
printf("merge_sort\n");
while(index1 < n1 || index2 < n2){
if(index1 == n1){
for(i=0; i<n2-index2; i++){
data3[index3+i] = data2[index2+i];}
break;}
if(index2 == n2){
for(i=0; i<n1-index1; i++){
data3[index3+i] = data1[index1+i];}
break; }
// data3[index3] に値を代入したい//
for (i=0; i<(2*N) ;i++)
printf("%d,", data3[i]);
printf("\n");}


537:デフォルトの名無しさん
10/11/01 12:38:46
もしソースだけ目にして分からないって思えるなら
なんか文章とか絵とかで解説されてるサイトを見るといいよ
マージソートは理屈がかなり簡単なソートだからすぐわかるだろう

538:デフォルトの名無しさん
10/11/01 13:27:33
初歩的な質問なんですが
URLリンク(users.rcn.com)
上記のウェブサイトのソースコードでconst参照仮引数に代入しているように
みえるのですが良くわかりません。
ちなみにisA関数の意味もcomplexExemplarの意味もわかりません。
教えてください。

539:デフォルトの名無しさん
10/11/01 13:39:14
マルチすんなカス

770 デフォルトの名無しさん [] 2010/10/31(日) 11:52:29 ID: Be:
初歩的な質問なんですが
URLリンク(users.rcn.com)
上記のウェブサイトのソースコードでconst参照仮引数に代入しているように
みえるのですが良くわかりません。
ちなみにisA関数の意味もcomplexExemplarの意味もわかりません。
教えてください。

540:デフォルトの名無しさん
10/11/01 13:48:18
>>539
別人っす。

541:デフォルトの名無しさん
10/11/01 13:53:17
そんな偶然の一致があってたまるか

542:デフォルトの名無しさん
10/11/01 13:56:36
一致100%で言い逃れしようとするバカ初めて見たわ

543:デフォルトの名無しさん
10/11/01 14:18:03
ん?投稿は別人という意味だが。

544:デフォルトの名無しさん
10/11/01 14:24:25
mypaintっていうオープンソースのお絵かきソフトに
photoshopみたいな拡大縮小機能を付けたいけど
それをするのにはc++でおkですか?
OKならまず何が必要ですか?
参考書とかソフトとか何を買えばいいですか?
プログラムはプラスとかビジュアルの付いていないC言語で
ifやforとかで条件分岐させてぐるぐる回すとかの
プログラムの作り方の基本的な部分しか分かりません。
↓mypaintのコード概要
URLリンク(wiki.mypaint.info)

545:デフォルトの名無しさん
10/11/01 14:27:43
>>537
ありがとうございます、解決しました

546:デフォルトの名無しさん
10/11/01 14:49:14
>>544
>Mostly written in Python with PyGTK
と書いてあるんだから、Pythonだろ。
つーか、その程度の英語も読めないようなら無理だと思うぞ。
それとcanvasのzoom機能はあるらしいが、それでは不充分なのか?

547:デフォルトの名無しさん
10/11/01 14:51:23
マルチってなんで嫌われるんだろう。。。

548:デフォルトの名無しさん
10/11/01 14:57:18
>>547
URLリンク(ja.wikipedia.org)

549:デフォルトの名無しさん
10/11/01 14:59:28
同じ質問をあちこちにポストされると、俺らはその同じ質問を何度も目にすることになる
同じことを何度も何度も訊かれたら鬱陶しい

550:デフォルトの名無しさん
10/11/01 15:07:42
単純明快である

551:デフォルトの名無しさん
10/11/01 15:10:48
参照があちこちに散らばって管理が大変だから

552:デフォルトの名無しさん
10/11/01 15:16:38
マルチは手段であって目的では無いんだよな。
なんでもマルチは悪いと考えるのは思考停止のなにものでもないよ。
投稿されてから一日たっているのや別スレでスルーされていいるのや別人がコピペしているのを考慮すると
これは許されるマルチだと思う。

553:デフォルトの名無しさん
10/11/01 15:18:14
んなことない

554:デフォルトの名無しさん
10/11/01 15:21:41
じゃあスルーされたり質問者が自己解決して答えが分からない場合はどうしたらいいの?

555:デフォルトの名無しさん
10/11/01 15:21:44
>>553
君はプログラミングに向いてないよwww
他逝きなww

556:デフォルトの名無しさん
10/11/01 15:22:52
許される許されないの問題じゃないから

557:デフォルトの名無しさん
10/11/01 15:28:06
とりあえずスルーされてる原因を考えるよ
被害者面するな

558:デフォルトの名無しさん
10/11/01 15:28:23
じゃあニュースは毎日同じことを何度も流すけど許されない犯罪だなwwww

559:デフォルトの名無しさん
10/11/01 15:31:46
面白い話題が出てて他の質問スルーすることはよくある
そういう時はスレが落ち着いてから催促すればいいんじゃない
まあ俺はスレ遡ってまで回答しないけど

560:デフォルトの名無しさん
10/11/01 15:33:57
>>558
人に聞く行為と人に知らせる行為を一緒にするなよ
頭おかしいの?

561:デフォルトの名無しさん
10/11/01 15:35:57
「40歳ニートですけど総理大臣になるにはどうしたらいいですか?」なんて質問にだれも答えたくないだろ?

562:デフォルトの名無しさん
10/11/01 15:40:33
無視される質問のみんながみんなそんな質問ではないだろ?

563:デフォルトの名無しさん
10/11/01 15:41:57
悪意のあるやつが一番悪い
実生活のストレス解消の場として揚げ足取りを楽しんでいるのだろう

564:デフォルトの名無しさん
10/11/01 15:42:25
みんながみんがそうではないってことは
いくらかそういう馬鹿げた質問してる自覚はあるんだ

565:デフォルトの名無しさん
10/11/01 15:44:47
君は自分に反論する奴はみんな質問者だと思ってるんだ

566:デフォルトの名無しさん
10/11/01 15:45:02
悪意なく嘘を教える奴が最も悪い。
そういう奴は正当な批判も揚げ足取りと思い込んで暴れる。

567:デフォルトの名無しさん
10/11/01 15:46:37
>>565
質問者じゃなきゃこんな文句言わねーだろ

568:デフォルトの名無しさん
10/11/01 15:48:35
俺の意見はみんなの意見だもんね

569:デフォルトの名無しさん
10/11/01 15:49:31
俺はその「みんな」に含めないでくれ

570:デフォルトの名無しさん
10/11/01 15:57:48
質問内容がアホだからマルチするなってのはおかしいだろ
それだと高等な質問ならマルチしてもいいってことになるぞ
どうしてマルチが嫌われるか分かってないのにマルチ叩くのもどうかと思うよ

571:デフォルトの名無しさん
10/11/01 15:59:33
まともな質問をしかるべき場所ですれば
マルチするまでもなく普通に回答が返ってくるからじゃね?

572:デフォルトの名無しさん
10/11/01 16:01:32
ウェブサイトが英語というのが気に障ったんだろうなwww
英語よめないからwwww

573:デフォルトの名無しさん
10/11/01 16:11:17
だからスルーされてる原因を突き止めろよ
議論中なうじゃなかったら
スルー = 日本語が支離滅裂、質問内容が明晰でない
数レス上で同じ内容に答えている、態度が生意気、テンプレを使用していない
みたいな質問に答えたくなくなる何かがあるんだろうよ
それを、スルーするのが悪いんだろみたいに逆ギレされても困る
自分は質問者で回答者の顔色を伺ってる意識を持てよ
高飛車なやつに応えたいなんて思うやつは皆無

574:デフォルトの名無しさん
10/11/01 16:15:37
>>559


575:デフォルトの名無しさん
10/11/01 16:15:59
>>573
どこを縦読み?

576:デフォルトの名無しさん
10/11/01 16:18:24
スルーされる原因を突き止められる人ならそのまま質問も自己解決できそうなもんだが

577:デフォルトの名無しさん
10/11/01 16:21:02
>>571
アホな質問をする奴は自分の質問がアホな質問だなんて思ってないだろうから、
答えが返ってこなければ>>538みたいに平気でマルチするだろ
しっかりとマルチ=ダメというアホでも分かる境界線を引かないとダメ

578:デフォルトの名無しさん
10/11/01 16:22:03
>>576
だから何?
馬鹿だから見逃せっての?
原因が突き止められない馬鹿だからマルチさせてくださいってこと?

579:デフォルトの名無しさん
10/11/01 16:28:49
原因を突き止められる人は初めからマルチなんてしないだろ馬鹿ってこと
原因が突き止められない馬鹿に原因を突き止めなさいって長文レスするのが意味ある事だと思ってるの?

580:デフォルトの名無しさん
10/11/01 16:33:14
喪舞ら餅付けって(笑)
喧嘩して無意味にスレを消費するより
1レス消費するだけでわかっていてもわざと教えない質問の
答えを書き込んだ方が得だぞ(核爆)

581:デフォルトの名無しさん
10/11/01 16:34:09
>>579
原因を突き止めなさいっつてんじゃねーよ
原因突き止めるのが普通なんだからマルチすんなっつってんだよ

582:デフォルトの名無しさん
10/11/01 16:35:39
>>580
誰がマルチにこたえるかバーカ^^

583:デフォルトの名無しさん
10/11/01 16:44:24
そもそもマルチポストしないというのが一番の得だぞ
マルチポストしても何もいいことがないとわかっただろう
次からは気をつけろよ

584:デフォルトの名無しさん
10/11/01 16:44:55
>>581
マルチすんなってのは同意だが、>>573はどうみても原因を突き止めろよと言ってます
わざわざ原因として考えられる要因まで列挙してる心優しいレスです

585:デフォルトの名無しさん
10/11/01 16:49:33
俺はバレないようにこそこそマルチポストするやつより
堂々とマルチポストする奴の方が好きだ

586:デフォルトの名無しさん
10/11/01 16:49:57
お前の好みは聞いてない

587:デフォルトの名無しさん
10/11/01 16:56:57
>>538をかばってる人は、まず質問に答えるべきだ!

588:デフォルトの名無しさん
10/11/01 17:06:32
いや、マルチする人はちょっと・・・

589:デフォルトの名無しさん
10/11/01 17:10:59
プライドの高い人が多いようだね。
ネタではなく真面目に素直に難しすぎてわかりませんと言える
ような人こそ素晴らしいと思うんだよ。

590:デフォルトの名無しさん
10/11/01 17:12:15
ほらな
マルチは悪びれる様子もなきゃ自覚もない

591:デフォルトの名無しさん
10/11/01 17:22:18
わからないならレスしないでくださいって偉い人が言ってたから
素直にわかりませんと発言する人はいないと思うよ

592:デフォルトの名無しさん
10/11/01 17:28:10
でも分からないということも答えだろ。
もしかしたらみんなわからなくて
未解決問題の一つかもしれないわけだし。

593:デフォルトの名無しさん
10/11/01 17:41:23
文字通り誰にも分からない問題なら分かりませんって答えられるけど、
自分には分からないって程度だとわざわざ分かりませんとは書かないな
このスレではそんな問題にお目にかかったことはないが、
サードパーティのライブラリ系のスレとかだと稀によくある話だ

594:デフォルトの名無しさん
10/11/01 18:03:31
operator= がconst で実装されてるぐらいしか思いつかないが

595:デフォルトの名無しさん
10/11/01 18:07:35
>>538のサイトで紹介されているイディオムを全て教えてくれ

596:デフォルトの名無しさん
10/11/01 18:35:13
ここ読めば全部分かるよ
URLリンク(users.rcn.com)

597:531
10/11/01 20:51:08
>>532,535
thx

598:484
10/11/01 21:01:05
>>486, >>495, >>497
皆さんの指摘を見て,よくよくソースを見直してみると,ちょっとしたtypoでおかしなエラーが出ていたことが原因でした.
修正すると,そのままconst int x = 10;で望み通りの結果が得られました.スレ汚しになってしまい,すみません.
こんな稚拙な質問にも丁寧に答えて頂いてありがとうございました.

599:デフォルトの名無しさん
10/11/01 22:30:44
マルチはその掲示板の意向にもよるだろう
思考停止ダメゼッタイとか頭が凝り固まってるのを露呈してる
まあ2chでは基本ご法度ではあるだろうが

600:デフォルトの名無しさん
10/11/02 00:13:48
>>546
うぉぉありがとうございます
pythonスレ行きます。
zoom機能じゃなくて画像を変形する感じの機能です。

601:デフォルトの名無しさん
10/11/02 00:45:49
ファイル入出力について質問です。
以下のように、ファイル名を受け取って、fopenを使ってそのファイルを開き、その内容を配列にしまって出力する関数があったとします。

void hoge(char *file_name){
// ファイルオープン
fp = fopen(file_name, "rb");
// ファイルサイズの所得
fseek(fp, 0, SEEK_END);
sz = ftell(fp);
fseek(fp, 0, SEEK_SET);
// メモリを確保してファイル読み込み
myPtx = (char*)malloc(sz);
fread(myPtx, 1, sz, fp)
fclose(fp);
printf("%s\n", myPtx);
    free(myPtx);
}

これに対して別のテキストファイル名を指定して二階呼び出したところ、二回目の出力がおかしくなってしまいます。
具体的には、出力の最後に"数字の羅列(一回目のファイルの内容?)+文字化け文字"がくっついてしまいます。
サイズが大きいファイル→サイズが小さいファイルと呼び出せばこのようなエラーは起きません。
メモリ開放はしっかりやってるつもりなのですが、何がおかしいのでしょうか?

602:デフォルトの名無しさん
10/11/02 01:42:52
>>601
myPtxの指す文字列に\0のヌル文字が格納されてるか確認してみてはどうだろう
char str[1000];とかにコピーすればデバッガで簡単に見れる

603:デフォルトの名無しさん
10/11/02 01:48:31
>>601
テキストファイルの場合
ftellのサイズをfseek以外に使うのは未定義のはず
fgetposでやってみたら?

604:デフォルトの名無しさん
10/11/02 10:23:30
>>601
読み込むのはサイズ指定していてナル終端文字列になっていないのだから、そのまま%sで出力しちゃダメ。
printf("%.*s\n", sz, myPtx)として味噌。

605:デフォルトの名無しさん
10/11/02 23:13:01
5目並べのクリア条件ってどんな感じでやればいいんですか?

606:デフォルトの名無しさん
10/11/02 23:20:26
縦か横か斜めに5つ並んでたらクリアって感じでやればいいのではないんですか?

607:デフォルトの名無しさん
10/11/02 23:21:32
全部確認するか置かれた位置から調べるか迷ってます

608:デフォルトの名無しさん
10/11/02 23:31:11
自分がプログラムを書きやすい方でいいと思います
試しにどっちかの方法で書いてみて、途中であーなんかこっちは難しそうだと思ったらもう片方にしてみるとかでもいいと思います

609:デフォルトの名無しさん
10/11/02 23:34:07
再帰でやればいいんじゃね?

610:デフォルトの名無しさん
10/11/02 23:37:21
五つ並んでるのをしらべるのに再帰いるのかね。

611:デフォルトの名無しさん
10/11/02 23:41:24
てか最後に置いた石によって並ぶかもしれない5目を調べるだけじゃん?
最大で15通り、碁盤上下左右端付近ならそれ以下
たいした手間じゃないでしょ

612:デフォルトの名無しさん
10/11/03 00:11:52
再帰でもループでも簡潔に書ける


613:デフォルトの名無しさん
10/11/03 00:13:38
関数型言語ならむしろ再帰で書くのが自然。

614:デフォルトの名無しさん
10/11/03 00:15:57
五つ並んでるの調べるのにどこから見たらいいかって話に「再帰で」って
答えも意味不明だな。

615:デフォルトの名無しさん
10/11/03 00:20:40
そんなもん置かれた位置からに決まってる



616:デフォルトの名無しさん
10/11/03 07:56:43
>>602, >>603, >>604
ありがとうございます
まずfgetposですが、ftellと同じ結果でした
次に配列を用意してデバッグ中に見てみると、szから少し進んだところにNULL文字がありました
szからNULLまでは文字化けした文字で埋められていました
szにはNULL文字が含まれないようです
なので、mallocのときにsz+1分だけ確保して、最後にNULL文字をいれることで解決しました
どうもありがとうございました

617:デフォルトの名無しさん
10/11/03 22:54:50
c言語だと文字列の配列はchar *array[] = (ry で作れるけど、
c++でstringの配列はどうやって作るんですか?

618:デフォルトの名無しさん
10/11/03 23:01:13
>>617
string array[];

619:デフォルトの名無しさん
10/11/03 23:08:59
>>618
感謝

620:デフォルトの名無しさん
10/11/04 03:39:27
URLリンク(tv.dee.cc)
このコードの解説をしていただけませんか?

621:デフォルトの名無しさん
10/11/04 04:02:02
>>620
半径rの円を描く時のコード
角度0.02πラジアンごと点の座標を1回転分出力してる
っていうかこれコード間違っててコンパイルできねぇ

622:デフォルトの名無しさん
10/11/04 04:08:46
>>620
・もし様々なことに目をつぶってどういうプログラムかを知りたいなら
→半径1の円周上のxy座標を角度0.02πradごとにx軸から画面表示する

・もし様々な突っ込みどころについてなら
→二行目の時点でコードを投げ捨てる

623:デフォルトの名無しさん
10/11/04 05:53:01
>>620
2行目ワロタ

624:デフォルトの名無しさん
10/11/04 06:02:48
すたじお☆えっち

つまりエロゲの開発コードだよ

625:デフォルトの名無しさん
10/11/04 06:09:06
{}もねえな

626:デフォルトの名無しさん
10/11/04 06:12:58
>>624
(´・ω`・)

627:デフォルトの名無しさん
10/11/04 07:31:31
カウンタをfloatで実装するのは感心しない

というかコレスタッフが書いたのか?

628:デフォルトの名無しさん
10/11/04 09:44:42
ring1.cという意味のないコメントも考慮して
全く分からない奴が、どっかから手動でコピペしたと考えるのが妥当だろうな
紙媒体から手打ちで写したんじゃないかしら


629:デフォルトの名無しさん
10/11/04 10:16:04
>>616
そして敢え無く無視される>604。出力が目的なら、無駄に1バイト確保する必要なんてないのに。

630:デフォルトの名無しさん
10/11/04 10:29:26
本人乙

631:デフォルトの名無しさん
10/11/04 10:35:52
で?

632:デフォルトの名無しさん
10/11/04 11:21:05
>>620
URLリンク(www.esa.c.u-tokyo.ac.jp)

633:デフォルトの名無しさん
10/11/04 14:11:19
>>620
コンパイルエラーわろたwww

634:デフォルトの名無しさん
10/11/04 14:50:39
studio.hってテレビ局のスタッフがつい打っちまったんだろうな。

635:デフォルトの名無しさん
10/11/04 15:02:20
マジレスすると、
コンパイル出来るかどうかなんて
どんなコンパイラーを使うかどうかが決まってないと意味無いと思う。
もっとマジレスするとテレビの背景として使うソースコードが
コンパイル出来るかどうかなんてどうでも良い。

636:デフォルトの名無しさん
10/11/04 15:45:37
マジレスすると、
#include <studio.h>
そのコードで正常にコンパイルできるコンパイラは使いたくない

637:デフォルトの名無しさん
10/11/04 15:58:12
copy stdio.h studio.h

638:デフォルトの名無しさん
10/11/04 16:06:19
飾り鋲入出力

639:デフォルトの名無しさん
10/11/04 17:07:33
実は遠まわしにインド人IT技術者を揶揄する意図で書かれたテロップだとしたら…

640:デフォルトの名無しさん
10/11/04 17:23:20
だが待ってほしい、そもそもC/C++だというのが思い込みなのではないか

641:デフォルトの名無しさん
10/11/04 18:59:44
最初のコメントに.cって書いてありますけど…

642:デフォルトの名無しさん
10/11/04 19:18:51
拡張子.cのインド発新言語かもしれん

643:デフォルトの名無しさん
10/11/04 19:21:06
カレー言語か

644:デフォルトの名無しさん
10/11/04 20:31:35
>>620
番組スタッフが適当に作ったんだろうな。

645:デフォルトの名無しさん
10/11/04 20:44:33
俺らだってゲームのマップ作るとき地質学とか建築学とか考えないで適当に作るだろ (考えて作ってる人いたらごめんなさい)
気にしたら負けだと思う

646:デフォルトの名無しさん
10/11/04 20:48:09
ネットとかから適当にコピったりしたらまずいと思って、
わざわざ手打ちしたんだろうな。
ほほえましいタイポから考えると。

647:デフォルトの名無しさん
10/11/05 03:16:48
てかマでも素でstdio.hをスタジオヘッダーって読んでる奴いるしな

648:デフォルトの名無しさん
10/11/05 04:56:50
ス'タ'ジオの母音はどこいったのか感

649:デフォルトの名無しさん
10/11/05 06:08:26
SCSI「呼んだ?」

650:デフォルトの名無しさん
10/11/05 09:39:11
す・・・スクシー

651:デフォルトの名無しさん
10/11/05 13:56:06
Cのヘッダー名もCP/M時代からの8文字の縛り(?)かもしれないし、
関数名に至っては開発当時の環境の貧弱さから6文字までしか
識別子は認識せず後は無視するようになっていた

そのためCの関数やヘッダーはあのような妙な短縮形が多いんだろう
特にstring.hの関数名の分かりにくさは最悪

652:デフォルトの名無しさん
10/11/05 18:15:18
宿題についての相談です。
正の整数をキーボードから入力し、1からその整数までの和を計算し、出力するプログラムをfor文を用いて書け

というものなのですが、どのように書けばいいでしょうか。

653:デフォルトの名無しさん
10/11/05 18:18:23
宿題スレいけばすでに答えが出てる

654:デフォルトの名無しさん
10/11/05 18:51:23
int *p;
int* p;
書き方が違うだけで同じ意味でしょうか?

655:デフォルトの名無しさん
10/11/05 18:53:27
同じ意味です

656:デフォルトの名無しさん
10/11/05 18:54:49
int*p;
int * p;
などのように書いてもいいぞ

657:デフォルトの名無しさん
10/11/05 18:57:40
identify<int *>::type p;
こう書くのが最も優秀です

658:654
10/11/05 19:01:53
>>655-657
回答ありがとうございます
勉強になりました

659:デフォルトの名無しさん
10/11/05 19:11:00
>>654
int *p; これは*pについて。*pはintを入れるんですよってこと
int* p; これはpについて。pはint*を入れるんですよってこと

int*p;
int * p;
これらは最初の2つのどちらとも取れる手抜き書き方
つまり、読み手に任せるよってこと。

660:デフォルトの名無しさん
10/11/05 19:21:17
配列の中の値を入れ替えるにはどうすればいいのでしょうか?
例えば、配列の中の最小値を求めて、その最小値を配列の中の値の一つに上書きする
といった感じです。
お願いします。

661:デフォルトの名無しさん
10/11/05 19:35:21
配列の中の最小値を求めるには、まず配列の最初の値を調べて変数に覚えます
それから配列の残りの値を順に見ていって、覚えた変数の値と今見てる配列の値の小さい方を変数に覚えます
それを配列の最後まで繰り返したら、覚えてる変数の値が配列の中の最小値ですので、
その最小値を配列の中に好きなように上書きすればいいです

662:デフォルトの名無しさん
10/11/05 19:42:40
たとえば最小値を先頭と入れ替えるならこうだ
URLリンク(codepad.org)

663:デフォルトの名無しさん
10/11/05 19:42:43
それをC++で記述お願いします。

664:デフォルトの名無しさん
10/11/05 19:48:54
ありがとうございます。そしてごめんなさい。
質問間違えましたorz

最小値を上書きするのではなく、その最小値に+1した値を、でした。
申し訳ないです。。。

665:デフォルトの名無しさん
10/11/05 19:53:06
いつのまにか書き込みが!
規制で携帯から失礼してますorz


>>662
こんなページあるんですね。分かりやすいです。
ありがとうございます。

666:デフォルトの名無しさん
10/11/05 20:19:10
>>659
嘘教えるな。その説明はint* p,q;で破綻する。

667:デフォルトの名無しさん
10/11/05 21:39:21
すみません。
3KBのBYTE配列に (※4バイトずつ利用)
変数(int型とfloat型)5~20個(毎回一定ではない個数)を1セット。
それを3~30セット入れています。

毎回一定ではない個数なので、
あらゆる間仕切りに「特定の整数」を使いたいのですが、
floatがその「特定の整数」と同じビットの並びを起こさないかが不安でなりません。

また、同じ並びを検出する事はできるのですが、
下手にfloatの値を動かすと誤差では済まない事になったり、
別の「特定の整数」と化す恐れがないかという不安が・・

どなたか、何か良い回避方法があれば教えて頂けますと幸いです・・orz


668:デフォルトの名無しさん
10/11/05 21:42:54
先頭に個数でも入れとけばいいんじゃないの

669:デフォルトの名無しさん
10/11/05 21:45:19
データ種別をあらわす1バイトを先行させる。

670:デフォルトの名無しさん
10/11/05 22:42:04
配列に入れる際にfloatが特定の整数と同じになったかどうかチェックして同じになってたら 1ulp ほどずらす ・・・あんまりいい方法じゃないと思うけど

671:デフォルトの名無しさん
10/11/05 22:43:52
先頭にインデックステーブルを持つ

672:デフォルトの名無しさん
10/11/05 22:57:51
>>667
intとfloatがグチャグチャに混在すんの?

673:デフォルトの名無しさん
10/11/05 23:45:44
派生クラスの方でコンストラクタによる初期化を行うつもりのプログラムなのですが以下のようなエラーが出ます。
理由を考えてみたのですが良く分からなかったので初歩的な質問ですがお願いします。

エラー E2312 oko.cpp 20: 'Basic::height' は曖昧でない基本クラス 'Human' ではない(関数 Human::Human() )
エラー E2312 oko.cpp 20: 'Basic::weight' は曖昧でない基本クラス 'Human' ではない(関数 Human::Human() )

URLリンク(codepad.org)

674:デフォルトの名無しさん
10/11/05 23:55:39
URLリンク(codepad.org)
派生クラスのコンストラクタで基底クラスのメンバ変数は弄れません
基底の方のコンストラクタで設定するがよろし

675:デフォルトの名無しさん
10/11/06 00:01:15
for文でループを

const int N=hoge;
for(int k=0;k<N;++k) {
cout << "a" << endl;
(中略)
cout << "b" << endl;
}

のように書いたときに,
「b」と出力したきりプログラムがフリーズするということが起きています.
中略部分は事情があって具体的にはここには書けませんが,少なくともカウンタkに手をつけるような処理はしていません.
おおまかには中略部分で反復計算をやって,条件をみたしたらbreak,Nを最大反復回数とする処理です.
色々と経過を吐かせると,もちろん脱出条件は満たしてはおらず,次反復への処理を終えて,
次のループに進もうとするまさにそのときにフリーズしてしまっています.
この場合,どのようにしてデバッグするのが良いでしょうか.

676:デフォルトの名無しさん
10/11/06 00:02:00
>>674
基底クラスの方のコンストラクタで何もしないように定義して後から実行される派生クラスのコンストラクタで
メンバ変数を初期化しようとしていましたが良く分かりました。
ありがとうございました。

677:675
10/11/06 00:04:33
書き忘れました.
コンパイラはGCC,Intelコンパイラ両方を試し,両方共全く同じ段階でストップします.
OSはLinux,最適化は-O0,-O1, -O2, -Osで再現します.

678:デフォルトの名無しさん
10/11/06 00:05:09
>>675
bの後でフリーズするなら
そのあと1行ずつ実行すりゃわかるだろ

679:デフォルトの名無しさん
10/11/06 00:07:07
(中略)にバグがあるとしか。バグ可能性はメモリー破壊

680:デフォルトの名無しさん
10/11/06 00:08:27
gdb?

681:デフォルトの名無しさん
10/11/06 00:46:37
>>676
何度も質問すみません。
もし派生クラスから基底クラスのメンバ変数を変更したいならば
派生クラスで初期化の関数を作る方法ぐらいなんでしょうか?

682:デフォルトの名無しさん
10/11/06 00:56:37
代入すれば?

683:デフォルトの名無しさん
10/11/06 00:58:49
>>682
そうですねw
出来たらコンストラクタみたいに実装したかったので

684:デフォルトの名無しさん
10/11/06 01:00:34
URLリンク(codepad.org)
コンストラクタで代入してもいいのよ

685:デフォルトの名無しさん
10/11/06 01:06:35
>>684
初期化ばっかり考えてたので全く頭に浮かびませんでしたw
代入の場合は派生クラスのコンストラクタでも基底クラスの値は変更できるんですね。
回答ありがとうございました。

686:デフォルトの名無しさん
10/11/06 02:31:23
>>673
URLリンク(codepad.org)

基底クラスのメンバ変数をコンストラクタ形式で初期化する事はできない
引数付きのコンストラクタで初期化する事

687:デフォルトの名無しさん
10/11/06 03:46:47
シリアルポートで通信するクラスで
すでにopenしてるポートを再度openしようとしたら例外もしくはassertしたいのですが
対象のポートが使用済みかどうかを判別する方法はないでしょうか?

688:デフォルトの名無しさん
10/11/06 16:09:54
ダイナミックライブラリを作るときは
関数の前に
__declspec(dllexport)、__declspec(dllimport)
を付けて

スタティックライブラリのときは、消す必要がある?(消さないとそのライブラリを使った時リンクエラーがでた)

つまり#defineでダイナミックライブラリとスタティックライブラリを分ける必要がるの?

689:デフォルトの名無しさん
10/11/06 16:10:01
double c[0][1]=1;
double x = 1;
if( tan(sita) * x == c[0][1] ){
printf("hoge");
}

tan(sita) は1になるようにしてあります。
実行してみると「hoge」と出力されません。
判定式には三角関数を使ってはいけないなどあるのでしょうか?

690:デフォルトの名無しさん
10/11/06 16:19:26
>>689
そんなことはありませんが、 double 型の値には計算誤差が含まれるものですので
== で比較した場合は、ぴったり完全に誤差なく 1 が得られたときしか出力されません
double は 17 桁くらいの精度がありますから、
printf("%.17f\n", tan(sita) * x);
などとしていちど値を確認してみてください

あとどうでもいい話ですが、θは sita じゃなくて theta です

691:デフォルトの名無しさん
10/11/06 16:30:39
>double c[0][1]=1;
double c[1][2];
c[0][1] = 1;
こうじゃなくて大丈夫なのか?

692:デフォルトの名無しさん
10/11/06 16:55:29
>>688
はい

693:デフォルトの名無しさん
10/11/06 16:58:59
>>688
生成物が変わるんだから宣言変えなきゃダメだろう。

694:デフォルトの名無しさん
10/11/06 17:07:19
>>689
不動小数点の=比較は誤差を考えて、
if( abs(A-B) < 10^-6) とかやった記憶がある。

695:デフォルトの名無しさん
10/11/06 18:36:21
>>694
ありがとうございます。
その方法で解決できました。

696:デフォルトの名無しさん
10/11/07 11:19:50
lseekの頭の"l"って何の略ですか?

697:デフォルトの名無しさん
10/11/07 11:36:19
long

698:デフォルトの名無しさん
10/11/07 12:12:59
>>697
ありがとうございます。

699:デフォルトの名無しさん
10/11/07 23:51:15
マウスイベントメッセージを使用せずにマウスクリックの情報を取得する方法はありますか?
WM_LBUTTONDOWNではなく、GetKeyStateのようなこちらから確認する方法です
お願いします。

700:デフォルトの名無しさん
10/11/07 23:55:40
自分で書いてるじゃん

GetKeyState(VK_LBUTTON)

701:デフォルトの名無しさん
10/11/08 00:25:28
>>700
ああ!それで大丈夫でしたか!
ありがとうございます。助かりました。

702:デフォルトの名無しさん
10/11/08 00:26:10
>>700
おお!それで大丈夫でしたか!
ありがとうございます。助かりました。

703:デフォルトの名無しさん
10/11/08 00:27:33
これはどう解釈したら良いのだろうか、

704:デフォルトの名無しさん
10/11/08 00:58:27
これはどう解釈したら良いのだろうか、

705:デフォルトの名無しさん
10/11/08 00:58:44
僕にはわからない

706:デフォルトの名無しさん
10/11/08 01:04:20
僕にはわからない

707:デフォルトの名無しさん
10/11/08 08:28:04
多分キーボードにしか使えないと思ってたんじゃないだろうか

708:デフォルトの名無しさん
10/11/08 11:03:58
多分キーボードにしか使えないと思ってたんじゃないだろうか

709:デフォルトの名無しさん
10/11/08 12:55:57
タグみたいなのあるじゃないですか。
それでタグみたいなやつを作るには
class A{};
static const int A=1;
typedef int A;
上記のうちのどれが最適ですか?
ちなみにtypedefはint Aとint Bはべつものになりますか?

710:デフォルトの名無しさん
10/11/08 13:03:22
日本語でおk

711:デフォルトの名無しさん
10/11/08 13:28:26
iterator_tag でも参考にしろ。

712:デフォルトの名無しさん
10/11/08 16:25:51
for(i=1;i<10;i++)
{
if(no[i] < i_min)
{
i_min = no[i];
a = i;
}
no[a] = i_min+10;


これを10回繰り返したいのですが、どうすればいいんでしょうか?
具体的には配列の最小値を選び、その最小値に+10をして、もとの値に入れる

といった動作です
お願いいたします。

713:デフォルトの名無しさん
10/11/08 16:45:50
forで括れよ

714:デフォルトの名無しさん
10/11/08 16:50:35
>>712
int j;

for ( j=0 ; j<10 ; j++ ){
i_min = no[0] ;
a = 0 ;
for(i=1;i<10;i++)
{
if(no[i] < i_min)
{
i_min = no[i];
a = i;
}
}
no[a] = i_min+10;
}

715:デフォルトの名無しさん
10/11/10 19:11:42
ビットフラグの定義を

#define A_ENABLE 0x00000001
#define B_ENABLE 0x00000002
#define C_ENABLE 0x00000004
#define D_ENABLE 0x00000008

みたいに書いている同僚がいたので


#define A_ENABLE (1 << 0)
#define B_ENABLE (1 << 1)
#define C_ENABLE (1 << 2)
#define D_ENABLE (1 << 3)

のほうがいいと思ったので指摘したんだけど、こんなものは会社によって
書き方のルールは違うからどっちでもいいみたいなことを言われました。

マイコン用のライブラリとかでは後者の書き方をよくみかけるし、
ビットフラグだということがわかりやすいので、後者で統一しようと
考えているんだけど、おかしいですかね。。。?



716:デフォルトの名無しさん
10/11/10 19:14:15
>>715
どっちでもいいし、デバッガで見たときなどに計算しなくてすむぶん上の方がいいという考え方もありうる。

717:デフォルトの名無しさん
10/11/10 19:28:40
ありがとうございます。

ただ、デバッガでみるときはビットがたっているか、いないかで確認するので
表示は16進表記じゃなく、2進数表記に切り替えると思いますがどうでしょうか?

やっぱりもともとビット単位で表現するものをわざわざ16進表記にするのは
余計な脳内変換が必要なのでそうする理由がよくわからないのですが、ほかに
デバッガでの表示が容易という点以外に何か利点はありますでしょうか?


718:デフォルトの名無しさん
10/11/10 19:58:25
2、8、16進数の相互変換は見た瞬間出来るぐらいでちょうどいいよ

719:デフォルトの名無しさん
10/11/10 21:41:06
A_ENABLEの定義を見ただけでフラグに何ビット使うかわかるとか

720:デフォルトの名無しさん
10/11/10 22:54:07
>>15
1ビットだけ立つならそれでもいいが、複数立てる場合は前者が直感的にいい。
もちろん、頭の中で瞬時にビットのイメージがわくからね

721:デフォルトの名無しさん
10/11/10 23:22:22
>>720
どういうこと?マクロの使用箇所は関係ないと思うが。

722:デフォルトの名無しさん
10/11/10 23:42:21
>>715
そんなビミョーこと指摘しても認めるわけないだろ。

マニュアルに書いてあるようなことでも絶対認めないような
連中とかゴロゴロいるくらいだし。

「SQLでbetween禁止な。インデックスがきかないから」

「(各種証拠をみせて)インデックスききますよ」

「いままでずっとそうだから、とにかくbetwennは禁止だ」

みたいな。

723:デフォルトの名無しさん
10/11/10 23:53:48
>>722
まあ指摘が細かいことはわかっているんだけど、こういう糞コードで
どんどん汚染されていくのを黙ってみてられないんだよね・・・


724:デフォルトの名無しさん
10/11/11 00:23:30
>>723
bit立てるのにbit長キメウチは汎用性ないからな
でも、A_ENABLE ってのはちょっとセンスないな

#define BIT_0 (1 << 0)
#define BIT_1 (1 << 1)
#define BIT_2 (1 << 2)
#define BIT_3 (1 << 3)
....
とか位にしてくれ
BIT_0 || BIT_3 とかするときにどのbitが建っているか解りやすい

725:デフォルトの名無しさん
10/11/11 00:26:57
BIT_0 | BIT_3 だった

726:デフォルトの名無しさん
10/11/11 00:45:26
#define BIT(n) (1 << (n))

727:デフォルトの名無しさん
10/11/11 00:48:04
#define A_ENABLE 0x100000000
#define B_ENABLE (1 << 32)

intが32ビット以下のときAはlong long等になるがBはint 0
シフトするなら環境依存の有効ビット幅を意識せずにはいられない


次ページ
最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch