[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 901- 1001- 2chのread.cgiへ]
Update time : 04/25 21:15 / Filesize : 282 KB / Number-of Response : 1002
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

スレを勃てるまでもないC/C++の質問はここで 2



1 名前:デフォルトの名無しさん mailto:sage [2007/05/07(月) 11:02:46 ]
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。

スレを勃てるまでもないC/C++の質問はここで
pc11.2ch.net/test/read.cgi/tech/1167476845/


305 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 15:29:18 ]
int a;

scanf("%d",&a);
if(a < 0)
a = 2;

もしくは

int a;

scanf("%d",&a);
while(a < 0)
a++;

ってこどだろ?

306 名前:298 mailto:sage [2007/06/15(金) 15:54:33 ]
5が入力されたら5
マイナス5を入力されても5として扱う方法を聞こうと思ったんですが、、
自分にレスしてくれたんじゃないかもしれないけど305をヒントにできました。

307 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:01:25 ]
そういうのを絶対値と呼ぶんだってことは中学生でも知ってそうなもんだがな

308 名前:298 mailto:sage [2007/06/15(金) 16:03:48 ]
小学生ですが何か?
来年から中学ですけど


309 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:05:41 ]
入力した負の数に-1かけりゃいい話だがや


310 名前:298 mailto:sage [2007/06/15(金) 16:10:17 ]
だから、もうわかったって言ってるだろ
しつこい馬鹿

311 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:11:54 ]
しつこい馬鹿

312 名前:デフォルトの名無しさん [2007/06/15(金) 16:24:31 ]
変数を宣言して初期化する場合、普通は

int a,b,c;
a=1;
b=2;
c=3;

ってやるけどさ
↓こうした方がコンパイラも高速なコード生成できるし入力数も少なく見やすくてよくね?

int a=1,
  b=2,
  c=3;



313 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:27:36 ]
>>312
天才



314 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:42:21 ]
>>305
intが32ビットや64ビットで、
負の最大値のような巨大な数字が入力されたら、
大変だぞ。

>>306
とりあえずC標準ランタイムライブラリのabs()を使ってみようよ。

>>308
高校生くらいまでは、
プログラミングよりも学校の勉強とかに時間を使ったほうがいいぞ。

プログラミングなんて大人になってからやっても遅くはないが、
子供のころに勉強することは、大人になってからでは遅いんだよ。

自分も小学生の頃からプログラム書いてたけど、
もっと数学や物理をよく勉強すれば良かったと後悔してるよ。

>>309
今は乗算のコストが加算と同じだけどさ、

普通は減算を使って
if (a < 0) a = 0 - a ;
とやるよね。

>>310
うわぁ。
プログラミングの勉強よりも、対人コミュニケーションの勉強しようよ。


315 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 16:49:25 ]
>>312
コンパイラの最適化を有効にしていれば、
どっちでも同じコードが出力されると思うぞ。

ちなみに、
int a, b, c ;
というように複数をまとめて宣言するのは、
int* p, q, r ;
のようなトラブルを起す可能性があるので、良くない。

面倒でも、
int a = 1 ;
int b = 2 ;
int c = 3 ;
としたほうがいい。

316 名前:デフォルトの名無しさん [2007/06/15(金) 19:17:02 ]
>>126>>266
ありがとうございます。書くの遅くなりましたが解決できました。本の後ろの方に書いてありました。
回答ありがとうございました。

「7」についてなんですが、本には「0」って書いてあるんです。
でも実行ファイルにすると「7」と表示されるんでバグなのかな?って思って聞いてみました。

317 名前:デフォルトの名無しさん mailto:sage [2007/06/15(金) 19:59:47 ]
>>316
ライブラリの実装の違いかもしれない。

いずれにしても、
floatやdoubleは内部では二進数なので、
10進数との相互変換は100%完璧にはできない。

318 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:08:58 ]
>if (a < 0) a = 0 - a ;
if (a < 0) a = -a;

319 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:19:18 ]
マイナスを前に付ければ符号反転なんだけどさ、
算数的には、0から引いたほうが、わかりやすいっしょ。

いまどきのコンパイラは、両者で出力するコードが変りはしないし。

320 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:27:49 ]
>算数的には、0から引いたほうが、わかりやすいっしょ。
  ??????

