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


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

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



1 名前: ◆h6A7qfFFu6 mailto:sage [2008/12/29(月) 11:05:07 ]
スレを勃てるまでもない低俗な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/

571 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 02:17:05 ]
こう。

sa_family          ⇔ sin_family (2 バイト)
sa_data[0]〜sa_data[1] ⇔ sin_port (2 バイト)
sa_data[2]〜sa_data[5] ⇔ sin_addr (4 バイト)
sa_data[6]〜sa_data[13] ⇔ sin_zero (8 バイト)

572 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 02:23:51 ]
connect(2)ってだいたいこんな感じで使うだろ。

struct sockaddr_in addr = {
.sin_family = AF_INET,
.sin_port = htons(80),
.sin_addr = {
.s_addr = inet_aton("192.168.1.1")
}
};

connect(skfd, (struct sockaddr *)&addr, sizeof(addr);

>>536はなにか勘違いしてる気がしてならない。

573 名前:536 [2009/01/04(日) 02:34:31 ]
>>571
お!
もしかして
sockaddr_inは、計16バイトでその情報はsockaddrに全て対応する
sa_family はsinfamilyに
sa_data[14]には残りの14バイトのアドレスが格納されるということになってるのかな

だとすると、どちらかの構造体だけ入力しとけばいいってのも納得できるのですが
これでいいのでしょうか?

574 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 02:46:42 ]
>>573
いままでの回答全て無駄っぽい。
sockaddrはアドレスファミリーから見れば関係ないんだって。
例えばUNIX ドメインソケットなら sockaddr_un だし、
IPv4なら sockaddr_in がconnectには必要。
ただ、歴史的背景かなにかはしらないが、connect(2)のインターフェースが
「void *」ではなく、「sockaddr *」になってるってだけ。

575 名前:536 [2009/01/04(日) 02:56:41 ]
>>574
つまり>>571ではないと?
ますますわけわかんなくなってきた

struct sockaddr* をキャストの型として &echoservaddrするってのがよくわからないのかなぁ

&echoservaddrには>>572にかいてあるようなin構造体のアドレスが入力ずみではあるけど
それをキャストすると、どう扱われるってのがよくわかんないかも

いや、本当にみなさんに色々教えてもらっているのに理解がたりなくて申し訳ないです。
キャストとかsockaaddrとかぐぐってるけど、いまいち理解できない・・・

576 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 03:01:20 ]
>>575
>>571 であってる。
まず、>>569 が理解できるか確認してくれ。

577 名前:536 [2009/01/04(日) 03:11:36 ]
>>576
すみません。まったくわかりません。
const unsigned char*)&n
char型(nの値が格納されている)アドレスへのポインタ

なんかもうわかりません

578 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 03:18:13 ]
ま、深夜だし思う存分続けてくれたまえ

579 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 03:27:31 ]
>>577
典型的な「ポインタを理解していない」状態だね。
まあ、初心者は大抵一度は通る道だ。

ポインタを理解するのは簡単だ。メモリを理解すれば良い。ただそれだけだ。

変数とかの中身はメモリに置かれている。
メモリは1バイト単位に分割されていて、それぞれのバイトに住所が割り振られている。

[0番地][1番地][2番地]・・・

でも、例えば int とかのサイズは1バイトではない。現在は4バイトが主流だね。
こういうのは、メモリ上の連続した領域を占有することになる。
そして、int 型の変数(例えば >>569 の n)に & をつけると、
この連続した4バイトの領域の先頭のバイトの住所が取得できる。

[----------------------- int n ------------------------]
[12938100番地][12938101番地][12938102番地][12938103番地]   (住所は一例)
   ↑
  先頭   &n == 12938100番地

でも、別にこの4バイトの領域を int の値と見なさなくてはいけないわけではない。
例えば勝手に char 4要素の配列だと見なしても構わないわけだ。

[-- char [0] --][-- char [1] --][-- char [2] --][-- char [3] --]
[12938100番地][12938101番地][12938102番地][12938103番地]

んで、この char 4要素の配列の先頭要素の住所もやっぱり12938100番地なわけだ。

こういう解釈の変更を行っているのが、
(const char*)&n みたいなキャストになるわけだ。



580 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 03:39:44 ]
ポインタってのは2つの属性から構成されている。
1つはメモリ上の占有している領域の先頭の住所(アドレス)と、
そしてそのアドレスにある値を「何の型の値だと見なすか」だ。
ある変数のポインタは、変数に & をつけることで得られる。

変数に & を付ける事によって得られるポインタの型は、
元の変数の型に * をつけた形で表現する。
ポインタは基本的にただアドレスなんつー単なる値を保持するだけのもんなので、
ポインタを保持する変数なんかも作る事ができる。
例えばこんな感じだ。

int *p = &n;

変数 p は n のアドレス、例えば12938100番地などといったような値を保持しているわけだ。
んでさらに、p は int* という型なわけだが、
この int って部分は、12938100番地から始まる領域を int 型の値だと見なすよ、って意味を持っている。

これを char 型の値だと見なしたい場合は、char* にキャストしてしまえばいい。

char *c = (char*)p;

これで、やっぱり変数 c には p に入れられていた領域と同じ場所を指すアドレスが入れられるわけだけど、
c の型は char* なんで、その領域を char 型の値だと見なすようになるわけだ。

この話の int と char を sockaddr_in と sockaddr に置き換えれば、
connect に関する話も分かるはず。

581 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 03:46:11 ]
ポインタ……それは恋だ!

582 名前:デフォルトの名無しさん [2009/01/04(日) 03:48:03 ]
>>580
ポインタの正確な定義わ?

583 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 03:53:40 ]
ボイン太、それはAVだ!

584 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 03:56:43 ]
残念ながらボッシュートで〜す

585 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 05:24:40 ]
ってか、ぶっちゃけお前らの一番好きなC89基本型ってなんなの

586 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 05:50:24 ]
int
異論は認めない

587 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 05:58:07 ]
unsigned long int

588 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 05:59:37 ]
size_t 異論 は 色ん なものがあるだろうから認める

589 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 06:10:51 ]
char
ちゃ〜



590 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 06:21:28 ]
size_tって中身はint?

591 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 06:33:26 ]
符号なしのint型が一般的らしい。time_tとかも。

592 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 06:33:54 ]
grepすりゃすぐ判るかと

593 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 06:39:50 ]
>>592 だから何?

594 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 06:44:36 ]
にしても
>>588>>589はひどいなww

595 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 07:06:34 ]
俺は断然


bool

596 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 08:34:21 ]
し、bool……?

597 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 09:30:43 ]
いやいやいや
void*

598 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 09:31:48 ]
√とかはC言語で使えないのでしょうか・・?
特殊相対性理論における時間の遅れ、運動してる物体の速度を入力することによって
運動してる物体の時間の刻みを出すプログラムを作りたのですが、・・C言語で√は使えないのでしょうか・・?


599 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 09:34:48 ]
>>598
確かに特殊相対論は中学生でも理解できるが、お前は別の勉強をした方がいいよ



600 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 09:35:15 ]
#include <math.h>


601 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 09:36:56 ]
あえて俺はLPVOIDと書く

602 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 09:43:28 ]
>>600-601
サンクス

603 名前:536 [2009/01/04(日) 10:55:21 ]
>>580
丁寧にありがとうございます。
しかによくわからない点があります。

