- 1 名前:デフォルトの名無しさん [2009/03/02(月) 00:36:19 ]
- スレを勃てるまでもない低俗な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/
- 652 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 06:46:18 ]
- >>651
char cl; → char cl[5000];
- 653 名前:デフォルトの名無しさん [2009/04/02(木) 07:03:43 ]
- >>652さん
ありがとうございます!!ありがとうございます!! 何でこんなことにも気づかなかったんでしょ(;'ω`)アホだ自分…
- 654 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 07:32:36 ]
- >>633
「デバッガでは良く分からない」んじゃあない お前がデバッガを分かってないだけ
- 655 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 07:38:41 ]
- >>651
char cl[100]; if (scanf("%99s%d%d", cl, & x, & y) != 3) fprintf(stderr, "Illegal input.\n);
- 656 名前:デフォルトの名無しさん [2009/04/02(木) 08:14:44 ]
- ここからユーザ定義関数で処理しなくてはならないんだが、 コレ以上の行動は俺の頭ではむりです…誰か助けて下さいorz
#include<stdio.h> #define ROW 8 /*縦*/ #define COL 8 /*横*/ int main(void){ int i,j; int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}}; for(j=0;j<COL;j++){ for(i=ROW-1;i>=0;i--){ printf("%2c ",matrix[i][j]);} printf("\n");} printf("\n"); for(i=ROW-1;i>=0;i--){ for(j=COL-1;j>=0;j--){ printf("%2c ",matrix[i][j]);} printf("\n");} printf("\n"); for(j=COL-1;j>=0;j--){ for(i=0;i<ROW;i++){ printf("%2c ",matrix[i][j]);} printf("\n");} return 0; }
- 657 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 08:22:20 ]
- >>656
宿題スレへどうぞ
- 658 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 08:56:29 ]
- #include<stdio.h>
#define ROW 8 /*縦*/ #define COL 8 /*横*/ void disp(int (*matrix)[ROW][COL], int revrow, int revcol) { int i,j,row,col; for (j = 0; j < COL; j++) { col = (revcol) ? COL - 1 - j : j; for (i = 0; i < ROW; i++) { row = (revrow) ? ROW - 1 - i : i; printf("%c ", (*matrix)[row][col]); } printf("\n"); } } int main(void){ int matrix[ROW][COL] ={ {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','*','*','*','*','*','*','*'}, {'#','#','#','#','#','#','#','#'}}; disp(&matrix, 1, 0); printf("\n"); disp(&matrix, 1, 1); printf("\n"); disp(&matrix, 0, 1); return 0; }
- 659 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:20:59 ]
- c初心者です。 以下の二つの関数はまったく同じように動きますか?
int f1(int a) { if(a==3){ return 1;}; if(a>1){ return 2;}; return 3; } int f2(int a) { if (a==3) { return 1;} else if (a>1) { return 2;} else {return 3;}; }
- 660 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:24:27 ]
- 実行してみればいいじゃん
- 661 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 09:39:24 ]
- >>659
動きます。
- 662 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 10:12:28 ]
- 春休みが終わりそうで、カツオ状態だから、このありさま?
- 663 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 11:36:16 ]
- >>662
春休みに宿題なんかないだろ。
- 664 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 11:36:47 ]
- あるよ
- 665 名前:デフォルトの名無しさん [2009/04/02(木) 14:33:24 ]
- LinuxでC++で書いたクラスをまとめて、sharedライブラリ作ろうとおもってるんですが
ヘッダファイルは、まとめたり、きれいにできませんか? 公開したいクラスは1つだけ(class A)です。実装はライブラリファイルひとつになります。 内部でたくさんのクラスを使ってるんですがこれらは外からは直接 使いません。 で、class Aのメンバにたくさんの他のクラスのオブジェクトがあったり、使ったり しているので、 class AのヘッダファイルA.hには内部のクラスたちを定義した たくさんの *.h がincludeされてます。 ライブラリを他人につかってもらうとき、ライブラリ1つと、ヘッダたっくさん になっちゃうんです。ひとつのヘッダファイルにまとめる方法ないです?
- 666 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 14:57:10 ]
- >>665
ひつの手だが、privateメンバにはダミー宣言を使う方法がある 例えば下の例(ヘッダ)で LIBをビルドする時だけ _LIB_MAIN_ を定義する こうすれば、LIB利用者には aaa.h は渡さなくて良い #ifdef _LIB_MAIN_ #include "aaa.h" aaa *a; #else void *a; #endif
- 667 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:46:14 ]
- それをいかに容量上限を感じさせないようにプログラムさすのがプログラマの役割だろ、常識的に考えて
- 668 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 16:52:42 ]
- 誤爆
- 669 名前:665 [2009/04/02(木) 17:33:37 ]
- >> 666
なるほど。いただき。 ポインタじゃなきゃだめ?サイズが合えばよい?
- 670 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:46:27 ]
- どんなクラスなのか分からんが、そもそもポインタ型にするなら、ヘッダからヘッダをインクルードする必要はないよ。
前方宣言だけで済む。
- 671 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 17:51:49 ]
- >>668
できるよ。 以上。 はい次の方。
- 672 名前:665 [2009/04/02(木) 18:04:13 ]
- >>670
そか。 全部ポインタにして、前方宣言すればすればよいのね。 ポインタじゃないとやっぱりむり?
- 673 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:10:08 ]
- >>672
参照でも可能だけど、まあ同じ話だね。 普通の変数の形で持つなら、その変数の型の完全な定義が必要になる。ポインタや参照なら不要。
- 674 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 18:31:47 ]
- Aのポインタだけメンバに持つ公開用のクラスでも作ればいいんじゃ
まぁ要するにpimplなんだが
- 675 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:44:13 ]
- pthreads関数を使用してその環境で一番処理が早いスレッド数に自動的にあわせるプログラムを作っているのですが、
すべてのスレッド内の一秒間にループした回数の和を取得することができません。 どうすればうまくできるでしょうか。
- 676 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 21:59:41 ]
- 一番簡単なのはグローバル変数に格納する事。
2番目はクラスにしてメソッドで各スレッド内で足したものを返す。かなぁ??
- 677 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 23:20:48 ]
- >>675
pthread_joinで戻り値(第2引数)を合計すればいい。
- 678 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 05:06:12 ]
- #include<stdio.h>
int main(void){ int a,s,i; int box[10]={0}; scanf("%d",&s); while(s!=0){ for(i=0;i<s;i++){ scanf("%d",&a); if(a<=9) box[0]+=1; else if(9<=a&&a<20) box[1]+=1; else if(29<a&&a<40) box[3]+=1; else if(19<a&&a<30) box[2]+=1; else if(39<a&&a<50) box[4]+=1; else if(49<a&&a<60) box[5]+=1; else box[6]+=1; } } printf("%d\n",box[0]); printf("%d\n",box[1]); printf("%d\n",box[2]); printf("%d\n",box[3]); printf("%d\n",box[4]); printf("%d\n",box[5]); printf("%d\n",box[6]); } return 0; } 上のソースをユーザ定義関数を使って書きたいときはどうしたらいいのでしょう?
- 679 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 05:21:41 ]
- mainの中身をそっくり自分の関数に移動して、mainでそいつを呼ぶ。
- 680 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 08:00:22 ]
- #include<stdio.h>
int hantei(int i) { if (i < 0) { return 0; } if (60 <= i) { return 6; } return i / 10; } int main(void){ int a,s,i; int box[10]={0}; scanf("%d",&s); for(i=0;i<s;i++){ scanf("%d",&a); box[hantei(a)]++; } for(i=0;i<=6;i++){ printf("%d %d\n",i,box[i]); } return 0; }
- 681 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 21:50:25 ]
- 他の板でこんな言葉を叩きつけられました
プログラマになりたくてなるんじゃないなってしまう者がプログラマ 貧弱一般人がプログラマになろうとしても人工的に淘汰されるのが目に見えている この言葉にはすごく説得力があるような気がします やはり、プログラマになろうとしている僕に、プログラマなんて無理なんでしょうか?
- 682 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 21:57:21 ]
- 向き不向きは有るかもしれないが、やりたい人は誰でもなれる。
向かない人はやりたいと思わない。
- 683 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:02:29 ]
- ブロントネタに真剣にならなくても
- 684 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:28:30 ]
- >>682
ありがとうございます。 頑張ってみようと思います
- 685 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:41:26 ]
- 0b00000001とかしたらサフィックスが無効ですってエラーでるんだけど、何で?
- 686 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:42:12 ]
- サフィックスが無効だからです。
- 687 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:44:30 ]
- プログラマはがんばっちゃう人はダメなんだよ。
プログラマの三つの美徳 怠惰であれ、短気であれ、コーマン大好きであれ 海軍式の努力と根性がまかり通っている職場や そのような空気を当たり前とみなすSE/PGによるプロジェクトは 漏れなくデスマーチになる。
- 688 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 23:37:25 ]
- >>685
2進リテラルは無い。 8進数なのにbが入ってて不正じゃないかい?
- 689 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 01:24:45 ]
- 0bはたしかgcc独自拡張で存在したと思う。
使わないほうが無難だな。
- 690 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 10:38:18 ]
- >>681
他の板ってこれか? プログラミング質問すれ Part1 pc12.2ch.net/test/read.cgi/unix/1127388574/474
- 691 名前:デフォルトの名無しさん [2009/04/04(土) 12:02:02 ]
- >>681
プログラマーに限った話じゃない。 全ての職業に言えること。
- 692 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:32:32 ]
- まぁ、私はプログラミングなら飯が食えると判断したからプログラマになったけどな。
- 693 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:42:21 ]
- すいません。
ポインタを使って、配列のそれぞれの要素に文字列を入れたんですけども、 こういう場合の配列のアドレスって一体どういう規則で並んでいるんでしょうか? #include <stdio.h> int main() { char test[] = "1234"; char *words[] = {"one","two","three","four"}; printf("%p %p %p %p\n",test[0],test[1],test[2],test[3]); printf("%x %x %x %x\n",words[0],words[1],words[2],words[3]); }
- 694 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:45:41 ]
- 雑魚ぷろぐらまあは手配師(人材派遣会社)に喰わせてやる(=喰われてやる)のが仕事だかんなあ
- 695 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:51:41 ]
- >>693
%xではなく、%pを使うべきじゃないだろか。 で、質問は"one", "two", "three", "four"がどう配置されているかってこと? だとしたら答えは「コンパイラのご機嫌次第」かな。 大抵は、その順番で8バイト境界に並べられるような気がするけど。
- 696 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:58:50 ]
- wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
- 697 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:06:43 ]
- FFFF0000 o n e \0
FFFF0004 t w o \0 FFFF0008 t h r e FFFF000C e \0 X X FFFF0010 f o u r FFFF0014 \0 X X X ※ Xに何が入るか分からない words[0] = (char*)FFFF0000 words[1] = (char*)FFFF0004 words[2] = (char*)FFFF0008 words[3] = (char*)FFFF0010 こんなイメージ
- 698 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:12:56 ]
- >>695
なるほど。ありがとうございます。 >>697 ありがとうございます。
- 699 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:12:59 ]
- そのコードの前にconst char * foo = "one and two";なんてコードがあったら面白いことになりそうだ。
- 700 名前:デフォルトの名無しさん [2009/04/04(土) 14:20:39 ]
- VC++2008EE使用
これでエラーが出るんですが、どこが悪いんでしょうか? #include <stdio.h> #include <stdlib.h> #include <string.h> main() { char str[100] ; int num ; gets_s(str) ; num = atoi(str) ; printf("%d",num*2) ; }
- 701 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:29:28 ]
- >>700
エラーの対処を人に聞く場合はエラーの詳細を書け たぶん、get_s には2番目のパラメタとして長さが必要ではないかと思うけど
- 702 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:35:20 ]
- gets_s(str, sizeof(str));
だろうね mainの最後にreturn 0;も忘れずに
- 703 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:37:13 ]
- なあに、この程度のソースならエスパーでなくとも
どんなエラーか想像がつくってもんさ
- 704 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:57:29 ]
- >>701-703
ありがとうございます。 コンパイル通りました。
- 705 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 15:41:42 ]
- >>704
C/C++はコンパイル通っただけじゃまっっっっったく安心できない言語だから気をつけな。 むしろコンパイル通らない内が楽だよ。(コンパイラがミスを見つけてくれるから) コンパイル通ってからのデバッグが大変なんだよねぇ。
- 706 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:38:04 ]
- それって言語として問題あるんじゃない?
- 707 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:50:40 ]
- アホは黙ってていいよ
- 708 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 16:51:37 ]
- >>706
何を今更。 そんな欠陥があっても、便利なとこがあることに変わりはないから使うというだけのこと。
- 709 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 17:20:12 ]
- インタプリタ言語なんてすべて実行時エラーだから
もっと恐ろしいことに。
- 710 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:52:37 ]
- >>705が言ってる事(>コンパイル通ってからのデバッグが大変なんだよねぇ。)は
別に言語の欠陥じゃないだろ。 プログラムを作る →期待通りに動作していない →何がいけないんだーー? ってなるのはどの言語でも一緒だろ。
- 711 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:55:30 ]
- ロジックエラーってやつだな。
- 712 名前:710 mailto:sage [2009/04/04(土) 19:07:42 ]
- >>711
俺の頭のエラーってことだな。ホント質わるい。
- 713 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:12:44 ]
- 誰も頭の話なんてしてないが。。。
- 714 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:23:10 ]
- 初心者が読むc++のお勧め教えてください
お願いします。
- 715 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 19:34:48 ]
- >>714
入門者かな?これからC++始めたいって人? 入門者ならエクスメディアの『ビジュアルラーニングC++』って本が個人的なオススメだったけど、会社が倒産した。
- 716 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:51:20 ]
- >>715
ありがとうございます
- 717 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:53:53 ]
- コロッとだまされちゃうんだな。
- 718 名前:715 mailto:sage [2009/04/04(土) 22:26:09 ]
- >>717
失敬な
- 719 名前:デフォルトの名無しさん [2009/04/05(日) 00:27:14 ]
- すんません。知り合いのフリーのPGがVBやVCのアカデミック版使って
作ったソフトを売ってるんだが、ソフト自体は差は無いのですか? やめたほうがいいんじゃって言っても「ばれねぇ」の一点張り。 実際どうなの?
- 720 名前:デフォルトの名無しさん [2009/04/05(日) 00:30:31 ]
- 何か問題あるの?
- 721 名前:デフォルトの名無しさん [2009/04/05(日) 00:37:52 ]
- アカデミック版で作ったソフトって売っていいの?
- 722 名前:デフォルトの名無しさん [2009/04/05(日) 00:38:20 ]
- 売っちゃいけないの?
- 723 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:39:42 ]
- ライセンス読まないの?
- 724 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:41:13 ]
- >>719
ライセンスキーの情報が埋め込まれてるから ばれる可能性はある アカデミックとかImagineCupのは商用利用負荷だよ Expressはできるけど
- 725 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:43:20 ]
- いやアカデミックは商用利用可能だよ
- 726 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:53:16 ]
- >>725
ほんとだ、ごめん アカデミックは大丈夫ですね
- 727 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:59:16 ]
- テンプレートの明示的特殊化の際に「整数型全部」「浮動小数点型全部」といったことをしたいんですが、いい方法はありませんでしょうか。
template<typename T> class Hoge { void f() {} } template<t> class Hoge<整数>::f { void f() {整数専用処理}; } みたいな感じで。
- 728 名前:デフォルトの名無しさん [2009/04/05(日) 01:00:39 ]
- じゃあ、学生のときに買ったアカデミックで作ったソフトは売っても全く問題ないわけね
- 729 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:00:49 ]
- もうひとつ。
テンプレートの明示的特殊化はヘッダファイルに書いておいてもいいものなのでしょうか。
- 730 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:28:00 ]
- >>727
boost::enable_ifを使うしか無いと思うよ。 letsboost::enable_if www.kmonos.net/alang/boost/classes/enable_if.html
- 731 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 01:38:48 ]
- >>730
ありがとうございました。boostの使用も考えてみます。 テンプレートの明示的特殊化を複数個所で使用する場合に、 実体を置くべき場所の解決がうまくできない問題は相変わらず…… externを使えば?とも思いましたが、BCCでもVCでも解決できませんでした。
- 732 名前:730 mailto:sage [2009/04/05(日) 01:51:31 ]
- >>731
まあ正直俺だったらboost::enable_ifじゃなくて、 適当なprivateインライン関数テンプレートfoo_temp()を1つ別個に用意しておいて、 int, short, unsigned long, etc... を全部考え得る限り特殊化し、それぞれから foo_temp<int>, foo_temp<short>とかを呼び出すように定義しちゃうかもしれない。
- 733 名前:730 mailto:sage [2009/04/05(日) 01:54:10 ]
- >>731
>>テンプレートの明示的特殊化を複数個所で使用する場合 そもそも明示的特殊化って何? ふつーに特殊化だよね? あと、メンバ関数テンプレートの話だよね? 実体をどこに書いてる? 特殊化してなければちゃんとコンパイル→リンクまで行くの?
- 734 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 02:19:10 ]
- >>733
「明示的特殊化」はIBM XL C/C++ ランゲージ・リファレンスの言葉に従っています。 中身は普通の特殊化でメンバ関数です。 やりたいことはクラステンプレート内部のメンバ関数のみの特殊化です。 (クラス内部のテンプレート関数の特殊化を指す名前はあるのでしょうか?) 現在は hoge.h hoge.cpp a.cpp b.cpp があるとして、 // hoge.h template<typename T> class Hoge { void f() {} } // template<> class Hoge<int>::f() { int専用処理; } // cppでの記述を消しても多重定義、NG // template<> class Hoge<int>::f(); // VCとBCCではじかれる。externを書いても同じ。 // hoge.cpp template<> class Hoge<int>::f { void f() {int専用処理}; } // a.cppとb.cpp Hoge<int> hoge; hoge.f(); とおいて試してみています。
- 735 名前:デフォルトの名無しさん [2009/04/05(日) 02:56:13 ]
- >>728
学生じゃなくなってもアカデミックを使い続けて良いの?
- 736 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:40:33 ]
- 課題やる→コンパイルエラー→シコシコ直す→コンパイル通る→やったー!これで終わりだー
→./a.out→文字がうじゃうじゃうじゃうじゃうじゃうじゃうじゃうじゃorセグメンテーション・エラー云々 →( ゚д゚) →( ゚д) そうだね、今このときだね
- 737 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 03:41:41 ]
- おれはなんて遅レスをしていたんだ・・・・・・
恥ずかしい・・・・・・っ、でも、
- 738 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:36:19 ]
- >// hoge.cpp
>template<> class Hoge<int>::f { void f() {int専用処理}; } template どうこう以前に、すでに書き方間違ってるじゃろ、それ。 あと、特化したのはクラスであってメンバ関数じゃないんだから 特化のための宣言である template<> もいらない。
- 739 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 04:56:41 ]
- >>738
失礼しました。その部分はclass→voidですね。classだとそもそもコンパイルが通らないはず。 というわけで試してみました。 // hoge.h template<typename T> class Hoge { void f() {} } // なにも書かない→gcc3.4:リンカで多重定義 VC9:通るがcppでの実装は無視される BCC:cppのコンパイル時に多重定義扱い // void Hoge<int>::f; //gcc3.4→too few template-parameter-list VC9:通るがcppでの実相は無視される BCC5.5:template<>宣言が必要 // hoge.cpp void Hoge<int>::f { void f() {int専用処理}; } といった感じです。
- 740 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 05:11:32 ]
- template<> class Hoge<int>::f();
テンプレートクラスの特化宣言をなぜ落とすw テンプレートクラスの特化はちゃんと宣言する必要がある。 それが目的なんだから。 特化宣言がいらないのはそのクラスのメンバ関数。 なぜなら特化したのはクラスであってメンバ関数じゃないから。 仕様書を読んだほうがいいかも。
- 741 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 05:50:37 ]
- >>740
メンバが多めのテンプレートクラスの一つの関数だけを再定義、といった場合に、 教科書通りにテンプレートクラスの特化で全メンバを再定義すればいけるというのは分かるのですが、 特化したテンプレートクラスのある特定の関数だけリンカで特殊な定義に差し替えられないかと考えたのですが、 冷静に考えるとそれをコンパイラに知らせるのはかなり酷な作業の気がしてきたので、 教科書通りに全部再定義してみます。 一足飛びに変な質問をしようとして、エスパーさせてしまってすみません。
- 742 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:10:08 ]
- 4桁の2進数があったとします。0001←2進数表記
それを0001→0010→0100→1000→0001→…という感じでずっと1を移動させたいん ですがifやforなど条件分岐を使わず出来るだけ軽い処理でいい方法ありませんか? この関数が呼び出されるたびに上記のように1を移動させていくって感じです。 <<=1でシフトさせていけば軽いしいいかなと思ったんですがそれだと1000を処理したとき 0000になってしまいます。やっぱりif入れて8より大きくなったら1にとかしかない?
- 743 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:14:21 ]
- (x << 1 ) & (x >> 3)
- 744 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 10:36:51 ]
- 初心者はポインタより多重ループのほうが躓きやすくない?
- 745 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 11:10:02 ]
- ポインタや多重ループより「躓き」の読み方の方が難しい
- 746 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:19:05 ]
- >>743
m9(^Д^)
- 747 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:28:50 ]
- x = ((x & 7) << 1) & (x >> 3)
- 748 名前:デフォルトの名無しさん [2009/04/05(日) 14:00:12 ]
- x = 0;
x = (x << 1) & 16 || x = 1;
- 749 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:18:49 ]
- >>748
右辺値への代入?
- 750 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:40:38 ]
- || は副作用完了店だお
- 751 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:42:06 ]
- 15じゃない?
- 752 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:54:35 ]
- #include <stdio.h>
void main() { int i, x = 1; for (i = 0; i < 10; i++) { printf("%d:%X ", i, x); x = ((x & 7) << 1) | (x >> 3); } } 0:1 1:2 2:4 3:8 4:1 5:2 6:4 7:8 8:1 9:2
|

|