スレを勃てるまでもな ..
643:デフォルトの名無しさん
09/04/02 00:48:48
>>642
printfを具体的にどこにどのように入れてるのか知らないが、つまりループを両方書くと
実行時に最初のループに入ってすらいないということか?
もし可能であれば、実際にその問題が生じるような最小限のコード全部を書いてほしい。
つまり、俺らがそのままコピペして自分でコンパイルしてみると、同じ問題に遭遇できるようなコードってことね。
それが出来れば問題解決のための労力は少なくて済む。
まあ実際にはかなり長いコードになっちゃうのかもしれないけど。
あと、君が使ってるコンパイラに特有のトラブルだったりすると、助言できないかもしれない。
644:デフォルトの名無しさん
09/04/02 00:54:16
>>634
これ↓実行したら何が表示されるの?
Num_Points=1
fprintf(stderr, "start(1) Num_Points=%d\n", Num_Points);
for (i=0; i < (Num_Points-1); i++)
{
fprintf(stderr, "(1)[i=%d][Num_Points=%d]\n", i, Num_Points);
distance_x = (gsd[i+1].x-cur_xpos) * (gsd[i+1].x-cur_xpos);
distance_y = (gsd[i+1].y-cur_ypos) * (gsd[i+1].y-cur_ypos);
distance = sqrt(distance_x + distance_y);
}
fprintf(stderr, "end(1) Num_Points=%d\n", Num_Points);
fprintf(stderr, "start(2) Num_Points=%d\n", Num_Points);
for (i=0; i < (Num_Points-1); i++)
{
fprintf(stderr, "(2)[i=%d][Num_Points=%d]\n", i, Num_Points);
a0 = atan2(cur_ypos-gsd[i].y, cur_xpos-gsd[i].x)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
a1 = atan2(gsd[i+1].y-cur_ypos, gsd[i+1].x-cur_xpos)-atan2(gsd[i+1].y-gsd[i].y, gsd[i+1].x-gsd[i].x);
}
fprintf(stderr, "end(2) Num_Points=%d\n", Num_Points);
645:デフォルトの名無しさん
09/04/02 00:59:13
>>643
printfはどこに入れても実行されないです。
このループを二つ入れると、そのvoid関数の部分のprintfは全てダメになります。
結構変数値を他の部分から呼び出してて、
その部分に関しては別の人がやった部分なので最小限のコードを作るにも少々時間かかると思います。
他にも少しやらなくてはいけないことがあるので、もしそれができたら戻ってきます。
ここまで、あまり上手く説明できなくて御迷惑おかけしました。
レス下さった方々、ありがとうございます。
646:デフォルトの名無しさん
09/04/02 01:03:50
最小限のコードなんて作らなくていい。
とりあえず>>644をコピペすればいいだけだろ。
647:デフォルトの名無しさん
09/04/02 01:06:28
無駄骨
648:デフォルトの名無しさん
09/04/02 01:10:54
ステップ実行して、どこで爆死してるか見つけないとダメじゃね?
どっかでメモリ、ぶっ壊してるのだろ、きっと
649:630
09/04/02 01:30:25
>>644
何も表示されません…。自分が両方のループ入れた時の症状と同じです。
650:デフォルトの名無しさん
09/04/02 05:50:46
もう4月馬鹿は過ぎているんだから釣りは勘弁してくれ。
651:デフォルトの名無しさん
09/04/02 06:40:26
#include<stdio.h>
int sum(int x,int y){
return x+y;
}
int max(int x,int y){
return x*200+y*300;
}
int main(void){
int x,y,i,am,pm;
char cl;
for(i=0;i<9;i++){
scanf("%s %d %d",&cl,&x,&y);
am=sum(x,y);
pm=max(x,y);
printf("%s %d %d\n",cl,am,pm);
}
return 0;
}
と書いて実行するとき、%sの読み込みにc1と入れても
出力の%sではcだけとしか表示されないんです。
誰かこの謎の答えを教えてください。
652:デフォルトの名無しさん
09/04/02 06:46:18
>>651
char cl; → char cl[5000];
653:デフォルトの名無しさん
09/04/02 07:03:43
>>652さん
ありがとうございます!!ありがとうございます!!
何でこんなことにも気づかなかったんでしょ(;'ω`)アホだ自分…
654:デフォルトの名無しさん
09/04/02 07:32:36
>>633
「デバッガでは良く分からない」んじゃあない
お前がデバッガを分かってないだけ
655:デフォルトの名無しさん
09/04/02 07:38:41
>>651
char cl[100];
if (scanf("%99s%d%d", cl, & x, & y) != 3) fprintf(stderr, "Illegal input.\n);
656:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/02 08:22:20
>>656
宿題スレへどうぞ
658:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/02 09:24:27
実行してみればいいじゃん
661:デフォルトの名無しさん
09/04/02 09:39:24
>>659
動きます。
662:デフォルトの名無しさん
09/04/02 10:12:28
春休みが終わりそうで、カツオ状態だから、このありさま?
663:デフォルトの名無しさん
09/04/02 11:36:16
>>662
春休みに宿題なんかないだろ。
664:デフォルトの名無しさん
09/04/02 11:36:47
あるよ
665:デフォルトの名無しさん
09/04/02 14:33:24
LinuxでC++で書いたクラスをまとめて、sharedライブラリ作ろうとおもってるんですが
ヘッダファイルは、まとめたり、きれいにできませんか?
公開したいクラスは1つだけ(class A)です。実装はライブラリファイルひとつになります。
内部でたくさんのクラスを使ってるんですがこれらは外からは直接
使いません。
で、class Aのメンバにたくさんの他のクラスのオブジェクトがあったり、使ったり
しているので、 class AのヘッダファイルA.hには内部のクラスたちを定義した
たくさんの *.h がincludeされてます。
ライブラリを他人につかってもらうとき、ライブラリ1つと、ヘッダたっくさん
になっちゃうんです。ひとつのヘッダファイルにまとめる方法ないです?
666:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/02 16:46:14
それをいかに容量上限を感じさせないようにプログラムさすのがプログラマの役割だろ、常識的に考えて
668:デフォルトの名無しさん
09/04/02 16:52:42
誤爆
669:665
09/04/02 17:33:37
>> 666
なるほど。いただき。
ポインタじゃなきゃだめ?サイズが合えばよい?
670:デフォルトの名無しさん
09/04/02 17:46:27
どんなクラスなのか分からんが、そもそもポインタ型にするなら、ヘッダからヘッダをインクルードする必要はないよ。
前方宣言だけで済む。
671:デフォルトの名無しさん
09/04/02 17:51:49
>>668
できるよ。
以上。
はい次の方。
672:665
09/04/02 18:04:13
>>670
そか。
全部ポインタにして、前方宣言すればすればよいのね。
ポインタじゃないとやっぱりむり?
673:デフォルトの名無しさん
09/04/02 18:10:08
>>672
参照でも可能だけど、まあ同じ話だね。
普通の変数の形で持つなら、その変数の型の完全な定義が必要になる。ポインタや参照なら不要。
674:デフォルトの名無しさん
09/04/02 18:31:47
Aのポインタだけメンバに持つ公開用のクラスでも作ればいいんじゃ
まぁ要するにpimplなんだが
675:デフォルトの名無しさん
09/04/02 21:44:13
pthreads関数を使用してその環境で一番処理が早いスレッド数に自動的にあわせるプログラムを作っているのですが、
すべてのスレッド内の一秒間にループした回数の和を取得することができません。
どうすればうまくできるでしょうか。
676:デフォルトの名無しさん
09/04/02 21:59:41
一番簡単なのはグローバル変数に格納する事。
2番目はクラスにしてメソッドで各スレッド内で足したものを返す。かなぁ??
677:デフォルトの名無しさん
09/04/02 23:20:48
>>675
pthread_joinで戻り値(第2引数)を合計すればいい。
678:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/03 05:21:41
mainの中身をそっくり自分の関数に移動して、mainでそいつを呼ぶ。
680:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/03 21:50:25
他の板でこんな言葉を叩きつけられました
プログラマになりたくてなるんじゃないなってしまう者がプログラマ
貧弱一般人がプログラマになろうとしても人工的に淘汰されるのが目に見えている
この言葉にはすごく説得力があるような気がします
やはり、プログラマになろうとしている僕に、プログラマなんて無理なんでしょうか?
682:デフォルトの名無しさん
09/04/03 21:57:21
向き不向きは有るかもしれないが、やりたい人は誰でもなれる。
向かない人はやりたいと思わない。
683:デフォルトの名無しさん
09/04/03 22:02:29
ブロントネタに真剣にならなくても
684:デフォルトの名無しさん
09/04/03 22:28:30
>>682
ありがとうございます。
頑張ってみようと思います
685:デフォルトの名無しさん
09/04/03 22:41:26
0b00000001とかしたらサフィックスが無効ですってエラーでるんだけど、何で?
686:デフォルトの名無しさん
09/04/03 22:42:12
サフィックスが無効だからです。
687:デフォルトの名無しさん
09/04/03 22:44:30
プログラマはがんばっちゃう人はダメなんだよ。
プログラマの三つの美徳
怠惰であれ、短気であれ、コーマン大好きであれ
海軍式の努力と根性がまかり通っている職場や
そのような空気を当たり前とみなすSE/PGによるプロジェクトは
漏れなくデスマーチになる。
688:デフォルトの名無しさん
09/04/03 23:37:25
>>685
2進リテラルは無い。
8進数なのにbが入ってて不正じゃないかい?
689:デフォルトの名無しさん
09/04/04 01:24:45
0bはたしかgcc独自拡張で存在したと思う。
使わないほうが無難だな。
690:デフォルトの名無しさん
09/04/04 10:38:18
>>681
他の板ってこれか?
プログラミング質問すれ Part1
スレリンク(unix板:474番)
691:デフォルトの名無しさん
09/04/04 12:02:02
>>681
プログラマーに限った話じゃない。
全ての職業に言えること。
692:デフォルトの名無しさん
09/04/04 13:32:32
まぁ、私はプログラミングなら飯が食えると判断したからプログラマになったけどな。
693:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/04 13:45:41
雑魚ぷろぐらまあは手配師(人材派遣会社)に喰わせてやる(=喰われてやる)のが仕事だかんなあ
695:デフォルトの名無しさん
09/04/04 13:51:41
>>693
%xではなく、%pを使うべきじゃないだろか。
で、質問は"one", "two", "three", "four"がどう配置されているかってこと?
だとしたら答えは「コンパイラのご機嫌次第」かな。
大抵は、その順番で8バイト境界に並べられるような気がするけど。
696:デフォルトの名無しさん
09/04/04 13:58:50
wwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwwww
697:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/04 14:12:56
>>695
なるほど。ありがとうございます。
>>697
ありがとうございます。
699:デフォルトの名無しさん
09/04/04 14:12:59
そのコードの前にconst char * foo = "one and two";なんてコードがあったら面白いことになりそうだ。
700:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/04 14:29:28
>>700
エラーの対処を人に聞く場合はエラーの詳細を書け
たぶん、get_s には2番目のパラメタとして長さが必要ではないかと思うけど
702:デフォルトの名無しさん
09/04/04 14:35:20
gets_s(str, sizeof(str));
だろうね
mainの最後にreturn 0;も忘れずに
703:デフォルトの名無しさん
09/04/04 14:37:13
なあに、この程度のソースならエスパーでなくとも
どんなエラーか想像がつくってもんさ
704:デフォルトの名無しさん
09/04/04 14:57:29
>>701-703
ありがとうございます。
コンパイル通りました。
705:デフォルトの名無しさん
09/04/04 15:41:42
>>704
C/C++はコンパイル通っただけじゃまっっっっったく安心できない言語だから気をつけな。
むしろコンパイル通らない内が楽だよ。(コンパイラがミスを見つけてくれるから)
コンパイル通ってからのデバッグが大変なんだよねぇ。
706:デフォルトの名無しさん
09/04/04 16:38:04
それって言語として問題あるんじゃない?
707:デフォルトの名無しさん
09/04/04 16:50:40
アホは黙ってていいよ
708:デフォルトの名無しさん
09/04/04 16:51:37
>>706
何を今更。
そんな欠陥があっても、便利なとこがあることに変わりはないから使うというだけのこと。
709:デフォルトの名無しさん
09/04/04 17:20:12
インタプリタ言語なんてすべて実行時エラーだから
もっと恐ろしいことに。
710:デフォルトの名無しさん
09/04/04 18:52:37
>>705が言ってる事(>コンパイル通ってからのデバッグが大変なんだよねぇ。)は
別に言語の欠陥じゃないだろ。
プログラムを作る
→期待通りに動作していない
→何がいけないんだーー?
ってなるのはどの言語でも一緒だろ。
711:デフォルトの名無しさん
09/04/04 18:55:30
ロジックエラーってやつだな。
712:710
09/04/04 19:07:42
>>711
俺の頭のエラーってことだな。ホント質わるい。
713:デフォルトの名無しさん
09/04/04 19:12:44
誰も頭の話なんてしてないが。。。
714:デフォルトの名無しさん
09/04/04 19:23:10
初心者が読むc++のお勧め教えてください
お願いします。
715:デフォルトの名無しさん
09/04/04 19:34:48
>>714
入門者かな?これからC++始めたいって人?
入門者ならエクスメディアの『ビジュアルラーニングC++』って本が個人的なオススメだったけど、会社が倒産した。
716:デフォルトの名無しさん
09/04/04 21:51:20
>>715
ありがとうございます
717:デフォルトの名無しさん
09/04/04 21:53:53
コロッとだまされちゃうんだな。
718:715
09/04/04 22:26:09
>>717
失敬な
719:デフォルトの名無しさん
09/04/05 00:27:14
すんません。知り合いのフリーのPGがVBやVCのアカデミック版使って
作ったソフトを売ってるんだが、ソフト自体は差は無いのですか?
やめたほうがいいんじゃって言っても「ばれねぇ」の一点張り。
実際どうなの?
720:デフォルトの名無しさん
09/04/05 00:30:31
何か問題あるの?
721:デフォルトの名無しさん
09/04/05 00:37:52
アカデミック版で作ったソフトって売っていいの?
722:デフォルトの名無しさん
09/04/05 00:38:20
売っちゃいけないの?
723:デフォルトの名無しさん
09/04/05 00:39:42
ライセンス読まないの?
724:デフォルトの名無しさん
09/04/05 00:41:13
>>719
ライセンスキーの情報が埋め込まれてるから
ばれる可能性はある
アカデミックとかImagineCupのは商用利用負荷だよ
Expressはできるけど
725:デフォルトの名無しさん
09/04/05 00:43:20
いやアカデミックは商用利用可能だよ
726:デフォルトの名無しさん
09/04/05 00:53:16
>>725
ほんとだ、ごめん
アカデミックは大丈夫ですね
727:デフォルトの名無しさん
09/04/05 00:59:16
テンプレートの明示的特殊化の際に「整数型全部」「浮動小数点型全部」といったことをしたいんですが、いい方法はありませんでしょうか。
template<typename T> class Hoge { void f() {} }
template<t> class Hoge<整数>::f { void f() {整数専用処理}; }
みたいな感じで。
728:デフォルトの名無しさん
09/04/05 01:00:39
じゃあ、学生のときに買ったアカデミックで作ったソフトは売っても全く問題ないわけね
729:デフォルトの名無しさん
09/04/05 01:00:49
もうひとつ。
テンプレートの明示的特殊化はヘッダファイルに書いておいてもいいものなのでしょうか。
730:デフォルトの名無しさん
09/04/05 01:28:00
>>727
boost::enable_ifを使うしか無いと思うよ。
letsboost::enable_if
URLリンク(www.kmonos.net)
731:デフォルトの名無しさん
09/04/05 01:38:48
>>730
ありがとうございました。boostの使用も考えてみます。
テンプレートの明示的特殊化を複数個所で使用する場合に、
実体を置くべき場所の解決がうまくできない問題は相変わらず……
externを使えば?とも思いましたが、BCCでもVCでも解決できませんでした。
732:730
09/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
09/04/05 01:54:10
>>731
>>テンプレートの明示的特殊化を複数個所で使用する場合
そもそも明示的特殊化って何?
ふつーに特殊化だよね?
あと、メンバ関数テンプレートの話だよね?
実体をどこに書いてる?
特殊化してなければちゃんとコンパイル→リンクまで行くの?
734:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/05 02:56:13
>>728
学生じゃなくなってもアカデミックを使い続けて良いの?
736:デフォルトの名無しさん
09/04/05 03:40:33
課題やる→コンパイルエラー→シコシコ直す→コンパイル通る→やったー!これで終わりだー
→./a.out→文字がうじゃうじゃうじゃうじゃうじゃうじゃうじゃうじゃorセグメンテーション・エラー云々
→( ゚д゚)
→( ゚д)
そうだね、今このときだね
737:デフォルトの名無しさん
09/04/05 03:41:41
おれはなんて遅レスをしていたんだ・・・・・・
恥ずかしい・・・・・・っ、でも、
738:デフォルトの名無しさん
09/04/05 04:36:19
>// hoge.cpp
>template<> class Hoge<int>::f { void f() {int専用処理}; }
template どうこう以前に、すでに書き方間違ってるじゃろ、それ。
あと、特化したのはクラスであってメンバ関数じゃないんだから
特化のための宣言である template<> もいらない。
739:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/05 05:11:32
template<> class Hoge<int>::f();
テンプレートクラスの特化宣言をなぜ落とすw
テンプレートクラスの特化はちゃんと宣言する必要がある。
それが目的なんだから。
特化宣言がいらないのはそのクラスのメンバ関数。
なぜなら特化したのはクラスであってメンバ関数じゃないから。
仕様書を読んだほうがいいかも。
741:デフォルトの名無しさん
09/04/05 05:50:37
>>740
メンバが多めのテンプレートクラスの一つの関数だけを再定義、といった場合に、
教科書通りにテンプレートクラスの特化で全メンバを再定義すればいけるというのは分かるのですが、
特化したテンプレートクラスのある特定の関数だけリンカで特殊な定義に差し替えられないかと考えたのですが、
冷静に考えるとそれをコンパイラに知らせるのはかなり酷な作業の気がしてきたので、
教科書通りに全部再定義してみます。
一足飛びに変な質問をしようとして、エスパーさせてしまってすみません。
742:デフォルトの名無しさん
09/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:デフォルトの名無しさん
09/04/05 07:14:21
(x << 1 ) & (x >> 3)
744:デフォルトの名無しさん
09/04/05 10:36:51
初心者はポインタより多重ループのほうが躓きやすくない?
745:デフォルトの名無しさん
09/04/05 11:10:02
ポインタや多重ループより「躓き」の読み方の方が難しい
746:デフォルトの名無しさん
09/04/05 13:19:05
>>743
m9(^Д^)
747:デフォルトの名無しさん
09/04/05 13:28:50
x = ((x & 7) << 1) & (x >> 3)
748:デフォルトの名無しさん
09/04/05 14:00:12
x = 0;
x = (x << 1) & 16 || x = 1;
749:デフォルトの名無しさん
09/04/05 14:18:49
>>748
右辺値への代入?
750:デフォルトの名無しさん
09/04/05 14:40:38
|| は副作用完了店だお
751:デフォルトの名無しさん
09/04/05 14:42:06
15じゃない?
752:デフォルトの名無しさん
09/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
753:デフォルトの名無しさん
09/04/05 14:57:43
x = ((x + x) >> (x & 4))& 15
754:デフォルトの名無しさん
09/04/05 15:02:39
>>752
7とか中途半端だなどうせなら非環境依存にしとけよ
755:デフォルトの名無しさん
09/04/05 15:17:34
>>745
躓きの「書き」を問われたら俺失点するわ。
756:デフォルトの名無しさん
09/04/05 15:25:45
簡単な文字だから今覚えてしまえば、死ぬまで忘れないだろ
757:デフォルトの名無しさん
09/04/05 15:29:31
>>751
15だ。ごめん。
758:デフォルトの名無しさん
09/04/05 15:42:21
「躓き」覚えた
3日も経てば忘れるだろうけど
759:デフォルトの名無しさん
09/04/05 16:30:25
そもそも何で足偏に質なんだ?
どの辺がつまづきなんだろう・・・。
760:デフォルトの名無しさん
09/04/05 16:32:17
x=^((x<<1)+1);
761:デフォルトの名無しさん
09/04/05 16:58:46
x = 1<<(((S++)%4)+1)
??
762:デフォルトの名無しさん
09/04/06 13:27:16
図書館でC++の本探そうかと考えてるんですが・・
図書館にあると思いますか?(・∀・)
763:デフォルトの名無しさん
09/04/06 13:32:26
うちの近所の図書館にはある
764: ◆xb8eIST5.k
09/04/06 13:50:42
そうですか!また行こうと思います(・∀・)
ところで、誰かモリタポ別けてもらえないでしょうか(・∀・ )
◆xb8eIST5.k
765:デフォルトの名無しさん
09/04/06 14:20:47
>>764
お前、厨房か?クレクレやろうは逝ってよしだ、ゴルァ
766:デフォルトの名無しさん
09/04/06 14:39:11
小学校の図書館とか、児童施設の図書コーナーとか、特定の分野に特化した図書館とかじゃなきゃ
数冊はあるんでねーの?
767:デフォルトの名無しさん
09/04/06 14:58:49
>>764
住所晒したら着払いで送ってやんよ
768:デフォルトの名無しさん
09/04/06 15:28:31
>>767
着払いでモリタポを送る!?(・∀・)
769:デフォルトの名無しさん
09/04/06 18:42:31
URLリンク(mogera.jp)
そんなことより exe が使用しているdllを調べるソフトってなんだったっけ?
770:デフォルトの名無しさん
09/04/06 18:43:45
Dependency Walker(Depends.exe)のことか
771:デフォルトの名無しさん
09/04/06 18:53:32
Linuxでデバイスとのやりとり(シリアル通信)をラップするような
ライブラリを提供したいです。C++。
ユーザにはどんなインターフェイスで公開するとよいですか?
受信スレッドでデバイスから読んで
受信バッファにデータ積んで、コールバック登録されたメソッドを
呼び出してあげる。でよいですか?
ユーザアプリ側のコールバックルーチンが別スレッドで走るのが
気持ち悪い気がするのですが。
772:デフォルトの名無しさん
09/04/06 19:09:29
Windowsでプロセス間通信)をラップするような
ライブラリを提供したいです。C++。
ユーザにはどんなインターフェイスで公開するとよいですか?
受信スレッドでプロセスから読んで
受信バッファにデータ積んで、コールバック登録されたメソッドを
呼び出してあげる。でよいですか?
ユーザアプリ側のコールバックルーチンが別スレッドで走るのが
気持ち悪い気がするのですが。
773:771
09/04/06 19:42:26
>>772
Windowsのプロセス間通信なら、
共有メモリと、Windows Messageを使うと、ユーザアプリに求めるのは
メッセージポンプだけになるし、ほぼ標準的なつくりになる気がするので、
好みなんですが。
Linuxではどうですか?
774:771
09/04/06 19:45:43
Named pipeは、よく使われますか?
ユーザアプリは、selectで待つようになるんですよね。
775:デフォルトの名無しさん
09/04/07 10:59:32
自作ソフトで使うマクロの文法を、拡張しようと思い、
lexやらyaccやらbisonやら調べ始めたのですが・・・
難しい・・・
例えば呼び出し前に新たなトークンを追加したり、関数定義みたいなことが
出来るようにするサンプルを探しているのですが、見つかりません。
・自作ソフトはプラグインで拡張可能になっていて、マクロのプラグイン名
を自前で解析していますが、区切り文字の検出とか括弧の扱いとか、自力
では限界なので・・・プラグイン名を追加トークンにして、ライブラリお
任せ一発という形に出来ればと思っています。
・マクロの中で関数マクロの定義が出来るようにといいのですが、
hoge(a, b, c) = {
age; sage(a, b); uge(c);
}
hoge(1, 2, 3);
こういうのを実現しているサンプルなどありましたら教えてください。
776:デフォルトの名無しさん
09/04/07 11:43:07
>>775
こっちのスレのほうが適当かな。
スレリンク(tech板)
777:デフォルトの名無しさん
09/04/07 12:56:10
>>776
ありがとうございます。行ってきます。
778:デフォルトの名無しさん
09/04/07 13:22:03
初歩的な質問で申し訳ないんですが
みなさんは童貞でしょうか?
779:デフォルトの名無しさん
09/04/07 13:29:35
どっちか一方しか居ないとでも思ってんだろうか。
780:デフォルトの名無しさん
09/04/07 13:53:49
フォームの中にサブフォーム?を作ってメニューのボタンを押すたびにそのサブフォームの内容を変えるようにしたいのですが
どうすればよろしいのでしょうか?
781:デフォルトの名無しさん
09/04/07 13:54:39
いきなりフォームとか言われても環境がわからんわ
どのフォーム?
782:デフォルトの名無しさん
09/04/07 14:02:03
えっとWindowsフォームでしょうか・・VisualC++使っています
783:デフォルトの名無しさん
09/04/07 14:03:59
>いきなりフォーム
ヴビ厨特有の現象です。
>サブフォーム?
このオレ用語も。
…ほらね、俺に ESP 能力なんかないでしょ。
>>780
C++/CLI なら TabControl でも使っとけ。
784:デフォルトの名無しさん
09/04/07 14:17:05
すみませんでした。
ありがとうございました。
785:デフォルトの名無しさん
09/04/07 19:30:35
>>779
どちらでもない、あるいは両方ってあり得るの?
786:デフォルトの名無しさん
09/04/07 19:40:47
>>785
「みなさんは」という集合なんだから両方は余裕であるだろ
787:デフォルトの名無しさん
09/04/07 20:29:33
>>786
はい、残念。
「童貞」は個体の属性だから、>>778は集合に対する問いかけじゃない。
集合の元に対する問いかけだ。
日本語勉強してから出直しな。
788:デフォルトの名無しさん
09/04/07 20:32:21
>>787
数学できるのかっこいー
ってお世辞言ってもらえるとでも思っているのかな?
・・・恥さらしてないで出直しな。
789:デフォルトの名無しさん
09/04/07 21:08:12
できて当たり前のことをほめられてもうれしくないだろ
788が恥さらしだということだけは確実に真理だ
790:788
09/04/07 21:54:35
>>789
>「確実に真理だ」
・・・顔 真っ赤にしちゃってかわいー
791:デフォルトの名無しさん
09/04/07 22:01:26
>>790
定番のレスしか返せないってほんとかっわいいいいwwwwww
792:790
09/04/07 22:12:06
>>791
あきらめろ。
このありさまではもう、誰が見てもお前が○け犬
793:デフォルトの名無しさん
09/04/07 22:26:27
>>788
数学?
794:デフォルトの名無しさん
09/04/08 00:38:22
>>787
「童貞」は数学用語じゃないから勝手に元と認識してはいけません
795:デフォルトの名無しさん
09/04/08 00:39:57
集合とか言い出したのは>>786なのだが。
796:デフォルトの名無しさん
09/04/08 01:02:41
>>787 童貞乙
797:デフォルトの名無しさん
09/04/08 07:03:13
童貞が煽りになると思う時点でガキすぎるw
798:デフォルトの名無しさん
09/04/08 07:07:20
本当に童貞の奴が必死ですw
799:デフォルトの名無しさん
09/04/08 09:32:35
>>787
>「童貞」は個体の属性
を不特定多数に対して問いかける間抜けさに気付けない頭の悪さを棚に上げて
>日本語勉強してから出直しな。
てのが、なんだかカッコイイですね。
800:デフォルトの名無しさん
09/04/08 11:16:42
元レスの奴と違う人間に煽られて反応したお前が負け犬だwwwww
801:デフォルトの名無しさん
09/04/08 13:54:40
>>800
違うか同じかは知らんが (よく解るなお前)、そんなことより
その「お前」ってのは誰?
802:デフォルトの名無しさん
09/04/08 13:55:58
オレオレ
803:デフォルトの名無しさん
09/04/08 14:04:13
いーや俺。
804:デフォルトの名無しさん
09/04/08 14:18:26
うんお前
805:デフォルトの名無しさん
09/04/08 15:11:57
初心者なんですが、質問させてください。
まず、BCCの無料版をDLして、メモ帳のソースをcファイルで保存しました。
それからコマンドプロンプトを使って実行しましたが、次の文章が出てexeファイルができませんでした。
'bcc32'は内部コマンドまたは外部コマンド、操作可能なプログラムまたはバッチファイルとして
認識されていません。
そして、ソースは以下のものです。
main()
{
}
806:デフォルトの名無しさん
09/04/08 15:15:41
>>805
BCCへのパス通したか?
URLリンク(pocketstudio.jp)
807:デフォルトの名無しさん
09/04/08 15:16:09
パスが通ってない。通せ
808:デフォルトの名無しさん
09/04/08 15:21:52
パス通せよ
809:デフォルトの名無しさん
09/04/08 15:26:41
URLリンク(www.cppdrive.jp)
ここで勉強しる
810:デフォルトの名無しさん
09/04/08 15:39:14
>>806-809
やってませんでした。ありがとうございます。やってみます。
811:デフォルトの名無しさん
09/04/08 17:57:14
select関数の第一引数について
TCP/IPのソケット通信処理を作成していて、select関数を使用するつもりです。
select関数の第一引数には「集合にある記述子の中の最大値に1を足したもの」
を設定するということですが、具体的に何を設定すればよいか分かりません。
以下の場合、第一引数"nSocket"には何を設定すればよいのか教えて下さい。
FD_ZERO(&rd);
FD_SET(acceptSocket1, &rd);
FD_SET(acceptSocket2, &rd);
select(nSocket, &rd, NULL, NULL, 10);
よろしくお願いします。
812:デフォルトの名無しさん
09/04/08 18:03:41
select()に登録するソケット(=socket()の戻り値)の中で一番大きい奴に+1した値
socket()の戻り値はint型だから比較したり+1したりできるでしょ?
813:デフォルトの名無しさん
09/04/08 18:08:20
>>812
そういう意味ですか。
ありがとうございました。
814:デフォルトの名無しさん
09/04/08 18:16:27
URLリンク(hpcgi1.nifty.com)
nfds 引数は Windows Socket では未使用 (無視される)
Windowsのソケットはいろいろ癖がある
815:デフォルトの名無しさん
09/04/08 23:17:45
クラスの継承時にコンストラクタも継承するというか、
親クラスに定義されているコンストラクタをそのまま使う方法というのは、
再定義してデフォルト初期化子に渡す以外ないのでしょうか。
816:デフォルトの名無しさん
09/04/08 23:32:54
class A { int m_val; public: A(int a, int b){ m_val = a+b; } }
class B : A {}
B(1, 2);
みたいにしたいってこと?再定義しかないね。
817:デフォルトの名無しさん
09/04/08 23:41:25
>>816
了解しました
テンプレートで
class A { int m_val; public: A(int a, int b){ m_val = a+b; } }
template<class X> class B : public A { ... }
のようにして、定型の追加機能を持たせるテンプレートを作ろうとしたのですが、
どうしてもそこで引っかかってしまいまして。
818:デフォルトの名無しさん
09/04/09 02:04:45
とりあえず 童貞乙 であります!
最新レス表示スレッドの検索類似スレ一覧話題のニュースおまかせリスト▼オプションを表示暇つぶし2ch
5394日前に更新/193 KB
担当:undef