>変数に & を付ける事によって得られるポインタの型は、
>元の変数の型に * をつけた形で表現する。

つまりこれで先ほどの例だと
int n; という宣言が先に必ずある
int *p = &n;    その上で、元の変数の型はint n よりint型であることがわかっているので
p の型はintにしないといけない。よって、nのアドレスが格納されているpは、
(元の変数の型)intに*をつけて int *pとあらわすということですよね。
しかしよくわからないのですが、p = &n; とint *p = &nの違いがわかりません
前者はpにはnのアドレスの値が入っている。
後者はpにはnのアドレスの値が入っているのではないのでしょうか?
前者だと先にint p; と宣言しておけばp はint型になるのでは?



604 名前:536 [2009/01/04(日) 10:57:59 ]
あと、もう1点ですが
>char *c = (char*)p;

int *p = &n;  としたのなら、
char*c = (char*)*p もしくはchar*c = (char)*p となるのではないのでしょうか?

605 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 11:04:19 ]
二段ダブルベット

606 名前:536 [2009/01/04(日) 11:10:16 ]
すみません、もうひとつ
先ほどの例の場合

int型をchar型にする利点というか意味がわからないのですが
サイズが異なる構造体をキャストしたら中身が全然違うのに型を変えるとか想像がつきません



607 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 11:13:34 ]
>>603
>>580ではないけど、
その日本語だと君がどこまで理解できたのかが分からない
材料は揃ってるようだから、手を動かしたほうがいいよ。

問題の値をそれぞれprintf()してどうなったか、
試すくらいはしてから再度の質問はするものだ


608 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 11:18:19 ]
型宣言の *と
演算子の*を混同している・・・・?

609 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 11:20:10 ]
C言語でおk



610 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 11:28:42 ]
>p の型はintにしないといけない。よって、nのアドレスが格納されているpは、
p の型は int へのポインタ型。

>しかしよくわからないのですが、p = &n; とint *p = &nの違いがわかりません
>前者だと先にint p; と宣言しておけばp はint型になるのでは?
int *p; と宣言してあれば両者はほぼ同じ。

int* っていうのは「int へのポインタ」っていう「型」だってのは OK?
ポインタと元の型はきちんと区別するべき。

>int *p = &n;  としたのなら、
>char*c = (char*)*p もしくはchar*c = (char)*p となるのではないのでしょうか?
c は char へのポインタ型。p は int へのポインタ型。*p は int 型。
(char*)*p だと int 型を char へのポインタという型に変換している(c と型は一致するが普通意味を持たない)。
(char)*p だと int 型を char 型へ変換している(c と型が違うのでコンパイルできない)。

>int型をchar型にする利点というか意味がわからないのですが
>サイズが異なる構造体をキャストしたら中身が全然違うのに型を変えるとか想像がつきません
int へのポインタ型を char へのポインタ型にしても大抵メリットはない。
sockaddr 型と sockaddr_in 型は >571 の通り sa_family の部分は共通しているので >557 の通り
sockaddr へのポインタ型を経由して sa_family を読み出し、AF_INET だったら実は sockaddr_in を指していたんだとして
キャストしてきちんと読み出すことができる。
つまり関数の引数の型としては sockaddr へのポインタ型としてまとめておいて、実際には sa_family に応じて
正しい型にキャストして使うことができる。

611 名前:536 [2009/01/04(日) 11:33:40 ]
int へのポインタ型。ってのがよくわからないのですが
一つのプログラムでintを宣言する変数なんてたくさんでてくるとおもうのですが、
この場合、intへのポイントとはどうなるのでしょうか?

612 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 11:43:30 ]
>536
キャストもポインタもないこのコードは理解できる?
sockaddr, sockaddr_in, connect() についても本質的にはこのコードみたいなことをしている(type が sa_family)。

#include <stdio.h>

struct Any
{
    enum { CHAR, INT, DOUBLE } type;
    union {
        char c;
        int n;
        double d;
    } u;
};

void print(struct Any a)
{
    if(a.type == CHAR) printf("%c\n", a.u.c);
    if(a.type == INT) printf("%d\n", a.u.n);
    if(a.type == DOUBLE) printf("%f\n", a.u.d);
}

int main(void) {
    struct A a;
    a.type = CHAR; a.u.c = '>'; print(a);
    a.type = INT; a.u.n = 536; print(a);
    return 0;
}

もっとも共用体が分かるなら最初っから理解できているような気もするけど。
分からなかったら余計混乱する気がするんで無視してくれ。

613 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 11:49:45 ]
>611
>一つのプログラムでintを宣言する変数なんてたくさんでてくるとおもうのですが、
>この場合、intへのポイントとはどうなるのでしょうか?
そうだね。だから色んな場所を指せるし、指し直したりできる。

char c1;
char c2;
int n;
char *p; /* どこも指してない */

p = &c1; /* c1 のアドレスを指す */
p = &c2; /* c2 のアドレスを指す */
p = (char*)&n; /* n は char型じゃないけどキャストして無理矢理 n の(先頭)アドレスを指す */

614 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:15:32 ]
麻雀は分かるか? 二盃口は七対子と見た目は同じだよね。

|二|二|三|三|四|四|七|七|八|八|九|九|發|發|
|萬|萬|萬|萬|萬|萬|索|索|索|索|索|索|  |  |

これを一盃口を1かたまりで解釈すると二盃口と解釈できるし、

|二|二|三|三|四|四|  |七|七|八|八|九|九|  |發|發|
|萬|萬|萬|萬|萬|萬|  |索|索|索|索|索|索|  |  |  |

全部対子で解釈すると七対子と解釈できる。

|二|二|  |三|三|  |四|四|  |七|七|  |八|八|  |九|九|  |發|發|
|萬|萬|  |萬|萬|  |萬|萬|  |索|索|  |索|索|  |索|索|  |  |  |

そして、別に役とか関係無しに単に牌が 14 個並んでいるだけだと解釈することもできる。

|二|  |二|  |三|  |三|  |四|  |四|  |七|  |七|  |八|  |八|  |九|  |九|  |發|  |發|
|萬|  |萬|  |萬|  |萬|  |萬|  |萬|  |索|  |索|  |索|  |索|  |索|  |索|  |  |  |  |

615 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:16:14 ]
ここで、1つの牌を1バイトと考え、
対子を2バイトの toitsu_t 型で、
一盃口を6バイトの ipeko_t 型で表せるとする。

役とは関係無しにただ牌が 14 個並んでいると解釈している時は手牌を

char tehai[14];

というただの char 配列で眺めているのに相当する。
二盃口と解釈している時は手牌を

struct ryanpeko_t {
 ipeko_t ipeko[2];
 toitsu_t toitsu;
};

という構造体だと見なして解釈しているのに相当する。
七対子と解釈している時は手牌を

struct chitoitsu_t {
 toitsu_t toitsu[7];
};

という構造体だと見なして解釈しているのに相当する。

616 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:16:36 ]
#include <iostream>
using namespace std;
#include <math.h>

void atai();
int main()
{
cout<<"こんにちわ。"<< endl;
atai();
return 0;
}
void atai()
{
double v;/*v=物体の速さ*/
double undou;/*運動する物体の時間の刻み*/
double c = 108000000;/*光の速さ*/
cout<<"物体の速さ入力:(km)";
cin>>v;
double ruto;
ruto = sqrt(1 / (1.0000000 - (v/c) * (v/c)));
undou = ruto;
cout<<"物体の時間の刻み"<<undou<<endl;
cout<<"静止している物体が1年間すごしている間"<<endl;
cout<<"運動している物体は"<<1 / ruto<<"年間過ごしてる"<<endl;

}