321 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:28:13 ]
どっちでもいい

322 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 01:29:38 ]
算数的ではなく314的だろ

323 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 06:36:33 ]
314のマスターベーションだろ?



324 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:13:26 ]
じゃ結論はこうってことで、 a * -1

325 名前:285 [2007/06/16(土) 17:18:08 ]
do while 内のifを外したところ解決しました。
お騒がせしましたm(__)m

326 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:20:55 ]
>>325
>>296の言うとおり、デバッガ使った?

327 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:23:13 ]
>>325
一応聞いておくけど、なんでifを外せばいいのかは理解してるんだよね?
というか、ifを外して良いのか?
バグを修正すべきなんじゃないのか?w

>if ((Sr.Attr & Attributes) == Sr.Attr) {
この式、変じゃない?
Attributesと&取ってて、その結果が Sr.Attrであるためには、
Sr.Attr == Attributesでなくてはならないのでは?

328 名前:デフォルトの名無しさん [2007/06/16(土) 17:27:51 ]
while(gets(str);strcmp(str,"quit"); )

って書き方はありですか?


329 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:29:36 ]
間違えました

for(gets(str);strcmp(str,"quit"); )

でした
for文しか使えなかった場合の話で


330 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:29:41 ]
なしです。
こうしてください。

while(fgets(str, sizeof(str),stdin) && strcmp(str,"quit") )

331 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:31:29 ]
for(fgets(str, sizeof(str), stdin); str&&strcmp(str,"quit");fgets(str, sizeof(str), stdin) )


332 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:32:55 ]
ちがった、こうかな。
for(fgets(str, sizeof(str), stdin);EOF!=*str&&strcmp(str,"quit");fgets(str, sizeof(str), stdin) )


333 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 17:34:49 ]
>>330
出来るだろうけど、fgetsは改行コードまで取るから、
"quit"に改行コード入れるか、strncmp使うか、
何かしないと狙い通りに動かんと思うよ



334 名前:296 mailto:sage [2007/06/16(土) 18:45:16 ]
>>325
解決してよかったね。

ちなみに今回の質問の件とは違うが、まだバグが残ってる。
ディレクトリ名の末尾が.mp3の場合もファイルとして扱ってしまう。
int Attributes = faAnyFile ;

int Attributes = faAnyFile ^ faDirectory ;
にして、ディレクトリ名は取得しないようにしたほうがいい。


>>327
条件文自体は間違ってないよ。

(Sr.Attr & Attributes) == Sr.Attr
というのは
(Sr.Attr & ~Attributes) == 0
と同じことだからね。

適当にテストプログラムを書いてステップ実行して、
TSearchRec::Attrに渡される値をみてみなよ。
Borland氏ね!と叫びたくなること請け合いだよ。


335 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 19:00:59 ]
>(Sr.Attr & Attributes) == Sr.Attr
>というのは
>(Sr.Attr & ~Attributes) == 0
>と同じことだからね。

本当に?
(Sr.Attr & Attributes) == Attributes
ではなくて?

336 名前:296 mailto:sage [2007/06/16(土) 19:20:10 ]
>>335
ごめん、間違ってた。その通りです。

だがしかし、
(Sr.Attr & Attributes) == Attributes

(Sr.Attr & Attributes)
に直しても、問題は解決しないのよ。

VCLの定数faAnyFileは0x3Fで、
TSearchRec::Attrに返される値は
圧縮ファイルの場合には0x800がORされているから。

faAnyFileを-1に変更するか、
0x3Fを指定された場合にはVCLのリファレンスヘルプに書いてない隠しビットフラグ0x800を立てるのをやめるか、
どっちかにしてほしいぞ > Borland

FindFirstがフィルタしてるんだから、自前でもう一度フィルタしようとするのが変といえば変なのだが。

337 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 19:38:56 ]
いやあのね、それ、DOSの頃からのファイル属性の仕様だから(無属性が通常ファイルは)。
VCL上だけ変えたら、よけい混乱する人が続出するだけ。

338 名前:296 mailto:sage [2007/06/16(土) 22:06:28 ]
>>337さんの書き込みを見て気がついた。

> ごめん、間違ってた。その通りです。
↑は前言撤回。
やっぱり間違っていなかった。

