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


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

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



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/

641 名前:デフォルトの名無しさん [2009/04/02(木) 00:04:08 ]
>>636
上のループで1からNum_Points-2まで進んで
下のループでも1からNum_Points-2まで進んだってこと?
それなら処理終わってるよね?

せっかく解決しようと聞いているんだから省略しないできっちり説明してほしいな。


642 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:40:04 ]
>>641
上のループ、もしくは下のループどちらかしか書いてなければ正常に動きます。
だから、printfでiがどこまで進んでいるかも確認して、Num_Points-2まで進んでました。
このループを両方コードに書いてプログラム実行すると止まって、
printfで表示できてたものも表示されなくなってしまいます。

643 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:48:48 ]
>>642
printfを具体的にどこにどのように入れてるのか知らないが、つまりループを両方書くと
実行時に最初のループに入ってすらいないということか?

もし可能であれば、実際にその問題が生じるような最小限のコード全部を書いてほしい。
つまり、俺らがそのままコピペして自分でコンパイルしてみると、同じ問題に遭遇できるようなコードってことね。
それが出来れば問題解決のための労力は少なくて済む。
まあ実際にはかなり長いコードになっちゃうのかもしれないけど。
あと、君が使ってるコンパイラに特有のトラブルだったりすると、助言できないかもしれない。

644 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 00:59:13 ]
>>643
printfはどこに入れても実行されないです。
このループを二つ入れると、そのvoid関数の部分のprintfは全てダメになります。
結構変数値を他の部分から呼び出してて、
その部分に関しては別の人がやった部分なので最小限のコードを作るにも少々時間かかると思います。
他にも少しやらなくてはいけないことがあるので、もしそれができたら戻ってきます。

ここまで、あまり上手く説明できなくて御迷惑おかけしました。
レス下さった方々、ありがとうございます。

646 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:03:50 ]
最小限のコードなんて作らなくていい。
とりあえず>>644をコピペすればいいだけだろ。

647 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:06:28 ]
無駄骨

648 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 01:10:54 ]
ステップ実行して、どこで爆死してるか見つけないとダメじゃね?
どっかでメモリ、ぶっ壊してるのだろ、きっと

649 名前:630 mailto:sage [2009/04/02(木) 01:30:25 ]
>>644
何も表示されません…。自分が両方のループ入れた時の症状と同じです。



650 名前:デフォルトの名無しさん mailto:sage [2009/04/02(木) 05:50:46 ]
もう4月馬鹿は過ぎているんだから釣りは勘弁してくれ。

651 名前:デフォルトの名無しさん [2009/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 名前:デフォルトの名無しさん 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
メンバが多めのテンプレートクラスの一つの関数だけを再定義、といった場合に、
教科書通りにテンプレートクラスの特化で全メンバを再定義すればいけるというのは分かるのですが、
特化したテンプレートクラスのある特定の関数だけリンカで特殊な定義に差し替えられないかと考えたのですが、
冷静に考えるとそれをコンパイラに知らせるのはかなり酷な作業の気がしてきたので、
教科書通りに全部再定義してみます。

一足飛びに変な質問をしようとして、エスパーさせてしまってすみません。






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

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

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