光の速さより大きい数字を入力すると-1.#INDと、表示されます・・


617 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:17:38 ]
役が成り立っているか脳内で判定してると思うが、
まあそういう役が成り立っているかを判定する関数があるとする。

int check_toitsu(const toitsu_t *toitsu);  /* ちゃんと対子として成り立っていれば 1 を、そうでなければ 0 を返す */
int check_ipeko(const ipeko_t *ipeko);   /* ちゃんと一盃口として成り立っていれば 1 を、そうでなければ 0 を返す */

これを使って ryanpeko_t 型の値が本当に二盃口として成り立っているのかをチェックする関数を作ると、こうなって、

int check_ryanpeko(const ryanpeko_t *ryanpeko) {
 return
  check_ipeko(&ryanpeko->ipeko[0]) &&
  check_ipeko(&ryanpeko->ipeko[1]) &&
  check_toitsu(&ryanpeko->toitsu);
}

chitoitsu_t 型の値が本当に七対子として成り立っているのかをチェックする関数を作ると、こうなる。

int check_chitoitsu(const chitoitsu_t *chitoitsu) {
 int i;
 for (i = 0; i < 7; i++)
  if (!check_toitsu(chitoitsu->toitsu[i]))
   return 0;
 return 1;
}

んで、手牌 tehai をこのチェック関数に渡すには、こんな感じになるわけだ。

if (check_ryanpeko((const ryanpeko_t*)&tehai))
 puts("二盃口として解釈可能です");

if (check_chitoitsu((const chitoitsu_t*)&tehai))
 puts("七対子として解釈可能です");

618 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:18:15 ]
>>616
負の値の平方根はできない

619 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:18:41 ]
とりあえず、「速さ」の単位は「km」じゃないよ。
ローレンツ変換の前に学ぶことがあると思うんだ。。





620 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:19:08 ]
割り込まれてしまったが、
>>614>>615>>617 の順で読んでくれ。

621 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:20:49 ]
すげーな、この流れは
ポインタFAQ用のテンプレとして、是非利用すべきだ
まったく読んでないけど

622 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:20:59 ]
>>616
#include <complex.h>


623 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:25:46 ]
>>619
cが時速なんで許容範囲のようだ

624 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:28:52 ]
年速じゃないの?

625 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:31:13 ]
>>619
ごめんなさい・・・

626 名前:536 [2009/01/04(日) 12:32:34 ]
>>610
sockaddrのほうはsa_family
inのほうはsin_family

共通してないきがするのですが、
キャストしても別に扱われるのでは?

627 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:36:00 ]
fopen_sとfclose関数を用いてファイルの読み書きするプログラムを作成しているのですが、
ファイルを新規に作成し書き込む場合に、
すでに同名のファイルが存在する場合や、ディレクトリーに書き込めない場合に
エラーを返すようにするにはどうすればよいでしょうか?


628 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:39:18 ]
>>624
c = 108000000なんで時速kmになってる

629 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:40:10 ]
char mem[sizeof(sockaddr)];
struct sockaddr *sad = (struct sockaddr *)mem;
struct sockaddr_in *sadi = (struct sockaddr_in *)mem;

とすると、
sad->sa_familyは、memの0バイト目からsizeof(u_short)バイト
sadi->sin_familyは、memの0バイト目からsizeof(short)バイト
の領域をその値とする。

呼び方が違うだけで、同じデータ。



630 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:48:45 ]
そもそも長さと速さの単位の違いを分かっているのだろうか。

631 名前:536 [2009/01/04(日) 12:50:08 ]
てことは、つまりsockaadr_inにあった各変数がキャストした型にあてはめられる?
struct sockaddrn{
u_short sa_family = sin_family;
char sa_data[2]; = short sin_port;
char sa_data[4]; = in_addr sin_addr;
char sa_data[4]; = sin_zero[8];
};

こういうことになるということでしょうか?
あと、sizeof(sockaddr)をするとなんでsockaddr_inのサイズもわかるのかわかりません。
これは、sockaddrとsockaddr_inの構造体のサイズが同じだから
別にsizeof(sockaddr_in)でもいいということかな

632 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:51:54 ]
こんな教えて君に付き合うなんて
おまえよっぽど暇なんだな
Cの入門書でも読んどけって、話はそれからだ
で済むと思うんだが

633 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:51:56 ]
にゃ〜ん

634 名前:536 [2009/01/04(日) 12:52:18 ]
>>617
麻雀はわからないのですが、*ryanpeko はどこをさしているのでしょうか?



635 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:52:54 ]
>>627
fopen_s()の戻り値で判断すればいいんじゃないの?

msdn.microsoft.com/ja-jp/library/z5hh6ee9(VS.80).aspx
msdn.microsoft.com/ja-jp/library/t3ayayh1(VS.80).aspx

636 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:53:22 ]
修正
#include <iostream>
using namespace std;
#include <math.h>
void atai();
int main()
{
cout<<"こんにちわ。"<< endl;
atai();
return 0;
}
void atai()
{

double v;/*v=物体の速さ*/
double undou;/*運動する物体の時間の刻み*/
double c = 1080000000;/*光の速さ*/
cout<<"物体の速さ入力:(km/h)";
cin>>v;
if(1 <= v && v <= 1080000000 ){
double ruto;
ruto = sqrt(1 / (1.0000000 - (v/c) * (v/c)));
undou = ruto;
cout<<"物体の時間の刻み"<<undou<<endl;
cout<<"静止している物体が1年間すごしている間"<<endl;
cout<<"運動している物体は"<<1 / ruto<<"年間過ごしてる"<<endl;
}
else{
cout<<"光の速さを超えることはできません"<<endl;}

}


637 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:54:01 ]
>>631
connect()のソース読めよ
話はそれからだ

638 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:54:32 ]
>>627
100% 完全な方法はないと思う。

1. "r" で開いて、開けたら fclose してエラーを返す。
2. "w+" で開いて、開けなかったらエラーを返す。
3. ファイルサイズが 0 でなければ fclose してエラーを返す。
4. "w" で freopen_s する。

がまだましな方法だとは思うが、
1 と 2 の僅かな間にサイズ 0 のファイルを作られたらチェックから漏れる。

639 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 12:56:13 ]
>>631
まあそんなところだ。
sizeof に関しては、sizeof (sockaddr) は危険。
sockaddr_in を渡しているのだから、sizeof (sockaddr_in) にすべき。



640 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:00:30 ]
>>636
vが光速より大きいと、v/cが1より大きくなる。そうすると(v/c) * (v/c)が1より大きくなる。
そうすると1.0000000 - (v/c) * (v/c)が負になる。そうすると1 / (1.0000000 - (v/c) * (v/c))が負になる。
そうするとsqrt()の引数が負になって定義域エラーになる。

641 名前:536 [2009/01/04(日) 13:02:42 ]
なるほど。>>631みたいな感じなのですか。
これだとなんとか理解できます。こんなめんどくさいことするのはconnectの決まりだからというわけですね。



642 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:05:20 ]
>>641
IP以外のプロトコルのアドレスも扱えるようにしてるんじゃないかな