>>327>>335が間違ってる。


339 名前:デフォルトの名無しさん mailto:sage [2007/06/16(土) 22:23:05 ]
>>337
(Sr.Attr & Attributes) == Sr.Attr
(Sr.Attr & ~Attributes) == 0
これらは、無属性の通常ファイルの場合も、真になるよ。

フィルターとしては、
指定した属性以外がついているファイルを除外する
ということになる。


340 名前:298,306 mailto:sage [2007/06/17(日) 04:47:51 ]
>>314
やっぱりあったんですか・・。絶対値って言葉が出てきませんでした。
教えていただきありがとうございます。
自分は308ほど若くは無いですが、高校生くらいまでは学校の勉強に集中するのは同意します。
ていうか小学中学の時点でプログラム組めるとそれで数学やっちゃいそうで計算力が多分付きませんね。
プログラムは半年くらいしかまだやってないですけど、
プログラム以外の事も覚えなきゃなぁ〜とは思っています。。

341 名前:デフォルトの名無しさん [2007/06/17(日) 11:10:21 ]
Windows Vista にて
普通のサーバープログラムを sexe でサービスに入れたのですが
通知領域(タスクトレイ)にアイコンが表示されません。
サーバー機能は問題なく動作しているようです。
もちろん「ディスクトップとの対話をサービスに許可」していますし
Shell_NotifyIcon のタイムアウト処理も行い
msgTaskBarRestart によるタスクトレイ再登録も行っています。

直接の原因は Shell_NotifyIcon が全て ERROR_TIMEOUT に
なってしまっていることのようです。(1秒スリープで20回トライ)
対応策はあるのでしょうか?
やはり サービスプロジェクトで書き換えるしかない?

342 名前:デフォルトの名無しさん [2007/06/17(日) 11:40:57 ]
↑の書き込みで”全て ERROR_TIMEOUT ”と書きましたが、
”全て ERROR_TIMEOUT 以外”の間違いでした。
これから調べます。すみません。


343 名前:デフォルトの名無しさん [2007/06/17(日) 11:51:40 ]
調べたら ERROR_FILE_NOT_FOUND だった。
Shell_NotifyIcon で ERROR_FILE_NOT_FOUND って
何のファイルが無いんだ??? さっぱりわからん。

ちなみにサービス起動でない場合はちゃんとアイコンは表示されます。



344 名前:デフォルトの名無しさん mailto:sage [2007/06/17(日) 14:24:46 ]
>>341
それは、C/C++の質問というよりは、Win32APIの質問だ。
Win32APIのスレで質問しなおしたほうがいい。

質問し直しても、
設計が悪い、Windowsのアーキテクチャを理解しろ、
なんて言われるのがオチだが。

345 名前:デフォルトの名無しさん [2007/06/17(日) 16:41:34 ]
>>344
了解。


346 名前:デフォルトの名無しさん [2007/06/19(火) 00:40:49 ]
char *p[3] は char p[][3] と同じ意味でしょうか?


347 名前:デフォルトの名無しさん [2007/06/19(火) 01:11:34 ]
違います。


348 名前:デフォルトの名無しさん [2007/06/19(火) 01:23:23 ]
そうですか...
char **p[3] は char p[][3] と同じ意味でしょうか?



349 名前:デフォルトの名無しさん [2007/06/19(火) 01:28:22 ]
*はヒープ領域、[]はスタック領域を扱う。
だから、
char* p[3];
p[0] = new char[10];
ということはできても、
char p[][3];
p[0] = new char[10];
ということはできない。


350 名前:デフォルトの名無しさん [2007/06/19(火) 01:32:59 ]
>>349
むずかしす、難しいすぎて理解できません、orz

351 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:39:00 ]
char *p[3] は、要素数3の配列で、要素はchar 型のポインタ

char p[][3]; は…こんな型はない。これは配列初期化時の特殊な構文。

char p[][3] = {{1,1,1},{2,2,2}}; とすれば、char p[2][3] = {{1,1,1},{2,2,2}}; だし、
char p[][3] = {{1,1,1},{2,2,2},{3,3,3}}; なら、char p[3][3] = {{1,1,1},{2,2,2},{3,3,3}}; だし、
上の二つは、左辺だけを見れば、一見同じ型のように見えるが、実際に宣言されているのは異なる型。

繰り返すが、char p[][3] という型はない。
Cの配列は、サイズ固定。 



352 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:41:12 ]
×char p[][3]; は…こんな型はない。これは配列初期化時の特殊な構文。
○char p[][3]; は…こんな型はない。これは配列宣言時の特殊な構文。


353 名前:デフォルトの名無しさん [2007/06/19(火) 01:50:07 ]
>>351-352 型がキーワードみたいですが、型って何ですか?



354 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 01:59:31 ]
ここでいう型とは、「データ型」のこと。
ビット列で表されるデータを、どう解釈するか、ということの取り決め。

二進表記で、01100101 は、数値型の取り決めでは 十進数の101をあらわし
同じデータを、文字型ではアスキーコードと解釈して 'A' になる。

あくまでも取り決めであって、それ自体が自ら意味を持っているわけではない。
それぞれの型が、何を意味しているかは、一つ一つそのルールを覚えなければ
理解することはできない。

355 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 10:10:08 ]
>>349
>*はヒープ領域、[]はスタック領域を扱う。
はい?
おまいはPascal出身か?

356 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 17:43:03 ]
>>346
関数の仮引数という状況においてだけは、同じ意味になる

357 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:06:30 ]
PSDKのサンプルにあったんだが
CAllocator::CAllocator(HRESULT& hr, HWND wnd, IDirect3D9* d3d, IDirect3DDevice9* d3dd)
: m_refCount(1)
, m_D3D(d3d)
, m_D3DDev(d3dd)
, m_window( wnd )
{
  ....
}
っていう関数の定義があったんだが、引数リストの後、コロン以降はどんな意味がある?
検索したが、検索しにくくて見つけることが出来なかった

358 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:12:00 ]
適当に数字を入力してもらってその数だけ配列を用意したいのですが、どうすれば
できるのでしょうか?