643 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:12:24 ]
>>641,642
おや、話が半日前に戻ったぞw
進歩がないスレだな

644 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:13:54 ]
>>643
while(代入式)の人ですね?分かります

645 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:19:47 ]
while君と教えて君が出現するとスレが無駄に進む

646 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:21:50 ]
>>645
無駄だと思うならこのスレに来るなよ馬鹿

647 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:24:40 ]
いや進めよう、いざ進め
さあ、次の質問カマーーン!?

648 名前:536 [2009/01/04(日) 13:27:41 ]
char c1;
char c2;
int n;
char *p; /* どこも指してない */

p = (char*)&n; /* n は char型じゃないけどキャストして無理矢理 n の(先頭)アドレスを指す */


よく考えたらpはchar *pと宣言しているからpはchar型じゃないか
だったら キャストなんてしなくてもいいんじゃないの?
char *p
p = &n; で 

649 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:30:00 ]
while君もcast解らん君も
自ら試すということをしないところに共通点が。

>>644
オレはレベルの低い質問については回答側だよ。
どっちも実験しようとすれば5分で結果出るじゃん。
初心者歓迎のスレは別にあるのにこのスレの存在意義が
わかんね。



650 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:34:24 ]
>>648
ここでそんなことしても意味ないから。
コンパイラへの明確な指示と人間の可読性を考えて
ソースは書くんだよ。
> char *p
> p = &n;
それコンパイル通してみた?

gccなら-Wallつけて、コンパイラがどう言うかちゃんと
向き合いながら勉強しなよ。


651 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:34:34 ]
>>648
&nはint*型だから。
それを代入する先の変数pはそれとは異なるchar*型。
そのため、キャストして&nをchar*型にしてやらないといけない。

652 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:37:31 ]
教えたがりが殺到してわけわからなくなってるな。

653 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:44:33 ]
つーか、最近の2chは微温くなったもんだな。
俺の若いころは、ちょっとバカな質問すると
逝ってよし!
半年ROMれ
とか言われたもんだが

654 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:47:03 ]
ここは、二番目にバカな質問を受け付けるハコだからな。
一番は、宿題スレ

655 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 13:54:22 ]
>>654 thx
本当だ
初心者歓迎C/C++室の方がレベルが高いw

656 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:00:01 ]
宿題スレにだけは足を踏み入れる気がしない。

657 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:03:05 ]
宿題スレだってピンからキリまでだよ。
アホも多いけどレベル高い人もちゃんといる。

658 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:46:51 ]
>>649
> 自ら試す
コンパイラが通せば正しいとは限らないんだが・・・
それを指摘されてファビョったキチガイですね?分かります。

659 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:47:27 ]
もう秋田



660 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:50:27 ]
>>648
キャストしないとワーニングが出るよ


661 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:54:07 ]
>>658
正しい場合でもそれと分からないやつにはな・・・

662 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:56:08 ]
配列のサイズを指定せず、配列に数値を格納して行く度に
配列のサイズを増やしていく方法がわかりません
言語はC++です
このような事は可能なのでしょうか、また出来るなら
どのようにすればいいのかご教示願います

663 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:59:10 ]
>>662
std::vector か std::deque 使え。

664 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 14:59:24 ]
STLのvectorでresize()を使うのはいかがでしょうか?

665 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:00:06 ]
push_back や insert でいいだろ

666 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:04:32 ]
www.amazon.co.jp/iStudy-BB-Skills-C%E8%A8%80%E8%AA%9E%E3%83%97%E3%
83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%9F%BA%E7%A4%8
E-%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88P/dp/B00008V
CD1/ref=sr_1_3?ie=UTF8&s=software&qid=1231048974&sr=8-3
こいつで解決
これにて糸冬 了..._φ(゚∀゚ )

667 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:06:57 ]
>>666
URL長すぎ
書籍名を書け

668 名前:662 mailto:sage [2009/01/04(日) 15:07:08 ]
皆さんありがとうございました
これで詰んでた課題が進めそうです

669 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:07:59 ]
iStudy BB for IT Skills C言語プログラミング基礎 パーフェクトP



670 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:10:26 ]
>>666
amazon の URL を縮める方法も知らない奴は勘弁して欲しい。
www.amazon.co.jp/dp/B00008VCD1/

671 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:12:20 ]
>>670
今回だけは勘弁してやるから、URLの縮め方をここに書け

672 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:13:53 ]
>>671
>>666>>670 を見比べりゃ分かるだろ・・・。

673 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:15:26 ]
>>672
お前が分かるなら、お前がやり方を書け

674 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:17:24 ]
>>673
そうやって法則性を見つける努力を怠るからダメなんだよ。

675 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:18:18 ]
>>674
そんな無意味な煽りを書く暇があったら、さっさとやり方を書け

676 名前:URLの気持ち mailto:sage [2009/01/04(日) 15:18:27 ]
俺なんのために付属されたんだろう・・・orz

677 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:19:27 ]
>>675
そんな無意味な煽りを書く暇があったら、さっさとやり方を考えろ

678 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:20:23 ]
暇な奴って怖いなまで読んだ

679 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:20:31 ]
>>677
やり方は考えるものではなく、存在するものだ
解っているなら、さっさと書け



680 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:21:35 ]
>>679
やり方は存在するものではなく、考えるものだ
解らないなら、さっさと考えろ

681 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:21:50 ]
よーしパパがんばって教えちゃうぞー
って仕事の電話が
すまん今はダメのようだ

682 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:22:41 ]
よーしパパがんばってID出しちゃうぞー☆

683 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:23:27 ]
質問に答えない、無意味な質問スレッド

死ね

684 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:27:13 ]
教えて欲しいなら下手に出ろよw

685 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:29:06 ]
下手に出ても教えないけどな。
見りゃすぐ解る事を教える事ほど害悪なことは無い。

686 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:33:12 ]
ワカラン → 教えろカス → 嫌 → 氏ね
小学生ですね
わかります

687 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:34:01 ]
>>683
おめーに答える義務はねー

688 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:40:37 ]
3分LifeHacking:Amazonの長いURLを短縮表示する - ITmedia Biz.ID
www.itmedia.co.jp/bizid/articles/0805/13/news065.html

689 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:42:37 ]
>>684
死ね

>>685
死ね

>>686
死ね

>>687
死ね

>>688
ありがとう



690 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 15:43:20 ]
>>688
死ね

691 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:05:14 ]
www.amazon.co.jp/iStudy-BB-Skills-C%E8%A8%80%E8%AA%9E%E3%83%97%E3%
83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0%E5%9F%BA%E7%A4%8
E-%E3%83%91%E3%83%BC%E3%83%95%E3%82%A7%E3%82%AF%E3%83%88P/dp/B00008V
CD1/ref=sr_1_3?ie=UTF8&s=software&qid=1231048974&sr=8-3

www.amazon.co.jp/dp/B00008VCD1/

え?これの区別も一人で解決できないの?
辞めたほうがいいよ 君
てか こないで

692 名前:デフォルトの名無しさん [2009/01/04(日) 16:05:54 ]
void error(char * errormessage)
{
perror(errormessage);
exit(1);
}

error("エラーです")

これを実行するとエラーです と表示されますよね

でも、
void mputs(char *p)
{
while(*p);
printf("&c", *p);
p++;
}
printf("\n");
}

mputs("エラーです”);

前者と後者では表示される文字は同じですよね。
後者だと変数pが指定する領域を1バイトのchar型として、読み取るので1文字ずつループしていってますよね
でも前者だとそのようなループがないのに、1バイトのchar型として一度に全部の文字を表示しているって
おかしくないでしょうか?

693 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:10:46 ]
>>689
wktk.vip2ch.com/vipper0531.jpg

694 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:12:04 ]
>>692
先ず、Cでは文字列をどう表わすか知ってる?

695 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:12:55 ]
>>692
void perror( const char *string );
文字列の先頭のアドレスを指定します

何の問題もありません

696 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:14:58 ]
>>692
char *aiueo = "あいうえお";
myprint(aiueo);

void myprint(char *str)
{
 printf("%s\n", str);
}

何かおかしい?

697 名前:デフォルトの名無しさん [2009/01/04(日) 16:19:26 ]
>>696
ポインタ使う必要があるのでしょうか?

698 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:21:02 ]
>>697
それでは、逆にポインタを使わなければどうなるのでしょうか?

699 名前:デフォルトの名無しさん [2009/01/04(日) 16:21:48 ]
>>698
ポインタ使う場合は、下記の文になる
使わないとできない

void mputs(char *p)
{
while(*p);
printf("&c", *p);
p++;
}
printf("\n");
}

mputs("エラーです”);



700 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:31:26 ]
string aiueo("あいうえお");
myprint(aiueo);

void myprint(string str)
{
 cout << str << endl;
}

701 名前:デフォルトの名無しさん [2009/01/04(日) 16:38:39 ]
char *aiueo = "あいうえお";
myprint(aiueo);

void myprint(char *str)
{
 printf("%s\n", str);
}

変数aieuoに文字列 あいうえお を代入
char[0]にあ char[1]にい char[2]にう を入れる。
つまり、aiueoが指すアドレス領域はすべてchar型だと
で、aiueoを指定するとchar[0]のアドレスが得られる。
そのアドレスを引数にして関数に渡す。渡された関数でも同じことをし
str配列の中身を全て表示する

ということでしょうか

702 名前:デフォルトの名無しさん [2009/01/04(日) 16:40:35 ]
だとしたら、こんな文でするよりそっちでしたほうがいいってことですよね
こんな文は使い道ないということかな

void mputs(char *p)
{
while(*p);
printf("&c", *p);
p++;
}
printf("\n");
}

mputs("エラーです”);


703 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:43:37 ]
>>701
システムがメモリーを確保して、そこに"あいうえお"と言う文字列定数を配置。
その先頭アドレスをchar型へのポインタ変数aiueoに代入。

aiueoが示すのは"あいうえお"の先頭だけ。
ただし、コンパイラはaiueoを使うときには、char単位に操作することを知っている。(char *と宣言したから)

704 名前:デフォルトの名無しさん [2009/01/04(日) 16:48:13 ]
なんでaiueoには先頭アドレスしかはいってないのに
void myprint(char *str)
{
 printf("%s\n", str);
}
これで、全部表示されるかがわかりません。
引数としてmyprintに渡すのは先頭アドレス。
その先頭アドレスをchar *str でどう処理しているのでしょうか?

705 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:51:28 ]
>>704
Cの文字列について勉強するといいかも。

それから、↓の6.2を読んでみるとわかるかも。
www.kouno.jp/home/c_faq/c6.html

706 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 16:59:27 ]
こういうので、ネットでいちいち質問してたら効率悪すぎるよ。
適当な入門書でも読んでみたら?

707 名前:デフォルトの名無しさん [2009/01/04(日) 17:00:04 ]
ダメだ全然わからない
なんでポインタの文字を一気に表示できるんだ



708 名前:デフォルトの名無しさん [2009/01/04(日) 17:00:21 ]
>>706
独習Cよんでるがわからない

709 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:01:10 ]
文字列と配列 - 文字列 - C言語 入門
www.cppdrive.jp/cstart/string/index1.html



710 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:01:20 ]
そういうもんだって深く考えずに受け入れることも大事。

711 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:02:14 ]
>>707
ポインタの指してるとことから連続で並んでるからだろ。

712 名前:デフォルトの名無しさん [2009/01/04(日) 17:04:41 ]
なんで、*strじゃなくてstr

713 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:06:18 ]
>>704の疑問がすべて>>702に書かれているというのに…

714 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:12:21 ]
過去を振り返っては駄目です

715 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:13:26 ]
>>658
俺はwhile君じゃないよ。回答側と言っている
お前はここ来るまえに日本語からやりなおせ

716 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:14:36 ]
宿題スレと統合したら?
結局、皆さんのおかげで課題が進みそうってw

717 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:17:08 ]
宿題スレは課題丸投げ用

718 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:19:07 ]
宿題テンプレも埋めるのが面倒臭いから、こっちに投げてんだろ。
テンプレ強制になっても、他に飛び火するだけ。

719 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:23:15 ]
文字列を作成すると自動的に末尾に\0が付加される
char *str = "あいうえお"
とすると
正確には あいうえお\0となっている
ので先頭の str[0] のアドレスさえ分かっていれば
\0がくるか0がくるまで その内容は何かしらの意味を持った文字列だと認識する

自分でもやってるだろ?
デバッカで
char *str = "あいうえお";
の内容を見てみれば分かる



720 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:43:06 ]
>>719
わかりました。
\0が出てくるまでが文字列ということですね。

721 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 17:49:04 ]
>>640
非常に解りやすい!!!
サンクスです

722 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 18:20:00 ]
ウィンドウに貼り付けたプッシュボタンのWM_NCHITTESTメッセージをキャッチするには
サブクラス化するしかないのでしょうか?

723 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 18:49:02 ]
そうだね。

724 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 19:02:04 ]
今リスト構造やってるんですが、ポインタが非常に分かりづらい;
どなたかおすすめのポインタ解説サイト知ってましたら
教えていただけないでしょうか

725 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 19:33:56 ]
小数点のより右の数字だけを取る方法はないでしょうか?
x * y =200.1となったら0.1にしてしまうような

726 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 19:37:41 ]
z = x * y;
z = z - (int)z;

727 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 19:38:38 ]
>>726
ハイパーサンクス!!

728 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 19:38:45 ]
trunc

729 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 19:42:53 ]
>726 の方法だとzがintの範囲をオーバーフローしてるときにおかしくなるね




730 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 19:56:28 ]
それと負の数も考えて、floorつかえばいいさ

731 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 19:57:05 ]
floorじゃだめか負の数

732 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 19:58:39 ]
modf使えよカス

733 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 20:02:34 ]
倍精度でも仮数部が52bitだから
64bit整数型使えば精度的に大丈夫のはず

734 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 20:23:28 ]
だから0方向切り捨てなんだからtrunc一発で終わりなんだって

735 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 21:47:38 ]
クラスは分かったけど配列クラスで詰んだ…
他にも同じような人いそうだな…
またこれが使えるようになった人ってのはやっぱり
テキスト熟読してやっとの事で理解出来たんだろうか

736 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 21:50:54 ]
>735
「配列クラス」というのは何のことだ
vector等のことか、それともオブジェクトの配列なのか

737 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 22:26:27 ]
grwinで三角形を任意の角度回転させて表示するってのを作ってるんですが
三角形の中心を求めて原点に置き、回転させる方法が分かりません・・
どなたかご教授おねがいしまう

738 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 22:53:34 ]
>>737
教授なんかできるか。
1. ググれない事情がある。
2. それらしい解説ページは見つけたが、言葉の意味が解らない。
3. 意味は解るが、コードに落とせない。
どれだ?

739 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:06:20 ]
>>738
そんな書き込み要らないから



740 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:07:59 ]
>>737
三角形の中心って外心?
重心なら簡単なんだけど。

741 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:09:05 ]
高校の数学の教科書でも見直せばいいんじゃね?

742 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:26:06 ]
普通に考えて慣性モーメントが最低の軸、つまり重心を通る軸じゃね?

743 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:35:11 ]
なるほど。
でも軸なの?
重心を中心にして点対称に回転させるんじゃないの?

ともかく「三角形の中心」を決めないと。
内心?外心?垂心?重心?傍心?

744 名前:デフォルトの名無しさん mailto:sage [2009/01/04(日) 23:41:57 ]
中心が決まったら、あとは「アフィン変換」「回転行列」「クォータニオン」辺りで。

745 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 00:38:14 ]
>>737
>三角形の中心
中心は5つほどありますが、どれになさいますか

746 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 00:44:06 ]
傍心は中心じゃないだろw

747 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 00:48:56 ]
>>746

三角形の中心(さんかくけいのちゅうしん)とは、任意の三角形から一意的に求めることができる点の総称である。単に心または芯とも呼ばれる。

「五心」と呼ばれる点(内心・外心・重心・垂心・傍心)が一般的に広く知られている。


748 名前:デフォルトの名無しさん [2009/01/05(月) 00:59:00 ]
下の例のような文字列や小数などが入り混じったchar型の変数の配列があります。
これから小数だけを取り出してファイル出力したいのですが、何かいい方法はあるでしょうか?

char name[0]=frame
char name[1]=0.123  ←取り出したい
char name[2]=23
char name[3]=1.234  ←取り出したい

749 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 00:59:39 ]
まるちうぜえ



750 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 01:06:24 ]
>文字列や小数などが入り混じったchar型の変数の配列

751 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 01:19:51 ]
取り出す前に、どうやって入れたのか知りたい

752 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 01:27:54 ]
そうだな
小数入れる前に構造体にしてフラグ立てとけよカス

753 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 01:45:18 ]
for(int i = 0; i < 4; i++){
 if(name[i].isFloat())
  name[i].toFile();
}

754 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 02:49:45 ]
規格書高ぇ・・・

755 名前:デフォルトの名無しさん [2009/01/05(月) 06:54:50 ]
Unicode対応プログラムの作成練習してるけどしょっぱなからつまずいた…

#include<stdio.h>
#include<tchar.h>
#define _UNICODE
#define UNICODE

int main(void){

TCHAR uni[]=_T("UnicodeTest");

printf("%s\n",uni);
return 0;
}

上記のコードを実行するとUしか出力されません。原因はUの2バイト目が00なので
ヌル文字と勘違いしてしまうからだと予想しますがforで回すしか回避方法はないのでしょうか?

756 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 07:10:05 ]
つ wprintf


757 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 07:20:54 ]
TCHAR 使うんなら _tprintf だろ・・・。
それに、_UNICODE を定義するのなら tchar.h をインクルードする前っつーか、
プロジェクトファイルの設定をいじれ。
_MBCS が定義されてるかもしんないし、混乱の原因になる。

758 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 07:24:04 ]
(^ー゚)テヘッ

759 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 08:29:01 ]
か   わ   い   い



760 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 11:46:49 ]
>>754
X3010なら俺の上でアンアン言ってるぜ

761 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 13:15:32 ]
それ規格書じゃなくて魔導書じゃね?

762 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 20:33:37 ]
インデックスか

763 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 20:34:35 ]
vs2003を使っている者です。
ヘッダで構造体を
struct fff{
double a;
double b;
double c;
double d;
double e;
double f;
double g;
double h;
double i;
double j;
};

struct fff ggg[2]={
{0,0,0,0,0,0,0,0,0,0},
{0,0,0,0,0,0,0,0,0,0}
};

こういった形で宣言・初期化しているのですが、
double型のメンバの数を11個以上に増やすと、この構造体と全く関係のない処理でおかしな動きをしてしまうのです。
例えば、プログラム内で全く使われない、double型のメンバ数11以上の構造体を作ったとしても、どこかの演算に影響を及ぼしてしまうようです。
これは一つの構造体の大きさに上限があるということなのでしょうか?
また、これを解決し、多くのメンバを持つ構造体を宣言する方法などがあれば教えてください。

764 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 20:45:14 ]
>>762
イ、禁書目録?

765 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 20:53:17 ]
>>763
>ヘッダで構造体を宣言・初期化している
「そのヘッダをいろんなファイルで読み込んでいる」に500ガバス

766 名前:デフォルトの名無しさん [2009/01/05(月) 21:02:01 ]
>>756
>>757
サンクス

767 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:03:27 ]
レイテンシ

768 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:06:07 ]
>>763
メンバ数の上限がそんなに低いところにあるとは考えられない。何か勘違いをしていると思われ。
問題の再現する最小限のソースを貼りたまえ。

769 名前:デフォルトの名無しさん [2009/01/05(月) 21:08:49 ]
0x0040とは一体どういう意味なのでしょうか?

0xがつくから16進数かと思ってたけど違いますよね?

あとif文で、 変数 & 0x0040 == 0 とかいった文がありますが
これはどういう意味なのでしょうか?
この場合、変数には絶対0x0040のような値がはいるということでしょうか
また==0 で何を判定しているのでしょうか?

よろしくお願いいたします。



770 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:11:11 ]
テキストファイルを読み込み、行数を数えるプログラムを作れ(C言語)

との課題が出ました。
テキストファイルを読み込み配列(構造体で定義)に格納するところまでできたのですが

行数をカウントするプログラムがうまくいきません。

現在
char *strText(構造体で定義)

for (Count = 0; Count < TextVol(構造体で定義); i++) {
 if (strText[Count] == 0x0D) EnterCount++;
}

という感じです。
これだと
「abc□
 d□
 ef□
 g」
(□==改行)
という行は3行とカウントされてしまいます。(希望は4行)
ちなみにテキストファイルを読み込む関数と、カウントする関数は別で作れといわれています。

どうすれば最後

771 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:11:54 ]
> 0xがつくから16進数かと思ってたけど違いますよね?
まず、どうしてそう思うのか説明してくれ

772 名前:770 mailto:sage [2009/01/05(月) 21:12:06 ]
とぎれてしまいました

どうすれば最後の行が空でない場合カウントさせることができるでしょう?

773 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:13:30 ]
>>772
+1すればいいじゃん。

774 名前:770 mailto:sage [2009/01/05(月) 21:22:28 ]
>>773
その場合、
「abc□
 d□
 ef□
 g□

を5行とカウントしてしまいます。
空白行はカウントせずに最終行が空白行じゃない場合のみカウントさせたいのですが、いい方法はありませんか?

775 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:26:09 ]
>>769
0x0040は16進数で、10進数にすると64
>この場合、変数には絶対0x0040のような値がはいるということでしょうか
何も入りません
>また==0 で何を判定しているのでしょうか?
>よろしくお願いいたします。
面倒だからいやだ、以上

776 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:27:57 ]
>>775
文字コード あるいは アスキーコード
でググってみ

777 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:29:18 ]
>>765
>>768
先程いろいろ弄っていたら何故かこのバグが起きなくなってしまいました。
再現することすらできなくなってしまいました。
昨晩からずっと悩まされていた問題だったのに何故なんでしょう・・・
でもメンバ数を増やしただけで全く関係ないような演算におかしな結果が出たのは確かなんですよ

何はともあれ解決したので良かったです。助言ありがとうございました。

778 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:31:24 ]
>>773
行頭の1文字目が改行かどうかも判断したら良いんじゃね

ちょっと疑問なのは、最終行じゃなくて途中に空行があったらどうするつもり?


779 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:31:40 ]
>>774
最終行が空と言うか、改行で終わってるだけだから、
それを判定すれば・・・



780 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:32:15 ]
>>776
ただのビットフラグの判定がどう関係するんだ?

781 名前:770 mailto:sage [2009/01/05(月) 21:37:58 ]
>>778
すみません TextVol はテキストファイルの大きさなので、
ただいまのカタチですと「行の先頭」との比較ができません。
途中の空白行がカウントされるのは問題ありません。

>>779
現在ですと
「abc□
 d□
 ef□
 g□

が4行

「abc□
 d□
 ef□
 g」

が3行とカウントされてしまうのでソコをなおしたいです。

782 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:41:37 ]
>>780
すまん、0x0040だけみて文字の判定かと思った。

783 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:49:02 ]
>>781
改行文字の次の文字が、次の行の先頭だよ

784 名前:769 [2009/01/05(月) 21:50:51 ]
すみません、お願いします・・・

785 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:53:17 ]
>>781
ファイルの終端に改行文字が何文字連続してるか数えれば、
最後に空白行が何行あるかわかる

786 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 21:54:22 ]
>>781
そのforを抜けた後にcount番目の文字が改行文字でなければ1行増やす。

787 名前:785 mailto:sage [2009/01/05(月) 22:01:18 ]
言葉足りなかった

改行文字の数+1で空白行も含めた行数が分かる。
そこから最後の空白行だけ引けばいい

んで最後に空白行が何行あるかは785

788 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:01:24 ]
お前ら、Cの演算子の優先順記憶してるの?

789 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:04:34 ]
>>784
まず2進数⇔10進数⇔16進数の変換ができるようになれ
そしたら「C言語 ビットシフト」でぐぐれ



790 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:06:10 ]
ビットシフトじゃなくてビットフラグ

791 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:06:28 ]
>>788
時々一覧を見るよ。
基本的には、括弧とかで確実にするよ。

792 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:08:15 ]
>>788
可読性を上げるためにも括弧をつかいます

793 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:12:31 ]
>>785
>>787

参考にしてもう少し考えて見ます。ありがとうございます

>>786
あ、これでいけそうですね?やってみます。

794 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:33:48 ]
年初にあたり優先順記憶しようと思ったけど、サンプル数0/3(自分含む)という事で
無理そうだから止めたっと。

795 名前:デフォルトの名無しさん [2009/01/05(月) 22:34:22 ]
0x0001 & 0x1000 これの値は0 なのか、それとも0000000000000000 なのでしょうか?
また、同じく
0x1000 & 0x1000 の値は、0001000000000000なのか 1000000000000 どちらなのでしょうか?

796 名前:763 mailto:sage [2009/01/05(月) 22:44:31 ]
>>763,777ですが、結局また同じ問題が発生してしまいました。
今度は具体的に説明させてください。
今、ピンボールのプログラムをdirectX3Dを使って作っております。
下の構造体はある障害物の座標を表すもので、ヘッダに記述されているものです。
struct circle{
float x0;
float y0;
float x1;
float y1;
double angle;
float r;
float centx;
float centy;
}circle[]={
{-10,0,10,0,PI,0,0,0,0}
{0,0,0,0,0,0,0,0}
};
この中に新しくdouble qwerty(変数名は適当)を作ります。
そしてこの初期化部分でqwertyに0を代入します。
すると、「特定の壁の当たり判定が消えてボールがすり抜ける」という事態が起きてしまいます。
その壁の当たり判定というのはこの構造体とは全く関係のないものです。
次にdouble qwertyのdoubleをintに変えてみます。
すると、先程のバグは起きなくなります。

また、この上記の文をコピーして、構造体の名前を適当なものに変えます。
そして同様にdouble型のメンバを増やすと同じバグが発生してしまいます。プログラムで一切使われていない構造体なのにも関わらずです。

以上のことから考えると、構造体の大きさが原因で、「ある一定以上の大きさの構造体を宣言するとバグが発生する」ということになっているのではないかと思われます。
いったいこれはどういうことなのでしょうか?全く見当がつきません。

797 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:44:47 ]
>>795
君には早すぎるってのがわからんかな
ここで説明したところで理解できないよ
0と0000000000000000は同じ
0001000000000000と1000000000000も同じ

798 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:45:51 ]
どっちも同じじゃん。
普段 10 進数で 123 とか 372 とか言ってるけど、
それより上の桁は、実際には全て 0 で埋められているけど
単に省略して表現しているに過ぎない。

799 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:53:22 ]
>>796
無関係の配列やポインタを扱っている部分で
バグにより適切な領域を越えた所へと書き込んだり読み込んだりしている部分があり、
その領域がたまたま qwerty のあたりにあったんだろう。
そのあたりの値が常に 0 で初期化されている時のみ
たまたま変な事が起きているんだろう。

>「ある一定以上の大きさの構造体を宣言するとバグが発生する」
のではなく、
>「バグ持ちだが、qwerty がないとそれが目に見える形で現れない」
だけに過ぎない。



800 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 22:58:09 ]
>>796
circle[0]の初期化で、構造体の要素数をこえてしまってるけど、
初期化でミスってない?

つか、これってコンパイルできてるの?

801 名前:763 mailto:sage [2009/01/05(月) 23:05:40 ]
>>799
ということは、この構造体に問題があるのではなく、
「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。

>適切な領域を越えた所へと書き込んだり読み込んだりしている部分
適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?


>>800
宣言部分と初期化部分を分離して
struct circle circle[2]={
{-10,0,10,0,PI,0,0,0,0},
{0,0,0,0,0,0,0,0}
};
としても結果は同じでした。
>>796の記述でもコンパイルはできてます。

802 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:05:48 ]
>>796
だからオーバーフローしてんじゃねぇの?
それから、ヘッダでグローバル変数を宣言するのは勝手だが、externを使うような機構にしろ。
そんで何度も初期化されるような記述はやめろ。

DirectXとか以前に、C言語の基本だぞ。

803 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:10:34 ]
>>801
>ということは、この構造体に問題があるのではなく、
>「当たり判定が消えてしまう特定の壁」の方にあるということなのでしょうか。
その可能性もあるが、そうでない可能性もある。
バッファオーバーフローは全く予期しない所に影響を与えうるからな。

>適切な領域を越えたところを弄ってしまうというのは例えばどのような処理をしたときに起こるんですか?
int n[10];
if (n[100] == 0) {
 n[1000] = 9;
}
int a;
n[a] = 10;

804 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:12:18 ]
>>801
いや、言いたいのは
circleの要素はx0〜centyの8個でしょ
でも
circle[0]の初期化で9個の値を入れてるってこと


805 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:13:58 ]
適当に今サンプルコード書いただけなんじゃね?
普通要素多かったらコンパイル通らんだろ。

806 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:15:32 ]
バグとか以前の問題だな。

807 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:16:56 ]
>>805
>>796の書き方からして、コピペしたんじゃないかと思って。


808 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:20:49 ]
>>802
これが何度も初期化されるような記述だということがまずわかっていませんでした。
externでやってみます。


>>803
ありがとうございます。
ソースを確認してみます。


>>804
すいません、いろいろ弄っている途中だったのでコピペミスってしまいました
ちゃんと8個の値で初期化しても駄目でした。

809 名前:802 mailto:sage [2009/01/05(月) 23:24:35 ]
>>808
言い方がきつかったが、要は構造体を定義したヘッダファイル内でその変数も宣言・初期化するってことは、
そのヘッダファイルを読み込んだソースファイルの各々について宣言・初期化が行われるだろ?
ヘッダでそういう書き方をしてるってことは、そういうことが起こっているんじゃないかって思ったわけ。
断定的に書いちゃったけど、自分で確かめてみて。



810 名前:デフォルトの名無しさん mailto:sage [2009/01/05(月) 23:33:03 ]
>>809
なるほど。確かめてみます。
助言ありがとうございました。

811 名前:763 mailto:sage [2009/01/06(火) 00:24:28 ]
原因が見つかりました。
宣言した配列の大きさ以上の領域を弄っていたようです。
そこを直したところ解決しました。
みなさんありがとうございました。助かりました。

812 名前:デフォルトの名無しさん [2009/01/06(火) 00:43:17 ]
こちらで質問させて頂きます。
5年ほど、ACCESSのVBAでOracleやMySQLのDB操作を行い、
生産管理ツールなどを作成してきました。

そろそろ、C言語にも手を出してみようと思い、現在
C++Bilderか、VC++のどちらにしようか迷っています。
やりたいことは、ACCESSで言うフォーム上からDBのデータを表示したり、
進捗を入力したりしたいと思っています。
雑な質問で恐縮なのですが、C++Bilder2009とVC++では
どちらがとっつきやすいでしょうか?

813 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 00:50:03 ]
>>812
Bilderじゃね?

814 名前:813 mailto:sage [2009/01/06(火) 00:50:55 ]
>>813
Bilder?
Builderのことだな。

815 名前:812 mailto:sage [2009/01/06(火) 00:59:41 ]
すいません。Builderでしたね。。。
確かに、SQLServer使ってるわけでもないので、
VC++である必要もなさそうですね。

816 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:16:10 ]
「プログラマーは報酬さえ得ることが出来ればどんな事でもするって言うのか!」

817 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:27:03 ]
>>816
便所でも掃除する

818 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:27:51 ]
>>817
舌で

819 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 01:30:23 ]
>>818
報酬による



820 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 06:00:40 ]
>>819
ecx.images-amazon.com/images/I/5102gOf6cgL._SS500_.jpg
君の報酬はコレだ
働いてくれるな?

821 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 06:08:19 ]
>>820
実は表紙だけで、中身は普通のJIS X3010なんだろ?

822 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 06:11:07 ]
そっちのほうがよっぽどほしいわww

823 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 06:33:57 ]
>>821
それ、むしろ欲しいよ!

824 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 11:16:19 ]
なんでC言語なんて覚えてんだろ・・?

825 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 12:45:28 ]
2chブラウザ作りたいんですが、
他の2chブラウザって、書き込み処理とかは、ここのフォームを偽装して作ってるんですか?

826 名前:825 mailto:sage [2009/01/06(火) 12:48:43 ]
pc11.2ch.net/test/read.cgi/tech/1180406037/
ここに、

20 :デフォルトの名無しさん:2007/06/10(日) 21:26:21
まじめな話DATをダウンロードして表示して保管して
書き込みはbbs.cgiを呼んでやるだけでしょ大雑把に言って

って書いてましたが、そうなんですか?

827 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:03:52 ]
>>826
基本、そんな感じ。それにプラスするとしたら、画像表示、検索、あぼん、コテ管理、DAT管理、書き込み管理と言ったところか。
書き込みフォームは偽装するよりもオリジナルで作った方が使い易いと思われ。
あー、Cookieの管理とか板トップ表示なんかも必要か。

828 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:06:43 ]
>>825
こっちのほうが詳しいぞ。
pc11.2ch.net/test/read.cgi/tech/1224449899/

829 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:23:18 ]
暇でライブラリでも作ろうかと思ってるんで何かお題ください



830 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:26:49 ]
>>829
Cでスパイダーツール書くのに使えるヤツ

831 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:28:54 ]
スパイダーツールって何?

832 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:33:25 ]
>>831
こんな
www.amazon.co.jp/dp/4873111870

833 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 13:52:48 ]
なるほど
あんまり興味ないけど作って見ます


834 名前:デフォルトの名無しさん [2009/01/06(火) 22:25:03 ]
デバッグ作業でよく発見する間違いってどんなのでしょうか?

835 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 22:34:20 ]
>>834
コーディング段階で発見できない間違いの殆ど全て。

836 名前:デフォルトの名無しさん [2009/01/06(火) 22:42:28 ]
どういうのが発見できないのでしょうか?

837 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 22:43:50 ]
というか全部発見しようとするのがデバッグってもんじゃないかww

838 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 22:45:50 ]
仕様の誤解釈、typo、不注意、思い込み、&c...

839 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:06:11 ]
デバッガのバグとかも



840 名前:デフォルトの名無しさん mailto:sage [2009/01/06(火) 23:57:59 ]
>>834
配列とかポインタでアクセスしたらいけないところにアクセスしてるのが多い

841 名前:デフォルトの名無しさん [2009/01/07(水) 01:35:17 ]
C++(gcc4.1.2使っています)で、
下記のJAVAのように、
メソッド内で同一クラス内のメソッドを利用するにはどうしたらよいのでしょうか。

public class Greeting
{
public void sayHello()
{
this.hello();
}

private void hello()
{
System.out.println("Hello");
}

}

842 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 01:37:40 ]
this->hello();}

843 名前:デフォルトの名無しさん [2009/01/07(水) 01:43:30 ]
>>842
できました。ありがとうございます。

844 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:19:30 ]
質問です( VC++ 2008EE )
クラステンプレート使用時、staticなconstメンバ変数の定義でエラーになってしまいます。

<ヘッダー>
template <typename T>
class samp{
private:
T number;
static const double db;
public:
...
void disp() const { std::cout << "db = " << db << std::endl; }
};

<cpp>
template <typename T>
const double samp<T>::db = 1.35;

このクラスのオブジェクトを生成して disp() をコールすると
db の外部参照が未解決と出てしまいます。
どう修正すべきでしょうか?

845 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:29:20 ]
定義が無いもの、定義書けばいいだろ

846 名前:デフォルトの名無しさん mailto:sage [2009/01/07(水) 10:43:00 ]
VS2008で問題出ないけどなあ、それ。

847 名前:844 mailto:sage [2009/01/07(水) 11:00:00 ]
>>845
<cpp>での定義の事でしょうか?
const double samp<int>::db = 1.35;
const double samp<char>::db = 1.35;
とかやれば通るんですがテンプレートの意味ないですよね・・・

>>846
マジですか?!
クラスの宣言と定義だけなら通るんですが、main にて
samp<int> smp;
smp.disp(); // ここでエラー
になってしまいます






[ 新着レスの取得/表示 (agate) ] / [ 携帯版 ]

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

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