イメージではこんな感じで宣言したい。でもこれだとエラーでる(´・ω・`)
cin>>num;
int i[num];

359 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:14:32 ]
>>357
つ[初期化指定子]

>>358
つ[c99]
つ[std::vector]

360 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:15:04 ]
int*i;
i=new int[num];

361 名前:デフォルトの名無しさん mailto:sage [2007/06/19(火) 23:26:58 ]
>>359-360
ありがとうございます。できました(゚∀゚)
これでi[255]なんてぶさいくな宣言せずにすみます

362 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 05:39:27 ]
delete するの忘れないようにな
使い捨てのコードなら別にいいけど

363 名前:357 mailto:sage [2007/06/20(水) 09:30:27 ]
>>359
検索できた!ありがとう!
ぱっとみ難解だが頑張るよ!



364 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 14:23:53 ]
>>349
ヒープかスタックかは、型で決まるのではないぞ。


365 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 21:49:43 ]
>>364
>349は型に言及しているわけではないぞ。
#勿論、演算子に決まるわけではないが。

366 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 22:01:34 ]
レジスタ割り当てってのもあるぜ。

367 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 22:10:19 ]
レジスタの前に静的領域を思い出そうぜ。

368 名前:デフォルトの名無しさん mailto:sage [2007/06/20(水) 23:40:50 ]
C++でPCAのライブラリ的なものってどっかにあったりしませんか

369 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 16:39:47 ]
自動配線ツールをCで書こうと思ってるんですけど。
アルゴリズムはmazeをベースで。

書くときに参考になるソースコードとかってどっかに落ちてるものなんでしょうか?
アルゴリズム分かっても、書くのが素人なので、どれ位の規模(行数)になるかとか、必要な関数が予想つきません。
サンプルなどがあればと思って質問させていただきました。
誘導していただければ幸いです。

370 名前:デフォルトの名無しさん mailto:sage [2007/06/24(日) 17:40:31 ]
マルチするな

371 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 05:36:17 ]
>>369
「自動配線ツール」だけで通じると思うな。



372 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 17:12:26 ]
例えば2乗や3乗の時はpowよりもa*aやa*a*aとした方が速いですが、
何条ぐらいまでかけ算に展開した方が速いのですか?
コンパイラは最適化時に自動的に展開してくれるのでしょうか?


373 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 17:34:19 ]
やってみりゃいいじゃん



374 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 17:48:47 ]
>>372
学校の宿題っぽいな。

375 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 20:59:31 ]
っ 実測

376 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 21:05:17 ]
powのソース嫁

実装をみれば、ああなるほど、と思うぞ。

377 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 22:17:07 ]
自己参照構造体で、リストの最後尾にデータを追加しようとしています。
エラーが出て困っています。何かわかりましたら教えてください。

構造体が以下のとおりで、
struct list {
  double x;  double y;  double z;
  struct list *next;
};

以下のように呼び出してるのですが、
=========================================
  struct list *listp;  //宣言
   〜〜中略〜〜
  listp = add_list(x,y,z,listp);
=========================================
struct list *add_list(double x, double y, double z, struct list *listp){
  struct list *p;

  if ((p = (struct list *) malloc(sizeof(struct list))) == NULL) {
    printf("malloc error\n");
    exit(1);
  }
  p->x = x;  p->y = y;  p->z = z;
  p->next = NULL;
  listp->next = p; //←←実行時にここでエラーが出ます。

  return p;
}

378 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 22:29:54 ]
>>377
このスレで何度も言っていることだが・・・

プログラムは省略せず全部コピペしろ!
どんなエラーメッセージが出たのか書け!
デバッガでステップ実行しろ! (変数の値のチェックもな!)

がんばれ。

379 名前:デフォルトの名無しさん mailto:sage [2007/06/25(月) 22:58:22 ]
>378のいうとおりなのだが、書いてある範囲で怪しいのは
listp = add_list(x,y,z,listp);
のlistpには何が入っている?
中略がどうなっているかわからんが初めはあさっての方向を
指しているぞ。


380 名前:372 mailto:sage [2007/06/26(火) 02:38:22 ]
やってみたら5乗あたりで抜かれるね

381 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 07:57:55 ]
そして8乗はx *= x; x *= x; x *= x;に抜き返される悪寒。
後は、精度の問題が出るような数値のときにどうするかだな。

382 名前:デフォルトの名無しさん [2007/06/26(火) 10:08:30 ]
ある vector< vector<string> > A と vector< vector<string> > B があって、
Aの1列目とBの1列目が同じIDの集合をもっています。

そこで、Aのsort(たとえばAの2列目を昇順)を実行したときに、BもAと同じ順番に
連動してsortしたいのですが、どのようにすればよろしいでしょうか?

383 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 10:11:40 ]
その中略の中にlistpの初期化や代入が無かったら
add_listのlistp->next = p でこけるのはあたりまえ。



384 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 11:19:32 ]
>>383
アンカーくらいつけようよ。

>>382
先ず、Aの2列目をキーにBをソート、然る後にAをソート。

385 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 13:18:08 ]
>>384
なるほど。ありがとうございました。

386 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 13:37:17 ]
>>381
powの実装も、
乗数が整数の場合には、
だいたいはそれなんだけど、
ループ回数が可変だから、
どうしてもオーバーヘッドが。

387 名前:デフォルトの名無しさん mailto:sage [2007/06/26(火) 13:54:31 ]
>>382
そもそもAとBを分ける必要はあるの?
そして、1列目がID、2列目が何か、というように役割が決まっているなら、どうして構造体にしないの?

typedef struct {
string ID ;
string 何か ;
vector<string> A ;
vector<string> B ;
} HOGE ;

vector<HOGE> AB ;

こういうのじゃ駄目なの?

388 名前:387 mailto:sage [2007/06/26(火) 14:03:09 ]
ちなみに、頻繁にソートかけるなら、

vector<HOGE> AB ;
とは別にソート用に、
vector <HOGE*> AB_PTR ;
を用意して、AB_PTRのほうをソートする。

そしたら今度は、
ABとAB_PTRを同期させる必要が出てくるので、
ABとAB_PTRを裸で見せるのはやめて、クラスでラップする。


389 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 02:27:37 ]

A ? TRUEの処理 : FALSEの処理;

っていう書きかたを最近知ったのですが
Aが変数ならこの書きかた出来るんですがAが関数の場合はエラーになってしまうんですが
どうやっても無理ですか?

390 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 02:37:27 ]
>>389
関数の返り値で分岐させたいってこと?
普通に出来るんだが…

コードかエラーメッセージでも挙げてみてくれ


391 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 03:00:20 ]
すいません今関数作ってやってみたら成功しました

エラー出てたのは関数じゃなくて#defineだったからなのかもしれませんorz
Windowsプログラムになってしまうんですが、こういう事出来ないかなと。


//ウィンドウ生成
hWnd = CreateWindow(
〜略〜
) ? 処理TRUE : 処理FALSE;


error C2440: '=' : 'BOOL' から 'HWND' に変換できません。
整数型からポインタ型への変換には reinterpret_cast、C スタイル キャスト
または関数スタイル キャストが必要です。


とりあえず今は上のようには書かずに次の行にこう書いて妥協してます
hWnd ? 処理TRUE : 処理FALSE;

392 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 03:24:13 ]
Cond ? 処理TRUE : 処理FALSE;
条件演算子を使う場合、処理TRUEと処理FALSEの値の型は同じか、
または処理FALSEの型から処理TRUEの型への暗黙の変換が可能でなければならない。

つまり型(クラス)HogeとFooとの変換が定義されていない場合、
Cond ? Hoge() : Foo();
のようなことは出来ない。

あと、式の値を再利用する必要がないなら素直に
if(hWnd = CreateWindow(...)) {
処理TRUE;
} else {
処理FALSE;
}
とすべき。


393 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 03:29:59 ]
>>391
変数 = 関数() ? 値1 : 値2;
と書いたら当然、値1か値2が変数に代入されるわけだが。
やりたいことがよく判らんが、処理を分岐させたいのなら三項演算子は使うべきじゃない。
関数の呼び出し結果を変数に代入しつつ別の変数に評価を入れたいのなら、
変数1 = (変数2 = 関数()) ? 値1 : 値2;
とでもすればできなくはないが、やはりこの場合も無理に一行に書くことはないだろう。



394 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 03:34:05 ]
>>392
分かりました。ありがとうございます。
ここは素直にIFで書いておきます・・・

395 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 03:38:08 ]
>>393
何となくコードを削りたくなってしまって、、

396 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 04:10:33 ]
hWnd = 関数() ? val1:val2;
というのは、
hWnd = (関数() ? val1:val2);
だというのは判ってる?

きみのやりたいのはたぶん
(hWnd = 関数()) ? val1:val2;

397 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 04:11:59 ]
あ、「出来る」というだけで、決して「やれ」という意味じゃないから

398 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 05:29:05 ]
>>396-397
ありがとうございます。
自分でも後からいろいろ試してて、、
何か、ちょっと勘違いしてたみたいです

396のでやりたい事が出来ました。
どうせ趣味で書いてるんで自分さえ読めれば良いんでやってきますwwww

399 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 06:53:09 ]
しばらく経つと、自分でも読めなくなるに一票。

400 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 10:24:16 ]
そうみたいです・・読みずらいってレベルじゃないですね。
一回全部のIFを書き直してみたんですがいくつか残して戻しましたよorz
ちなみに分岐はこんな風に書きました
A ? 処理:
B ? 処理:
C ? 処理: 0;

何もしないっていう処理は適当に当てはめたんですが
 0; で良いんでしょうか?

なんかこの書き方面白すぎてはまりそうですw
(もう既にはまってるか)

401 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 10:28:36 ]
>>400
なるほど、処理の分岐に三項演算子を使いたかったのか。
意味的にそんな阿呆なことをする子には教えてあげません。

402 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 11:38:53 ]
覚えたての言葉を使いたがる子供みたい

403 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 12:04:58 ]
自分でも、埋め合わせに 0; を思いついた時にこんな馬鹿な話が・・・って思いましたw
でもそんないじわるされるとは予想外でしたwwっうぇw
と・・・こんな風にかく人少ないと思うので
誰かに指摘されるまでは0;やNULL;って書きます
いろいろありがとうございました



404 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 14:49:10 ]
だから、阿呆だって指摘されているだろう。これ以上何を指摘されたいんだ?

405 名前:デフォルトの名無しさん mailto:sage [2007/06/27(水) 15:59:22 ]
ほうっておこうや
時に暖かく見守る事もしつよう(←なぜかry)な事なんだ






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<282KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef