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

このエントリーをはてなブックマークに追加
1デフォルトの名無しさん
スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
2デフォルトの名無しさん:2006/12/30(土) 20:41:52
入門スレじゃいかんのか?
3デフォルトの名無しさん:2006/12/30(土) 22:24:21
早速質問なのですが
#define size 1000000

typedef struct SELL{
 int xp;
 int yp;
}SELL;

void main(void){
 SELL el[size];
}

見たいな事すると例えどんなにメインメモリが足りていたとしても動かないっぽいんですよ。
そこでmallocを使って必要な個数分だけメモリを確保したいと考えたのです。
構造体を
typedef struct SELL{
 int xp;
 int yp;
 int *next_p;
}
見たいに変更してnext_pに次のSELLを確保するようにしたらいいのではないかと思いました。

と思ったのはいいのですが実際にどのように記述したらいいのか分かりません。
mallocに関してはまったくの初心者ですがどうかボクに教えてくださいご主人様!!
43:2006/12/30(土) 22:31:42
早く教えてくださいです。
53:2006/12/30(土) 22:32:48
早く教えてくださいです。
6デフォルトの名無しさん:2006/12/31(日) 00:59:08
・・・。
7デフォルトの名無しさん:2006/12/31(日) 13:00:43
早く・・・早くぅ・・・。
8デフォルトの名無しさん:2006/12/31(日) 13:30:13
            ,ィ^i^iヽ
           '´レ´ ̄ `ヽ
           f iyl ノノノリ)))〉       / ̄ ̄ ̄ ̄ ̄
           ! iYl (i_[ [l |(        |
          i.lメjゝ" lフ/ ヽ        < ご主人様。早く教えてくださいです。
            ,イノ/ヽゝ/}、ヾ i       .|
         fド〈  }jlー》 〉ノリ         \_____
         i水i/ / 〉、_|ヽ \ __
          __ く_ゝ7i`ート、 くノ_ァ}
           {i_ュノ゙//   \
            , '´,/ i     __ヽ
        / /!  ` ー-‐' , -‐〉
        ,'   ,.-‐ ァ‐ -‐' \´
        ! !   / / |  ヽ ヽ
        i l   ,' /! !    )ノ
        ヽ^  , / .l l
             /`f《 !‐il
           ヽ ヽL `__、
9デフォルトの名無しさん:2006/12/31(日) 17:21:57
C/C++の質問スレ多すぎ
10デフォルトの名無しさん:2006/12/31(日) 20:46:24
C++の本を見ると、defineの代わりにconstを使えと書かれているのに、
コンパイラのヘッダファイルなどに大量のdefineが使われているのは何故ですか?
11デフォルトの名無しさん:2006/12/31(日) 22:22:48
>>10
見〜た〜な〜

あれほど見ないでくださいと言いましたのに〜。
今あなたの後ろに立っています・・・。
フフフフフ・・・・・・。
12デフォルトの名無しさん:2007/01/02(火) 09:44:52
C言語って何のヘッダもインクルードしなくても 
printf()とか使えるじゃないですか。 
それってコンパイラが暗黙の了解で何かしてるからなんですか? 
13デフォルトの名無しさん:2007/01/02(火) 09:51:45
>>12
??
printfは定義しなきゃ使えないでしょ?

ヘッダファイルってのはその定義を収めているに過ぎない。
14デフォルトの名無しさん:2007/01/02(火) 13:51:29
15デフォルトの名無しさん:2007/01/02(火) 14:01:24
>>13
ところが"C言語"では宣言しなくても printf が使えるんだな。
未宣言の関数コールは暗黙で int を返す引数チェックなしの関数とされるのな。
"C++言語"だと文法エラーではじかれるが...
まぁあまりいい習慣でないことは確かだ。
1613:2007/01/02(火) 15:13:33
>>15
ほんとだ。うちのgcc(cygwin)でも警告も出さずに通った。

これって処理系依存ではなく、Cの仕様?
だとしたら、今まで全然知らんかった。
17デフォルトの名無しさん:2007/01/02(火) 18:53:45
>>10
教科書的にはどれもこれも手放しで const マンセーしてるけど
実用的には define のほうが都合がいい場面があるのは確か。
例えば

#ifndef hoge
#define hoge ...
#endif

みたいなことをしておけばソースコードを変更せずに
コンパイル時にマクロを指定して動作を変更できる。
18デフォルトの名無しさん:2007/01/03(水) 00:28:59
>>17
それは正当な #define ディレクティブの使い方じゃない?

・defineの定数は、コンパイル時にリソースが無駄になる可能性がある (たぶんないけど)
・constの方が厳密な定義ができる。

ってことだと思うけど。
19デフォルトの名無しさん:2007/01/03(水) 00:31:11
printfの書式に対するデータって数値でもアドレスでもどっちでもOK?
20デフォルトの名無しさん:2007/01/03(水) 00:51:16
分かった
%dは数値だな
%Sはアドレス
か?
21のいまんさん:2007/01/03(水) 01:30:05
MFCで画像をウインドウの右側に移動させたいんですけど、どういうコード書けば良いですかね?
22デフォルトの名無しさん:2007/01/03(水) 04:05:02
char vp[sizeof(short)*10];
int i;
for(i=2;i<12;++i){
((short*)vp)[i-2]=i*i+i;
}
for(i=0;i<10;++i){
printf("((short*)vp)[%d] : %d\n",i,((short*)vp)[i]);
ポインタの粘土細工 by 冬房
23デフォルトの名無しさん:2007/01/03(水) 07:54:30
#define BUFFER_SIZE 256

static void Write(const char* comment, ...)const{
  char buf[BUFFER_SIZE];
  va_list ap;
  FILE* pFile;

  va_start(ap, comment);
  if(vsnprintf(buf, BUFFER_SIZE, comment, ap) < 0){
    return;
  }
  va_end(ap);

  pFile = fopen(LOG_FILE_NAME, "at");
  fprintf(pFile, "%s\n", buf);
  fclose(pFile);
}

こんなかんじのフォーマットを指定して書き込む関数があるのですが、
これをC++的に変更するとどうなるでしょう?
ofstreamを使うのかと思うのですが、引数リストの扱いがわからず困っています
24デフォルトの名無しさん:2007/01/03(水) 09:51:34
>>23
C++使うならファイルの書き込みと、コメント生成部分は別クラスにするべき
25デフォルトの名無しさん:2007/01/03(水) 10:00:58
すいません、上のはあくまで適当な例という事で。。。
質問の意図は「fopenと引数リストを使ったファイルへの書き込みを
C++チックに書くとどうなるのか?」ということなんです
曖昧な書き方をして申し訳ありません。
26デフォルトの名無しさん:2007/01/03(水) 10:27:27
可変長引数の部分はC++でも同じ。
ファイル出力部分をofstreamにすればよいと思います。
27デフォルトの名無しさん:2007/01/03(水) 10:28:48
>>25

つ「壊れていないものを直すな(弄るな)」

別になんか困ってることでもなきゃ無理に修正せんでもそのままでいんじゃね?
28デフォルトの名無しさん:2007/01/03(水) 12:57:28
そうですか…特に困ってはいないのでファイル出力部分だけ書き換えることにします

>>26-27ありがとうございました
29デフォルトの名無しさん:2007/01/03(水) 15:07:41
#include <fstream>
class Hoge {
public:
static std::ofstream Write;
};
static std::ofstream Hoge::Write(LOGFILE, std::ios::ate);
ateは追加出力を意味し、"a"相当、binaryを指定しなければテキストモードになる。textなどといった指定は無い。

前: Hoge::Write("Hoge: %d\n", 1);
後: Hoge::Write << "Hoge: " << 1 << std::endl;
3015:2007/01/04(木) 18:59:12
>>16
C言語の仕様。
ただ宣言はみんな明示的にしようということでC++では禁止になった。
31デフォルトの名無しさん:2007/01/05(金) 17:32:37
>>30
C++はCのスーパーセットだから、やっぱりOKなのですか?
32デフォルトの名無しさん:2007/01/05(金) 17:43:37
単に拡張しただけであってスーパーセットではない。
33デフォルトの名無しさん:2007/01/05(金) 17:45:15
31には30の3行目が見えないのだろうか。
34デフォルトの名無しさん:2007/01/05(金) 18:20:51
このまえC++のスレで15が嵐をしていたので、あぼーんせっていしてあります
35デフォルトの名無しさん:2007/01/05(金) 19:15:16
質問です。大学の後期の授業の後半でいきなりC++の話題になって、
その課題を冬休み中に解かなければならなくなりました。(プログラム
の知識ゼロ)それで、C++とSDKをインストして、設定後に
とりあえず先生自作のサンプルを実行させようとしたら、下の画像の
ような表示になってしまい、動きませんでした。
http://bebe.run.buttobi.net/up/src/be_1800.jpg.html
また、先生の授業でのスライドでは、新しいプロジェクト作成時に
win32プロジェクトと出るはずなのに、出ませんでした↓
http://bebe.run.buttobi.net/up/src/be_1801.jpg
何が原因かわからないのですが、どなたか教えて頂けませんでしょうか?
36デフォルトの名無しさん:2007/01/05(金) 19:45:09
先生に聞けばいいんじゃないかな
37デフォルトの名無しさん:2007/01/05(金) 20:02:45
>>36
冬休みは、あと三日です。
ちなみに、nwg.hというのは標準では入ってないんですよね?
38デフォルトの名無しさん:2007/01/05(金) 20:17:36
標準では無いと思うよ。
nwg.hって先生自作のファイルでしょ?
持ってないなら無理でしょ。
サンプルなんか放っておいて課題やれば?
39デフォルトの名無しさん:2007/01/05(金) 20:35:47
Cで√の入った計算式立てるときってどうしたらいいの?
40デフォルトの名無しさん:2007/01/05(金) 20:37:19
>>39
√の中を計算してからsqrt()関数でその平方根を計算
http://www.bohyoh.com/CandCPP/C/Library/sqrt.html
41デフォルトの名無しさん:2007/01/05(金) 20:46:05
>>40
√2
とかはどうやって扱ったらいいですか?
42デフォルトの名無しさん:2007/01/05(金) 21:01:52
>>41
double sqr2 = sqrt( 2.0f );
43デフォルトの名無しさん:2007/01/05(金) 21:10:39
>>42
ありがとうございます。
それヒントにがんばってみます
44ただ:2007/01/05(金) 21:20:36
Visual C++6.0 でアクセスに接続する方法が載っているサイトを教えてください。お願いします。
45デフォルトの名無しさん:2007/01/05(金) 21:57:29
>>44
マルチはやめてください。お願いします。
46デフォルトの名無しさん:2007/01/06(土) 09:45:14
>>42
×2.0f
○2.0
47デフォルトの名無しさん:2007/01/06(土) 11:37:47
exp(ix)を取り扱いたいんだけど、虚数単位を定義して〜てのはできないの?
いちいちsin,cosで書かなきゃ行けないの?
48デフォルトの名無しさん:2007/01/06(土) 11:41:18
http://72.14.235.104/search?q=cache:4sY05eC7e78J:www.uopmu.ees.osakafu-u.ac.jp/~yabu/soft/c-cal.html+C%2B%2B+%E8%A4%87%E7%B4%A0%E6%95%B0&hl=ja&ct=clnk&cd=3&lr=lang_ja&inlang=ja
等を参考にして、別々に書きだしてやれば行けそうですが、冗長で好ましくないと思います。
49デフォルトの名無しさん:2007/01/06(土) 11:44:22
連レスすまない。
最初の疑問はComplex環境下でexp(0,3)とすればexp3iになるのかな?
50デフォルトの名無しさん:2007/01/06(土) 13:40:43
>49
complex<double> A(0,3)
exp(A)
でおk。
51デフォルトの名無しさん:2007/01/06(土) 14:27:28
こんにちは。
フラグ処理のコードを書いています。
wire_ack_acquirememt_bus[object_numb][wire_wsr_num]
はwire_wsr_num行の中で一つだけアサートすることになっています。
ack_sender = flag_pick(wire_ack_acquirememt_bus[object_numb][wire_wsr_num], 1, SEND_ON_BUS);
で送信者がアサートさせているフラグを拾い、列番号object_numbをピックアップします。
後半コードでその列から若い列、古い列へフラグを埋めていきます(flag_fill(fill_data, fill_target, fill_width, fill_start_bit))。
VC++8でトレースして追ってみているのですが、挙動がおかしく、その問題点を探しているのですが、私には見つけることが出来ませんでした。
flag_pick()、flag_fill()も公開する必要があると思いますが、まずは下記のコードで分かることを教えていただけないでしょうか。
ff_event_check()はソースのアサートとネゲートイベントで1を返し続けます。
52デフォルトの名無しさん:2007/01/06(土) 14:28:37
>>51
/* ACKNOWLEDGE for ACQUIREMENT*/
i = 0;
sender_no_ack_acq_bus[wire_wsr_num] = 0;
for (wire_wsr_num=0; wire_wsr_num<WSRF_SIZE; wire_wsr_num++)
{
prev_sender_no_ack_acq_bus[wire_wsr_num] = sender_no_ack_acq_bus[wire_wsr_num];
for (object_numb=0; object_numb<SPACE_SIZE; object_numb++)
{
ack_sender = flag_pick(wire_ack_acquirememt_bus[object_numb][wire_wsr_num], 1, SEND_ON_BUS);
if (ack_sender == ASSERT)
{
sender_no_ack_acq_bus[wire_wsr_num] = object_numb;
i = i | ASSERT;
}
}

if (object_numb == SPACE_SIZE && i == NEGATE)
{
wire_reset = NEGATE;
sender_no_ack_acq_bus[wire_wsr_num] = prev_sender_no_ack_acq_bus[wire_wsr_num];
}
else
wire_reset = ASSERT;
53デフォルトの名無しさん:2007/01/06(土) 14:29:29
>>51続き
wire_temp_ack_acq_bus = flag_pick(wire_ack_acquirememt_bus[sender_no_ack_acq_bus[wire_wsr_num]][wire_wsr_num], 1, SEND_ON_BUS);
wire_event_temp_ack_acq_bus = ff_event_check(&ff_event_temp_ack_acq_bus, 0, &ff_event_holder_temp_ack_acq_bus, 0, wire_temp_ack_acq_bus, 0);
wire_event_temp_ack_bus_assert = wire_event_temp_ack_acq_bus & wire_temp_ack_acq_bus & 1;
wire_event_temp_ack_bus_negate = wire_event_temp_ack_acq_bus & ~wire_temp_ack_acq_bus & 1;

for (object_numb=sender_no_ack_acq_bus[wire_wsr_num]; object_numb>0; object_numb--)
{
wire_ack_acquirememt_bus[object_numb -1][wire_wsr_num] = flag_fill(wire_temp_ack_acq_bus & ~wire_event_temp_ack_bus_negate & wire_reset & 1, wire_ack_acquirememt_bus[object_numb][wire_wsr_num -1], 1, 0);
}

for (object_numb=sender_no_ack_acq_bus[wire_wsr_num]; object_numb<SPACE_SIZE-1; object_numb++)
{
wire_ack_acquirememt_bus[object_numb +1][wire_wsr_num] = flag_fill(wire_temp_ack_acq_bus & ~wire_event_temp_ack_bus_negate & wire_reset & 1, wire_ack_acquirememt_bus[object_numb][wire_wsr_num +1], 1, 0);
}
}
54デフォルトの名無しさん:2007/01/06(土) 15:10:15
>>49
exp(complex<double>(0, 3))
5549:2007/01/06(土) 18:38:24
>50
あほかwそんな長ったらしい書き方するかよw

>54
できた。ありがと。
56デフォルトの名無しさん:2007/01/08(月) 06:03:06
【ネガティブ派遣根性チェック】

3つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。

□偽装派遣先の社員の意見にはたとえ間違っていても反対しない
□偽装派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣/受託の差異を指摘する人間はムカつく
□偽装派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□偽装派遣先社員より自分の生涯収入が低いのは当然だ
□偽装派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ
□今のプロジェクトが終わっても同じ偽装派遣先に常駐したい
57デフォルトの名無しさん:2007/01/08(月) 06:46:39
はい、俺負け組決定!!
きっと本当の人生は来世!!
いや、人間じゃなくて鯨あたりになって、海を悠々自適にすごすのも良いな〜
ってことは、グリーンピース応援しなきゃ。
ビフィズス菌で、胃腸で大活躍ってのも悪くないな。

あー早くポックリいかねぇかな。
親が死んだ後、雷あたりにぶち当たっておっちぬのがベストなんだけどな〜・・・
58デフォルトの名無しさん:2007/01/08(月) 12:07:01
なんで「偽装」なの?
59デフォルトの名無しさん:2007/01/08(月) 12:29:15
>>58
派遣元は「うちはプロです」と言っておきながら現実には昨日今日入社したばかりの
偽装派遣先に常駐させ、派遣先社員の指示の下で働かせる実質アルバイト派遣業だから
60デフォルトの名無しさん:2007/01/08(月) 12:41:10
>>59
あんた馬鹿でしょw
61デフォルトの名無しさん:2007/01/08(月) 17:33:41
ワロタ
62デフォルトの名無しさん:2007/01/08(月) 19:59:00
すれ立てるまでもない質問はここでスレが無いのでここで聞きますが
オープンソースのSNSって何がありますかね?
開発言語別で教えて頂けませんでしょうか?
でも、失礼なのでC++でのオープンソースSNSだけでも教えて頂ければと思います
63デフォルトの名無しさん:2007/01/08(月) 20:01:56
webprog逝ったほうがいいよ
64デフォルトの名無しさん:2007/01/08(月) 21:15:49
黄色い「独習C」って本やったことある人いますか?
あの本をマスターするとどれくらいのソフトが作れるようになるんですか?
65デフォルトの名無しさん:2007/01/08(月) 21:20:54
>>64
3つくらい
66デフォルトの名無しさん:2007/01/09(火) 11:38:54
MAME32をジョイスティックで動かすことをしたいのですが
keybd_eventをつかっても動きません
メモ帳で試してみたら、動きました

何か他の方法があるのでしょうか
67デフォルトの名無しさん:2007/01/09(火) 13:05:08
constとstatic constの違いを教えてください
68デフォルトの名無しさん:2007/01/09(火) 13:23:27
>>67
staticがつくかつかないかです。
69デフォルトの名無しさん:2007/01/09(火) 13:24:44
>>67
それが何を修飾しているかによって異なります。
70デフォルトの名無しさん:2007/01/09(火) 13:25:27
>>67
Cですか? それともC++ですか?
71デフォルトの名無しさん:2007/01/09(火) 13:31:14
C++です。修飾しているのはintやdoubleです。
72デフォルトの名無しさん:2007/01/09(火) 13:41:45
前者は定数で後者は静的な定数です。
73デフォルトの名無しさん:2007/01/09(火) 16:40:21
整数リテラル0が何故、8進リテラルになるのかが分かりません。教えて下さい。
74デフォルトの名無しさん:2007/01/09(火) 16:51:00
スレタイがエロ過ぎると思います。どうにかしてください。
75デフォルトの名無しさん:2007/01/09(火) 16:57:09
>>73
0で始まる数値は8進リテラルと決められているからです。
従って、10進リテラルで0を表現することは(事実上)できません。
76デフォルトの名無しさん:2007/01/09(火) 20:00:12
じゃ1-1で
77デフォルトの名無しさん:2007/01/10(水) 04:38:30
>>73
0でも
00でも
0x0でも
意味は一緒だから気にすんな
78デフォルトの名無しさん:2007/01/10(水) 05:34:56
0AUと0nmは同じ長さ
79デフォルトの名無しさん:2007/01/10(水) 07:32:12
>>77
意味は違います。同じように使えるだけです。

>>78
工学屋から言わせれば、精度が違う。
80デフォルトの名無しさん:2007/01/10(水) 17:57:07
int _tmain()
{
for(int n=0;n<=10;n++){
for(int i=0;i<=10;i++){
cout<<n<<" "<<i<<endl;}
cout<<n<<" "<<i<<endl;}
}

とするとiが0から11まで出力されます。10じゃないのかな?なんでだろ。
81デフォルトの名無しさん:2007/01/10(水) 18:00:31
あげわすれました。よろしくお願いいたします。
82デフォルトの名無しさん:2007/01/10(水) 18:02:24
>>80
<=以下
<未満
83デフォルトの名無しさん:2007/01/10(水) 18:09:20
それは大丈夫です。>80式を動かすとnについては0-10までなのですがiが0-11となってしまいます。
for構文だからi=10のときはi<=10を満たすので「cout<<n<<" "<<i<<endl;」を実行しこのときiは10となります。
その次にiを++するのでi=11となりi<=10を満たさなくなるので、i=11が出力されるはずがないと思ったのです。
なんでなんでしょうか。
84デフォルトの名無しさん:2007/01/10(水) 18:11:51
n  i
0  1
0  2
・・・
0  9
0  10
0  11

・・・

10  1
・・・
10  10
10  11

となります。変だと思うのです。
85デフォルトの名無しさん:2007/01/10(水) 18:19:16
>>84
2行目の
>cout<<n<<" "<<i<<endl;} 
が余計だろう。ここのi は既に内側のforのスコープから外れてるぞ。
86デフォルトの名無しさん:2007/01/10(水) 18:21:13
>>80式を動かすとnについては0-10までなのですがiが0-11となってしまいます。
>>84の実行例はiは1-11になってるように見えるが?
>>80で書いたコードと>>84で実行してるコードは違うだろ?
87デフォルトの名無しさん:2007/01/10(水) 18:31:57
[完成]
int _tmain()
{
for(n=0;n<=10;n++){
for(i=0;i<=10;i++){
cout<<n<<" "<<i<<endl;}
//cout<<n<<" "<<endl;
}
}

[原因]
指摘をもとに2行目を削除したところ正しく出力されました。ありがとうございました。

[謝辞]
>85
ご指摘の通りでした。2行目が必要だと思っていましたが、実際には不要なものだったのですね。
>86
申し訳ないです。慌てていて>84でiが0の場合が抜けています。

みなさま迅速なご指導ありがとうございました。これで数時間悩んでいてほとほと困っていましたが
解決することが出来ました。

[結果]
n  i
0  0
・・・
0  9
0  10
・・・
10  1
・・・
10  10
88デフォルトの名無しさん:2007/01/11(木) 19:05:47
Cのprintfにて文字色を変えて表示させたいのですが
\033[31m のような指定では無く
RGB指定で細かくして表示させたいのですが
そのようなことは可能でしょうか?
89デフォルトの名無しさん:2007/01/11(木) 19:38:08
世の中そういうことができる環境があるかもしれない。
或いは自分で作ればそういうことだってできるだろう。
90よろおね:2007/01/11(木) 22:27:20
知人からソースを貰いました。
コンパイルしようとしたら

$ gcc main.c
main.c:6:19: stdio.h: No such file or directory
main.c:7:20: string.h: No such file or directory
main.c:8:20: stdlib.h: No such file or directory

となりました。
「stdio.h, string.h stdlib.h も寄越せ ゴルラ!」と言って一週間。
未だに貰えません。
どうしたらいいでしょう?
91デフォルトの名無しさん:2007/01/11(木) 23:03:48
明らかにあなたのビルド環境が異常です
92デフォルトの名無しさん:2007/01/11(木) 23:07:36
>>90
stdio.h, string.h stdlib.hは知人から貰うようなものじゃない。
コンパイラをダウンロード・インストールすれば付いてくるもの。
環境さえまともに整えられないのか?
93デフォルトの名無しさん:2007/01/11(木) 23:14:02
知人も在る場所知らない希瓦斯
94デフォルトの名無しさん:2007/01/11(木) 23:16:11
ワロス.なんでgccがあってstdio.hがねーんだよ(w
ホラヨ(w
つ http://ftp.gnu.org/gnu/glibc/glibc-2.5.tar.gz
95デフォルトの名無しさん:2007/01/11(木) 23:18:11
どうせ
#include "stdio.h"
とか書いちゃってるオチだろ。
96デフォルトの名無しさん:2007/01/11(木) 23:20:47
>>95
その場合も、見付からなければ<stdio.h>と書いたのと同じ方法でヘッダを探すことになっており、
gccもそれに則っているから問題ない。
97デフォルトの名無しさん:2007/01/12(金) 11:35:58
↓このあと、>95 の「釣れた」宣言
98偽95:2007/01/12(金) 15:21:42
Fish On!!
かかったかかったーー!!
ん?あっれぇ〜
根掛かりだ〜
99デフォルトの名無しさん:2007/01/12(金) 16:08:14
わらたw
100デフォルトの名無しさん:2007/01/12(金) 16:58:50
>>98=99
かわいそす
101デフォルトの名無しさん:2007/01/13(土) 14:28:22
Microsoft Visual C++ 2005
で.cppのファイル開いてもビルトがでない。
どーやってコンパイルすればいいの!!
102デフォルトの名無しさん:2007/01/13(土) 16:07:57
                ‖
           ___  ‖
       /    `ヽ‖
      ,:'      、ゑ
     ,'    ;  i  八、
     |,! 、 ,! |  ,' ,〃ヽ!;、
      |!| l川 l リへ'==二二ト、
     リ川 !| i′  ゙、    ', ',
     lルl ||,レ′   ヽ   ,ノ ,〉
       |川'、  ,,.,.r'"    ,,ン゙
        `T"  ! ,/ '.ノ,/|
         /   ,!´ !゙ヾ{ |
          /   ,'   i ゙ ! ,l゙
      ,r‐'ヽ-、!   ',  l|
      {    `ヽ   !  「゙フ
      ,>┬―/   ;  i,`{
     / /リ川'        ', ゙、
    / ,/            ゙、 ゙、
   ノ  /           ', `、
   \_/   ;          ゙、ヽ、
    l__   !        ___〕 ,、l
       ̄`‐┬―r┬‐r'´ `'‐'′
           |  .! |  |
           |  | .|  |
103偽95:2007/01/13(土) 16:09:17
新規作成→新しいプロジェクト→特にソリューションディレクトリが必要なければチェック消す
→プロジェクト名(好きな名前で結構)[OKを押せば勝手に指定した場所の所にプロジェクトフォルダが出来る]
→OKを押して次を押す→windowsアプリケーションじゃないならプリコンパイル済みヘッダーのチェックを消す
→コンソールアプリケーションチェック、空のプロジェクトチェック、そんで完了押す
→左のソースファイルフォルダ右クリック新しい項目追加
→C++ファイルを選んで名前を付けて追加(C言語なら拡張子を.cにする)
→ソース書いてコンパイルしてビルドしてデバッグなしで開始(デバッグするならデバッグで)
104デフォルトの名無しさん:2007/01/13(土) 21:06:16
C++で文字列の先頭から、途中までの文字列が一致するか否かを判定する関数は
ありますか?
EX:
比較文字列  2ch

比較対象文字列(一致)
2ch close

比較対象文字列(不一致)
3ch open
こんな感じで判定できるような関数なのですが・・・・・?

Windows2000
VS2005 SDK
105デフォルトの名無しさん:2007/01/13(土) 22:03:36
string
106デフォルトの名無しさん:2007/01/13(土) 22:52:02
不可解なエラーに悩まされています。
原因はどの辺りにあるかわかりますか?

たとえば、グローバルで定義したint a、int bがあるとして、
プログラム中でa++したときに、なぜかbも一緒に++されてしまう。
aをaaaに変更してみたりその他の関係のない変数の変数名を変更してみたり、
int a=0;と定義するとエラーが出なくなることもある。
しばらくコーディングを進めると今度は違う変数同士が干渉し始める。

どの辺りに起因して同じ領域に違う変数が割り当てられてしまうのか、見当もつきません。

WinXP
gcc(cygwin)
107デフォルトの名無しさん:2007/01/13(土) 23:27:22
>>106
gccなんてクソコンパイラ使ってるからだよ。m9(^Д^) プギャー
108デフォルトの名無しさん:2007/01/13(土) 23:36:02
>>106
m9(^Д^) プギャー
109デフォルトの名無しさん:2007/01/13(土) 23:37:55
>>106
よくわからんで作ってることが原因だな
110106:2007/01/13(土) 23:48:16
>>109
わかりました。基本から出直してきます。
ご返答ありがとうございました。
111デフォルトの名無しさん:2007/01/14(日) 00:00:46
&b(a);
とか?
112デフォルトの名無しさん:2007/01/14(日) 13:25:42
doubleの要素型で、要素数が5の配列の全要素に0.0を代入して表示するプログラムが分かりません。教えて下さい。C++です。
113デフォルトの名無しさん:2007/01/14(日) 14:06:06
#include <iostream>

int main()
{
  double d[5] = {0.0};
  for(int i = 0; i < 5; i++)
    std::cout << i << " : " << d[i] << std::endl;
  return 0;
}
114デフォルトの名無しさん:2007/01/14(日) 15:00:16
>>113
ありがとうございます!けど実行すると、0が表示されてしまいます....
115デフォルトの名無しさん:2007/01/14(日) 15:06:08
確認のために0を表示するように書かれているからだ。
116デフォルトの名無しさん:2007/01/14(日) 15:06:50
0というより、0になった配列の各要素と言うべきだな。
117デフォルトの名無しさん:2007/01/14(日) 16:12:23
0 じゃなくて 0.0 を表示したいのではないかと esp
118デフォルトの名無しさん:2007/01/14(日) 16:15:03
ほれ

#include <stdio.h>

int main()
{
double d[5] = {0.0};
for(int i = 0; i < 5; i++){
printf("%.1lf\n", d);
}
return 0;
}
119デフォルトの名無しさん:2007/01/14(日) 16:52:50
>>117
そうです。

>>118
すいません。それはC++の場合はどうすればいいんでしょうか?
120デフォルトの名無しさん:2007/01/14(日) 16:57:39
#include <cstdio> 

int main() 

double d[5] = {0.0}; 
for(int i = 0; i < 5; i++){ 
printf("%.1lf\n", d); 

return 0; 


121デフォルトの名無しさん:2007/01/14(日) 16:58:12
>>120
ありがとうございます。
122デフォルトの名無しさん:2007/01/14(日) 17:08:17
d[i]
123デフォルトの名無しさん:2007/01/14(日) 17:44:48
Cプラプラで0.0から1.0まで0.001おきに、その値と、その値の2乗を表示するプログラムって、どう作ればいいんですか?
124デフォルトの名無しさん:2007/01/14(日) 17:48:56
>>123
まずはC++のコンパイラを入手し、お前が使ってるPCにインストールする。
125デフォルトの名無しさん:2007/01/14(日) 20:08:02
C++なら_asmが使えるからアセンブリで書いてやろうと思ったけどやめた
126デフォルトの名無しさん:2007/01/14(日) 22:47:07
int data[10]={0};//dataの中身を全部0で初期化
これをクラスで記述する方法ってあるんでしょうか
struct a{
int data[10];
a():??{}
};
127デフォルトの名無しさん:2007/01/14(日) 23:44:50
a() : data() {}でできない?
できないならおとなしく、コンストラクタのブロックの中でstd::fillでもするしかないな。
128デフォルトの名無しさん:2007/01/15(月) 00:37:06
>>127
出来ました!こんな書き方があったとは
ありがとう
129デフォルトの名無しさん:2007/01/15(月) 04:20:32
画像のピクセルサイズを取得したいのですが
どうすれば取得できますか?
130デフォルトの名無しさん:2007/01/15(月) 09:05:21
画像ファイルの構造を知る
131デフォルトの名無しさん:2007/01/15(月) 15:38:57
男ならwaveだろうがbmpだろうが黙ってバイナリfstream
132デフォルトの名無しさん:2007/01/15(月) 18:29:29
>>129
BITMAPINFOを足がかりに
133Cはできた(過去形)人:2007/01/15(月) 18:29:34
BorandC++を使ってるんですが・・・        <iostream>ファイルをオープンできません      とでてコンパイルできません・・・          いったいどうすれば・・・
134デフォルトの名無しさん:2007/01/15(月) 18:34:02
>>133
お前じゃどうしようもないから諦めろ
135デフォルトの名無しさん:2007/01/15(月) 18:46:29
>>133
普通にググったら見落としに気づくかもよ。
136デフォルトの名無しさん:2007/01/15(月) 18:54:30
分割コンパイルしたオブジェクトファイルをmain.oも含めて静的ライブラリに
まとめた場合、一般にそのライブラリのみで実行ファイルをビルドすることは
できるのでしょうか?
GCCだとできたのですがVCやBCCだとどうなんでしょう?
libfoo.aがmain.o, hoge.oで構成されている場合、GCCの例だと
gcc -o exefile libfoo.a
でexefileという実行形式を作成できました。
137デフォルトの名無しさん:2007/01/15(月) 18:57:51
256*256の二次元配列を作りたいのですが、実行するとStack overflowとでてしまいます。
どうにか回避する方法はないでしょうか?
138デフォルトの名無しさん:2007/01/15(月) 19:06:23
>>137
ヒープに割り当てる
139デフォルトの名無しさん:2007/01/15(月) 19:10:57
mainを含んだ静的ライブラリってのは、
Win32のスクリーンセーバライブラリがそんな感じだな。
140137:2007/01/15(月) 19:36:29
>>138
すみません。
ヒープに割り当てる方法を教えてください。
141136:2007/01/15(月) 19:39:26
今vc8で試してみたのですができませんでした。
具体的には
cl /EHsc /c main.cpp lib.cpp
lib /out:library.lib main.obj lib.obj
cl /Feout library.lib
out.objが開けないとエラーがでてしまいます。
142デフォルトの名無しさん:2007/01/15(月) 19:46:55
>>140
ヒープに割り当てるというのはmalloc(Cの場合)やnew(C++)などで
動的にメモリを確保することです。
あとは調べればわかるかと思います。
143デフォルトの名無しさん:2007/01/15(月) 21:39:29
>>141
できたぞ。
cl /EHsc /Zl /c test.cpp
lib /out:hoge.lib test.obj
link /machine:x86 /entry:mainCRTStartup /out:HOGE.EXE msvcrt.lib hoge.lib
/entryの代わりに/subsystem:consoleでもうまくいった。
またcl経由でリンカを呼び出してもできる。
cl /MD hoge.lib /link msvcrt.lib /machine:x86 /subsystem:console
いずれにしてもLNK4001(オブジェクトファイルがない)という警告が出る。
144デフォルトの名無しさん:2007/01/16(火) 15:11:25
http://home.hiroshima-u.ac.jp/~m052291/sdk/index.cgi?event=view&num=246
どこでなにやってるか全然ワカランので、中盤以降に説明つけてください!
あともう少し素人が作ったっぽくなりませんか?
145デフォルトの名無しさん:2007/01/16(火) 16:04:06
>>144
それだけ素人丸出しなら充分だと思うが。
146デフォルトの名無しさん:2007/01/16(火) 22:33:51
Windows上で動くプログラムには仮想メモリが割り当てられてて
プログラムからは仮想メモリしか見えないんだよね?
じゃあメモリエディタってどうやってんの?
147デフォルトの名無しさん:2007/01/16(火) 22:50:39
適切な権限さえあればよそのプロセスのメモリだって読み書きできる(真っ先に思い浮かぶのはデバッグ用途)。
大抵は権限の設定なんてやっていないから、同じユーザのプロセスならだいたい読み書きできると思っていい。
148デフォルトの名無しさん:2007/01/17(水) 00:14:54
Windowsカーネルは全部の仮想メモリを知ってるから、
API叩いて教えてもらうんだよ。
149デフォルトの名無しさん:2007/01/17(水) 11:27:50
実際に物理的なメモリを書き換えているとは限らない
ひょっとするとあなたの書き換えた場所はディスク上の一部かも知れない

150デフォルトの名無しさん:2007/01/21(日) 00:10:28
質問なんですが、C++の問題集でお勧めなのはないでしょうか?
参考にしたいのでお願いします。
151デフォルトの名無しさん:2007/01/21(日) 03:22:51
152デフォルトの名無しさん:2007/01/21(日) 13:53:15
>>151
ワロタ
153デフォルトの名無しさん:2007/01/22(月) 12:08:48
Cの経験が少しあってC++をはじめた者です。
憂鬱なプログラマのためのオブジェクト指向開発講座(第2部第5章p116)で、
「コンストラクタを使って、定数メンバの初期化を行うことができます」
と書いてありました。定数の初期化って、定数はあらかじめ
定義されているものだと思うんですけど、
どういうことでしょう?
154デフォルトの名無しさん:2007/01/22(月) 12:21:08
定数メンバと定数は違うだろ
155デフォルトの名無しさん:2007/01/22(月) 15:25:31
static const double a=1;
じゃだめなのですか?
156デフォルトの名無しさん:2007/01/22(月) 16:04:03
153は非静的メンバの話だと思う。
157デフォルトの名無しさん:2007/01/22(月) 17:09:46
>>154
>定数メンバと定数は違うだろ
定数って
const int a;
とかですか?

158デフォルトの名無しさん:2007/01/22(月) 17:29:36
憂鬱本↓

メンバ初期化の方法はLIST6のように考えるのが普通でしょう.
確かにこのように書くことは可能です.・・・しかし,これは進められる書き方ではありません.なぜならば,これでは定数のデータメンバを初期化することができないからです.
クラスのメンバデータには定数も使用することができます.その初期化を行うのも当然コンストラクタということになるでしょう.しかし,コンストラクタとはいえ,やはり関数です.その中で定数を書き換えることはやはりできません.
さてそれでは,別の方法で定数メンバを初期化することは出来るのでしょうか.そのような特別な方法が用意されているのでしょうか.
これはそのような方法が存在します.C++では,コンストラクタがメンバを初期化するために新しい構文が設けられています.メンバの初期化はLIST7のように行います.

159デフォルトの名無しさん:2007/01/22(月) 17:31:59
LIST6:データメンバの初期化

Person :: Person () // コンストラクタの実装部
{
age = 0 ; // 年齢の初期化
name = NULL ; // ポインタの初期化
} // しかしこの方法は薦められない!

LIST7:コンストラクタでのメンバ初期化

Person :: Person ()
: age ( 0 ) , name ( NULL ) // 正しい方法
{
// 何もしない
}
160デフォルトの名無しさん:2007/01/22(月) 18:25:26
  _, ._
(;゚ Д゚) …?
161デフォルトの名無しさん:2007/01/22(月) 18:38:24
新版も出たことだし、Effective C++ くらい買いなさい。
162デフォルトの名無しさん:2007/01/22(月) 19:07:38
>>158
>これはそのような方法が存在します
日本語でおk
163デフォルトの名無しさん:2007/01/24(水) 12:09:24
(これ、Visual C++のスレで質問するべきなのかもしれませんが)
標準C++というのでしょうか、windowsコンソールアプリケーションの
文法で、Visual C++のよなwindowsプログラミング(ファイル[メニュー]や
ボタンを付けたいだけですが)をすることってできるでしょうか?
やはりそれはVisual C++でしかできないのでしょうか?

環境はVisual C++ 2005 Express Edition使っています。
164デフォルトの名無しさん:2007/01/24(水) 12:26:27
>>163
Visualという単語で勘違いしたのかな?VC++でコンソールアプリも書けます。
VC++でコンソールアプリを書いてもWindowsアプリを書いても、VC++の文法は同じです。
Windowsアプリの開発環境はVC++だけではありません。VB、Delphi等々色々あります。
165デフォルトの名無しさん:2007/01/24(水) 12:53:02
>>164
返信感謝します。
(私があまり理解していないので、言葉がうまく見つかりません)
普通(?)のC++(コンソールアプリ)は、やったことがあるんですが、
windowsアプリケーションのソースを見たところ、
“ハンドル”という言葉が出てきたりして、
私が今まで勉強したC++と少し違うと思いました。
文字列に関しても、宣言が下のように違うようです。
string word  @
   ↓
string^ word;  A
winwosアプリをする場合は、新たにAのような文法を勉強しなければ
ならないんですよね?
166デフォルトの名無しさん:2007/01/24(水) 15:42:41
ないない
167デフォルトの名無しさん:2007/01/24(水) 16:20:59
ルンゲ・クッタ法を用いてX-Y軸上に楕円運動の軌道を描く際の、各点においてのX軸Y軸方向への速度をV,Uとして時間T毎にファイルに書き込みたいのですが、どういった書き方ならば綺麗に描けますか?
168デフォルトの名無しさん:2007/01/24(水) 16:28:14
>>166
どっちでしか?
169デフォルトの名無しさん:2007/01/24(水) 17:54:33
>>165
「string^ word;」がエラーにならないとはちょっと思えない。

“ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。
それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。
まぁ、まずはWinアプリの入門書か解説ページを読んで。
170165:2007/01/24(水) 18:11:36
返信ありがとうございました。

>“ハンドル”はHANDLEのこと?ならそれはWindowsが定義してる型。typedef void *HANDLE;。
>それともメッセージハンドラ?なら、イベント駆動という考え方を知る必要がある。

前者だと思います。
↓のように使用されていて、
文字列型のハンドル、オブジェクト方のハンドルがあると書いてありました。


private: System::Void buttonAdd_Click(System::Object^ sender, System::EventArgs^ e) {
Debug::WriteLine("追加ボタンをクリックしました");
// 品名、分類、金額を取得する
String^ name = textName->Text;
String^ kind = comboKind->Text;
String^ money = textMoney->Text;
String^ out;
out = String::Format("品名:{0} 分類:{1} 金額:{2}", name, kind, money );
Debug::WriteLine( out );
}

>まぁ、まずはWinアプリの入門書か解説ページを読んで。
普通のC++を知っているだけでは、windowsプログラミングは無理のようですね。
じっくりやってみようと思います。

171デフォルトの名無しさん:2007/01/24(水) 19:03:37
>>170
あぁぁ、C++/CLIですね。だと文法も拡張されてるそうです。
新しいことをあまり知らないくせにレスつけました。すいません。

でもWinアプリを書くのにC++/CLIじゃないとダメってことはないですよ。
172デフォルトの名無しさん:2007/01/24(水) 20:38:23
>>151
とりあえず、参考にしてみます。
173デフォルトの名無しさん:2007/01/24(水) 22:12:01
>>170
そのハンドルは169の言っているものとは違う。
171も言っているが、それは.NET Frameworkを使って動くプログラムを書くために作られたC++/CLIという言語のプログラム。
普通のCもしくはC++を使ったWindowsプログラムはまた別物。
174デフォルトの名無しさん:2007/01/24(水) 22:38:23
>>171,173
指摘していただき感謝します。
C++/CLIは別なんですね。知りませんでした。
私はC++/CLIでない普通のWindowsプログラミングをしたいのですが、
その場合は、普通のC++と同じ文法でやれるのでしょうか?

VC++2005Express使っているんですけど、
その場合、プロジェクトの作成の仕方は、
[ファイル]→[新規作成]→[プロジェクト]
から、[新しいプロジェクト]ダイアログで、
[プロジェクトの種類]で、[win32]で選ぶのかと思うんですが、
この時[テンプレート]で選択できるのが[win32コンソールアプリケーション]
だけになってしまいます。
やり方が違うと思うんですが、
教えていただけますか?
175デフォルトの名無しさん:2007/01/24(水) 23:13:41
>>174
VC++2005ExpressEditionでwin32アプリケーションを作るには
http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
↑で環境をもうちょっと追加しなければならない。

ちなみに
.NETアプリってのはCLRとか書いてるやつね

win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、
window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。
http://www.kumei.ne.jp/c_lang/
↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。
VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変

WindowsSDKでの開発がめんどくさいから
MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。
.NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。
176174:2007/01/24(水) 23:45:24
>>175
丁寧な説明ありがとうございます。

>VC++2005ExpressEditionでwin32アプリケーションを作るには
>http://www.microsoft.com/japan/msdn/vstudio/express/visualc/usingpsdk/
>↑で環境をもうちょっと追加しなければならない。
早速入れました。

>win32のウインドウアプリも、コンソールアプリもC++でかけるんだけど、
>window.hをインクルードしたり、スタートが WinMain関数だったり、ちとちがう。
>http://www.kumei.ne.jp/c_lang/
>↑のWindowsSDK編ってとこ読むといい。長いしめんどくさいけどね。
>VC++2005ExpressEditionではちょっとメニューのエディタないからよけい大変
>

やってみようと思います。

>WindowsSDKでの開発がめんどくさいから
>MFCだとか、VisualBasicとかもっと簡単にウインドウ出せるアプリ作れるものが出来てきたんだよ。
>.NETアプリならVC++2005でも視覚的にウインドウアプリ作れるんだけどね。
>

わかりました。
CLRも考えようかと思います。
177デフォルトの名無しさん:2007/01/25(木) 00:46:29
質問です、以下の構造体があったとします↓
struct Test{
int nMem;
char strMem[20];
};
上記の構造体に、関数をひとつ追加します。
struct Test{
int nMem;
char strMem[20];
void Clear(){
nMem = 0;
strcpy(strMem, "");
}
};
そして両者のsizeofをとってみたのですが、両者とも24バイトとなりメンバ関数によるサイズの増大が見られません。
これは、コンパイラがTest::Clear()の呼び出しを該当するメモリアドレスに置換しているからなのでしょうか?
多分そうだと思うのですが、参考となるようなものが無く………詳しい方、宜しくお願い致します。
178177:2007/01/25(木) 00:47:31
追記です、実行環境はVS2003、VS2005、BCCです。
179デフォルトの名無しさん:2007/01/25(木) 02:54:53
>>177
メンバ関数も、機械語のレベルにすれば単なる関数であることに変わりはない。
Cで擬似的に書けばこんな感じになる。
struct Test {
  int nMem;
  char strMem[20];
};
void Test_Clear(Test* this) {
  nMem = 0;
  strcpy(strMem, "");
}
180デフォルトの名無しさん:2007/01/25(木) 11:58:29
C++の例外の使い方を解説した参考書で、オススメのものを教えてください。

文法自体の解説ではなく、使いこなしのテクニックなどについてです。
181デフォルトの名無しさん:2007/01/26(金) 01:00:56
>>180
例外の落とし穴的なことなら Exceptional C++ にあるよ。

# もし持ってないんだったら C++ 使いとして C++ in-Depth Series は
# 揃えておくことをオススメするですよ。
182デフォルトの名無しさん:2007/01/26(金) 14:17:33
>>181
ありがとうございます。

洋書には、知っておくべきノウハウの本があるのに、
和書には、言語仕様の解説本しかないんですよね。
洋書で足りてるから書く必要がないのかもしれないけど。
183177:2007/01/26(金) 15:34:18
遅れてしまいました、179さんありがとうございます。
184デフォルトの名無しさん:2007/01/28(日) 03:25:47
メインで作ったポインタをオリジナル関数内で配列領域を宣言するときはどう関数を受け渡せばいいのでしょうか。

void o(int **mem)
{
int i;
mem=(int **)calloc(10, sizeof(int));
for(i=0; i<10; i++)
mem[i]=(int **)calloc(10, sizeof(int));
}

int main()
{
int **mem;
o( );//この部分
}
185デフォルトの名無しさん:2007/01/28(日) 04:06:30
>>184
void o(int ***mem)
{
int i;
*mem=(int **)calloc(10, sizeof(int));
for(i=0; i<10; i++)
(*mem)[i]=(int **)calloc(10, sizeof(int));
}

int main()
{
int **mem;
o(&mem);//この部分
}
186デフォルトの名無しさん:2007/01/28(日) 04:11:30
>>185
それはやったのですが、
o内で数値を代入して、
メイン側でその数値を使おうとすると反映されていないみたいでエラーが・・・。
187デフォルトの名無しさん:2007/01/28(日) 04:15:23
>>185
後コンパイル時に引数が異なるというエラーが。

間接参照のレベルが 'int ***' と 'int ****__w64 ' で異なっています。
仮引数および実引数と異なります。
188デフォルトの名無しさん:2007/01/28(日) 04:16:17
>>186
だったらここだろ

void o(int ***mem)
{
int i;
*mem=(int **)calloc(10, sizeof(int *));
for(i=0; i<10; i++)
(*mem)[i]=(int *)calloc(10, sizeof(int));
}

ちなみにどんなエラーが出たのか明記しないとわからん
189デフォルトの名無しさん:2007/01/28(日) 04:17:31
>>187
メインで int ***mem; とやってるんじゃないか?
190デフォルトの名無しさん:2007/01/28(日) 04:22:36
>>188
完走しました。
ありがとうございました。

>>189
それはなかったです。
191デフォルトの名無しさん:2007/01/28(日) 06:52:30
フリーウェアで、
クラス図を作れるものってありますか?
192デフォルトの名無しさん:2007/01/28(日) 08:24:55
C/C++の質問しろよ
umlmemo
193デフォルトの名無しさん:2007/01/28(日) 08:29:20
doxygen
194デフォルトの名無しさん:2007/01/28(日) 09:07:10
JUDE Community
195デフォルトの名無しさん:2007/01/28(日) 11:33:04
>>192-194
ありがとうございました。

>C/C++の質問しろよ
はい、すみません。
196デフォルトの名無しさん:2007/01/28(日) 17:09:42
void qsort ( void* base , size_t nmemb , size_t size, int(*compar)(const void *, const void *) )

↑のを自作で作りたいのですが、誰かサンプルを作っていただけないでしょうか?
初心者でスマソorz
197デフォルトの名無しさん:2007/01/28(日) 17:14:38
http://www.google.co.jp/search?q=qsort.c
好きなのを持ってけ
198デフォルトの名無しさん:2007/01/28(日) 17:20:36
C++でゲーム制作プログラミング勉強しようと思ってるのですが
おススメの参考書を教えていただきたいです。
本屋に行ったのですが、何を買えばいいかわからずに退散してきましたorz
要望を挙げれば実際にゲーム制作しながら学べるような参考書。
RPGではなくアクションゲーに重きを置いた参考書を望んでいます。
プログラミング経験はJAVAを2年ほど、Perlを授業でかじった程度です。
よろしくお願いします
199デフォルトの名無しさん:2007/01/28(日) 17:21:54
>>197
どれが自作のやつかよく分かんないですorz
ほんと無知でスマソ
200デフォルトの名無しさん:2007/01/28(日) 17:40:28
ちみの云う「自作」の概念がよく分からないな。
チミが作ったわけじゃねーから、みんな他作だろう?
201デフォルトの名無しさん:2007/01/28(日) 17:47:16
ワロタ
202デフォルトの名無しさん:2007/01/28(日) 18:08:28
>>184
なんか見ていてクラクラしてくるコードだなぁ。
サイズが固定なら配列を使ったほうがいいんじゃないか。

>>196
正しい日本語で。
qsortの使用例 と qsortの実装例 のどっちが欲しいの?

>>198
問題をしっかり切り分けよう。

ざっと乱暴に分けただけでも、
□ C++
□ OSのAPIのうち、ゲームで使うものについて
□ ゲーム特有のアルゴリズム
という3つに分けられる。

それぞれ独立した話なので、それぞれ別々に学んだほうがいい。

このスレで質問すべきなのは、
「Javaをある程度やった人にオススメのC++の教科書を教えてください」
ということだよ。

で、Javaを2年もやったのであれば、入門書的なのは無駄が多い。
まずは、↓のような簡単なものでいいので、CとC++の文法の概要を、軽く読む。
ttp://www5c.biglobe.ne.jp/~ecb/c/c00.html
ttp://www5c.biglobe.ne.jp/~ecb/cpp/cpp00.html
その上で、C++の有名な参考書群を読めば習得は速い。
203196:2007/01/28(日) 18:21:24
>>202
すみません。実装例の方です
204198:2007/01/28(日) 21:01:49
>>202
色々と詳しく教えていただきありがとうございます
とりあえず教えていただいたサイトを見て基本的な所を理解してから
参考書を購入して勉強しようと思います。
ありがとうございました
205デフォルトの名無しさん:2007/01/28(日) 21:02:45
>>203
GNUのglibcとか、
マイクロソフトならVC++に付属のCランタイムのソースコードとか。
206デフォルトの名無しさん:2007/01/28(日) 21:23:48
#include "DxLib.h"

struct CharaData{
int x;
int y;
int mae,hidari,migi,tama;
};

struct CharaData jikidata;

int jikinomuki=0;
int statusboard=LoadGraph("StatusBoard.png");

int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance,LPSTR lpCmdLine, int nCmdShow )
{
ChangeWindowMode(TRUE);// ウインドウモードに変更
SetGraphMode(600,480,16);//ウィンドウの大きさ
if(DxLib_Init()==-1) return(-1);//DXライブラリ初期化

WaitKey();
DxLib_End();//DXライブラリ終了
return(0);//終了
}


エラーがでてないのにウィンドウが表示されません。
PCの動作が重くなっているので実行はされてると思うのですが・・・
誰かわかる人いましたら解決策を教えてください OTL
207デフォルトの名無しさん:2007/01/28(日) 23:37:23
ChangeWindowMode(TRUE);
SetGraphMode(600,480,16);
はDXライブラリの関数だろ?だったら
if(DxLib_Init()==-1) return(-1);//DXライブラリ初期化
の後に書くんじゃないか?
順序立てて考えて問題箇所を洗い出せ
208デフォルトの名無しさん:2007/01/28(日) 23:41:39
int statusboard=LoadGraph("StatusBoard.png");

これはヤバいんじゃないか?
WinMainよりも前に実行されるぞ。
209デフォルトの名無しさん:2007/01/29(月) 08:50:37
Choge hoge = new Choge();



Choge hoge;

は何が違うんでしょうか?

ヒープ領域とスタック領域の違いでしょうか?
どう使い分けたらいいでしょうか?
210デフォルトの名無しさん:2007/01/29(月) 10:55:12
>>209
前者はdeleteする必要がある。
そのクラスが巨大でないのなら、後者で充分。
巨大であるとかクラスの特性上必要があるとかで前者を使うのなら、auto_ptrの使用を検討したほうがよりよい。
211デフォルトの名無しさん:2007/01/29(月) 12:10:01
Choge* hoge = new Choge();

ではなくて

Choge hoge = new Choge();

なのであれば、それはメモリリークしている可能性があるよ。
Choge hoge ;
Choge* p = new Choge() ;
hoge = p ;
ただし、Choge::operator=(const Choge* p) が存在する、気持ち悪いクラスの場合だが。
212デフォルトの名無しさん:2007/01/29(月) 13:14:13
>>211

>Choge hoge = new Choge();
>
>なのであれば、それはメモリリークしている可能性があるよ。

そもそもコンパイル通らないんじゃないか?
213デフォルトの名無しさん:2007/01/29(月) 15:27:32
Cについて質問です。
double型変数をfprintfで小数点以下の有効数字全てを表示したいのですが、
どのようにすればよいでしょうか。

今は%.20leとか適当な数字で表示させています。
できれば%lfの形式で表示したいのですが。
214デフォルトの名無しさん:2007/01/29(月) 16:30:09
>>213
%.20gじゃダメ? 値が適当な範囲ならf形式で出るけど。
215デフォルトの名無しさん:2007/01/29(月) 17:53:53
#define isupper(c) ( (c) >= 'A' && (c) <= 'Z' )

↑これ、パラメータが2箇所で評価しているんですけど、
 問題ですか?普通に使えるような気がボクはするんですが...

216デフォルトの名無しさん:2007/01/29(月) 18:05:21
>>215
ASCIIのようにアルファベットがリニアに並んでいる環境なら使えますね。
評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので
ドキュメントに明示してあれば問題ないでしょう。
217デフォルトの名無しさん:2007/01/29(月) 18:15:26
>>216

>ASCIIのようにアルファベットがリニアに並んでいる環境なら使えますね。
>評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので
>ドキュメントに明示してあれば問題ないでしょう。

はい。ありがとうございます。
ついでで恐縮ですが、
副作用の起こる使い方ってどんな風な使い方ですか?
218215:2007/01/29(月) 18:18:40
>>216-217
自己レスですみません。
isupper(c = getchar())
↑こういうことですね?
219デフォルトの名無しさん:2007/01/29(月) 18:25:15
>>218
こういうのもです。
isupper(c++);
220デフォルトの名無しさん:2007/01/29(月) 19:21:07
>>219
そういうことですか。
ありがとうございました。
221デフォルトの名無しさん:2007/01/29(月) 20:31:59
まったくどうでもいことだが、範囲比較は想定される数直線的に並べるべきだと思う。
具体的には 'A' <= (c) && (c) <='Z'
222デフォルトの名無しさん:2007/01/29(月) 20:51:30
>>221
全くどうでもいいことだが、比較対象を左辺に置くのが一般的だと思う。
#いや、どちらでもいいけどさ。
223デフォルトの名無しさん:2007/01/29(月) 21:00:33
>>216
> 評価の副作用がある点に関しては、関数の引き数に副作用の起きるようなコードを書く香具師が阿呆なので

違う!

こういうのをマクロでやるのがアホ。
今時のコンパイラはインライン関数でも最適化されるので、副作用とか型チェックのないマクロを使う必要性はない。
224デフォルトの名無しさん:2007/01/29(月) 21:26:36
>>223
↓こういったのはどうですか?

arrは配列のポインタを設定。
#define ARR_SIZE(arr) ( sizeof(arr) / sizeof(arr[0]) )
225213:2007/01/29(月) 21:30:24
>>214
上手く表示できました。
ありがとうございます。
226デフォルトの名無しさん:2007/01/29(月) 21:35:04
>224
それはポインタ突っ込んでドツボにはまる香具師が必ず出てくるので有名なマクロだな。
しかし、コンパイル可能な副作用のある式を突っ込むのは難しくないか?

まー、おいらはstd::vector使うからいーけどさ。
227デフォルトの名無しさん:2007/01/29(月) 21:54:10
>>223
違う!

#define isupper('A'<=((c)%220%156%91))

こうするのが正しいやり方だ!
228デフォルトの名無しさん:2007/01/29(月) 21:56:37
>>224
template でゴニョゴニョすれば代わりになるものが作れるけど、
これに関しては移植性の高いマクロのほうが好きだな。
229デフォルトの名無しさん:2007/01/29(月) 21:58:56
>>227
('A'<=

頬に突き刺さってて痛そうだよな
230デフォルトの名無しさん:2007/01/29(月) 22:03:09
これじゃ、アッパーじゃなくてフックだな。
231デフォルトの名無しさん:2007/01/29(月) 22:27:09
>>224>>227
C++ならboost::sizeはだめか?<boost/range/size.hpp>
232デフォルトの名無しさん:2007/01/29(月) 22:32:38
>>231
boost::size じゃ、>>227 の速度性能には及ばんだろ、多分。

# メンテナンス性は最悪だけど。
233デフォルトの名無しさん:2007/01/29(月) 22:36:08
boost::sizeもO2あたりの最適化を書けてやれば定数に収束するんでねーの、たぶん。
234デフォルトの名無しさん:2007/01/29(月) 22:46:13
>>233
一回しか比較を実施しないロジックに対し速度で対抗しようとしたら
あとはもうテーブルでも用意するぐらいしかないぞ。
235デフォルトの名無しさん:2007/01/29(月) 22:56:53
比較と剰余のどちらのコストが高いかは議論たり得る。
236デフォルトの名無しさん:2007/01/29(月) 23:03:11
じゃ、おいらは 
#define isupper(c) ((unsigned)((c)-'A')<26U))
で対抗しちゃる。
237デフォルトの名無しさん:2007/01/29(月) 23:03:26
そうだな。一般的には剰余のほうが速いだろうけど、そうじゃない環境もあるかもね。
238デフォルトの名無しさん:2007/01/29(月) 23:06:15
>>236
お、これなら環境を問わずに最速なんじゃね?
239デフォルトの名無しさん:2007/01/30(火) 00:53:05
fgetcで読み込んだファイル(c)の文字を判定して印刷可能文字ならそのまま出力
それ以外なら空白を表示するプログラムを作っていたのですが
while((c = fgetc(fp)) != EOF){
if(isprint(c) != 0){
buf[n] = c;
n++;
            }
else{
buf[n] = ' ';
n++;
}
if(n % 16 == 0){
puts(buf);
for(n = 16;i >= 0;n--){
buf[n] = ' ';
}
n = 0;
}
}
この状態で出力すると16文字目の後にバグのような文字がでてきてしまいます。
いろいろ考えてみたのですが原因がわかりませんでした。どうにかしてこのバグを消す方法はないでしょうか?
Win XPでBorlandを使用しています。
240デフォルトの名無しさん:2007/01/30(火) 00:55:43
連投失礼します。
for(n = 16;i >= 0;n--)ではなく for(n = 16;n >= 0;n--)
でした。よろしくお願いしますm(--)m
241デフォルトの名無しさん:2007/01/30(火) 01:01:38
文字列の終端はナル文字をうめましょう。●4点
242デフォルトの名無しさん:2007/01/30(火) 07:34:48
ぬるぽ
243がっ:2007/01/30(火) 07:39:54
ちんぽ
244デフォルトの名無しさん:2007/01/30(火) 09:00:18
                    _,ィ、  ,r、__
                ,.ヘー'´  i `´/  `i_
            /ヾ、 ヽ、 i /   /ヽ
              _ィ、〉   > ´ ̄  ̄ ` く  ,ゝ、
          }、 ,>'´        、  ヽ./`ヽ
          ┌! /    /  i 「`i   ヽヽ ヽ   }
            Y     !   | |  l i i   l i  ',__,.ゝ
          ,'     |  | |   !l l   | l  l !
           i   !   |   | |   | j___j |  |i i!
           |i!  l  ,.|‐T丁i!   ハlj, --!`トlノ、||
           | !  !  レ'i´ミj    "i´ミ iヽ, i ||  _
           | l  |i   iバ__ソ     L__ソ /.ノ |! _ヽ)
           | |  |l  |、//// '  ///// |! |i ヽ)
           !ハ |!  |,ゝ' ´ ̄ ̄ ` く  レy'|!
          __,ノ レ'ヽiハ /             \}'´ ̄ `ヽ、
    ィ´ ̄/    ,べY                   Y`i__    \
    〉/    / , 、ヽ             /_`ヽ\    \
   ,ィ'ん、  / ! '´__ ヽ             /´__,.` ', \   ァ'`
   `ヽ、/ー'   /!   __`ヾ!           レ'´ _,.  !   \ i
    /ー-ィ、 ィ__!  ___`フ         /  ヽ二  /7  _i弋
   /    辷j  !   ヽ      / /    /  / }  j´  〉
    ヽ、   冫 ヽ__ュ_y\    /   /     /ヽヘ/え´   /

245デフォルトの名無しさん:2007/01/30(火) 12:19:11
>>239
・putsの仕様を確認すべし。
・下手な小細工しないでputcharとかfputcを使ったほうがいいぞ。
・そのコードだと16文字に満たない分が出力されないぞ
246デフォルトの名無しさん:2007/01/30(火) 16:13:41
>>239
> for(n = 16;n >= 0;n--)
17 回実行されるよね。
247デフォルトの名無しさん:2007/01/30(火) 16:31:01
>>221-222
そのような「べき」も「一般的」もありません。

>>230
感服しました。
248デフォルトの名無しさん:2007/01/30(火) 17:09:56
数直線を意識しない奴は、素養がない。
249239:2007/01/30(火) 19:23:13
>>241,245,246
助言ありがとうございます。
いろいろと試してみたらどうにか動きました。
お手数かけました。
250デフォルトの名無しさん:2007/01/30(火) 19:23:52
なんか不安w
251デフォルトの名無しさん:2007/01/30(火) 19:34:31
適当に試行錯誤して動いたらOKという人は、C言語を使うべきではないね。

たまたま偶然、自分が見た範囲内で問題なく動いているように見えるだけ、というのは勘弁して欲しい。
252デフォルトの名無しさん:2007/01/30(火) 21:58:00
>>248
自然言語で読みやすいように書かない香具師はカス。
Ex.
if (NULL = fp) ...
253デフォルトの名無しさん:2007/01/31(水) 07:54:30
>>252
それはコンパイルエラーだろ…常識で考えて。
if(NULL == fp)って書きたかったんだろうけどさ。

俺はいっつも右辺にリテラルを入れる派。
254デフォルトの名無しさん:2007/01/31(水) 08:41:40
>>253

252の挙げている例は、

==を間違って=にしてしまっても、コンパイラがエラーを出してくれるので安全だから、定数は左辺に書け

という、コンパイラが警告を出さなかった時代の人達のクソッタレなコーディングルールを、
今だに実践しているダメな人のことを言っているのだと思うよ。
255デフォルトの名無しさん:2007/02/01(木) 22:04:13
C++勉強始めて一週間ほどの超初心者なんですが、
定数(const)ってしっかり覚えた方が良いでしょうか?
それとも あ〜そんなのあったね。くらいで良いでしょうか?
そりゃ覚えるにこした事は無いと思いますが、なんかイマイチ頭に入らなくて
256デフォルトの名無しさん:2007/02/01(木) 22:05:31
constごときでそんなに苦労するの?
257デフォルトの名無しさん:2007/02/01(木) 22:08:10
覚えられなければ参考書とかグーグルで
すぐ答を引っ張り出せるようにはしておけ
258デフォルトの名無しさん:2007/02/01(木) 22:18:30
ややこしいのもあるから
const char * const s = "ssssss";
とか
class M {
    int i;
  public:
    void setInt(int i) { this->i = i; }
    int getInt() const { return i; }
};
こういうのは後回しでもいいかもしれんね。
259デフォルトの名無しさん:2007/02/01(木) 22:31:54
>>255
まだ、勉強始めて一週間ってことだったら、いますぐじゃなくてもいいとは思うけど。
でも、後からでもいいから const は絶対に覚えておけ。
260255:2007/02/01(木) 23:01:13
親切にお答えいただきありがとうございます。
定数は絶対に変えられない!程度に覚えておき、追々勉強していこうと思います
261デフォルトの名無しさん:2007/02/02(金) 00:20:10
c++でグローバル領域において
const double TEISU = 0.05;
とかにして,VS2005でTEISUにマウスカーソルを合わせると
「static const double TEISU」
って表示されるんだけど,勝手にstaticを付けられてるってこと?

int型だとこうはならないんですけど
262デフォルトの名無しさん:2007/02/02(金) 01:09:58
そんな感じ。
C++の名前空間内(含グローバル空間)でのconstはexternを付けない限りstaticと同じ内部リンケージを持つ。
(特に整数型において)ヘッダで初期化して定数として使えるようにするため。
263デフォルトの名無しさん:2007/02/02(金) 11:26:29
あるn次元空間において、全ての点から遠くなるような点(最遠点)の効率のよい計算方法を探してます。
ただし、最遠点の範囲はそれぞれの軸で決まっていて、

例えば下図のような2次元空間上でこのように点があった場合、
赤点の位置を算出したいのです。

ttp://kjm.kir.jp/pc/?p=29115.gif
ttp://kjm.kir.jp/pc/?p=29117.gif

上の場合は、点が偏っているために範囲ぎりぎりの点が選択されてる様子で、
下は周囲に点が偏っているので中央が選択されてる状態です。

このような点を探索する場合は、
全ての座標において点までの距離を計算し、最も遠くなるような座標を求める、
みたいな総当たりで調べていくしかないのでしょうか。
それともなにか効率のよいアルゴリズムはありますか?
264デフォルトの名無しさん:2007/02/02(金) 13:42:23
>>263
点に接する円の径を最大化するように円の中心点を範囲内にとればいいのかな?
最急上昇法を使うのはどう?
ローカルマキシマムに気をつけないといけないけど
265263:2007/02/02(金) 15:24:35
>>264
つまりこういうことでしょうか?

ttp://kjm.kir.jp/pc/?p=29123.gif
ttp://kjm.kir.jp/pc/?p=29124.gif

3次元以上に使えるのかが分からないのですが、ひとまず調べてみようと思います。
回答本当にありがとうございます。
266デフォルトの名無しさん:2007/02/02(金) 15:50:57
点が疎な領域で風船(円)を膨らましていくイメージじゃないの?
3次元以上でも使える。
267デフォルトの名無しさん:2007/02/02(金) 16:02:02
>>255
constがらみの文法は、わかりにくいですね。
他の人も言っているように、アンチョコを作りましょう。

頭の中に記憶しておく必要はないのです。
あやふやな記憶に頼ってコーディングをするのは、とても愚かな行為です。
(セキュリティのために、裸一貫でしか入退場できない場所での仕事は別だが・・・)

constはちゃんと理解して使えるようにならないと、
他者の書いたコードやライブラリを使うことができません。

>>258
自分はtypedefを使って、なるべくわかりやすくするよ。
typedefを勝手にやるな! というルールのところもあるけどね。

268264:2007/02/02(金) 16:56:55
>>265
言いたかった事は>>266
http://kjm.kir.jp/pc/?p=29126.gif
http://kjm.kir.jp/pc/?p=29127.gif
これはローカルマキシマムにはまった例
http://kjm.kir.jp/pc/?p=29128.gif
269デフォルトの名無しさん:2007/02/02(金) 21:09:52
とりあえず適切に荒くマス目に区切って総当たりし、
その中から有望そうな部分についてマス目を細かくして総当たりし、
さらにその中から・・・

という具合に、ニュートン法みたいに繰り返していくのが無難そうよ。
270デフォルトの名無しさん:2007/02/02(金) 22:21:45
配列の宣言において、要素数にキーボードから入力した値を用いるにはどうすればよいでしょうか?
271デフォルトの名無しさん:2007/02/02(金) 22:30:36
配列は静的に確保しなきゃいけないから無理
vector使え
272デフォルトの名無しさん:2007/02/02(金) 22:51:59
>>270

int int_array[
#include "CON"
];

これでおk。
273デフォルトの名無しさん:2007/02/03(土) 00:04:54
>>270
// for C(99)
int num = キーボードから入力する関数();
AnyType_t array[num];
// for C++
// use std::vector.
// for (regacy)C
// try malloc() / free().
274270:2007/02/03(土) 00:09:48
>>271,272
ありがとうございます。
説明不足で申し訳なかったのですが、
C++ではなく、Cで実現させたいのですが、
>>271のおっしゃる通り不可能なのでしょうか?
275デフォルトの名無しさん:2007/02/03(土) 00:11:11
>>274
>273
276デフォルトの名無しさん:2007/02/03(土) 00:22:00
>>273,275
ありがとうございます。

初心者なもので、具体的に教えていただきたいのですが、
float型で変数nを要素数とするxという配列を作りたいときは

scanf("%d",&n);
float x[n];

でよろしいのでしょうか?
やってみたところ、

ここでは宣言はできない(関数 main )
定数式が必要(関数 main )

とのエラーが  float x[n];  の行に出てしまいました。
ご教授願います。
277デフォルトの名無しさん:2007/02/03(土) 00:33:06
>>276
今時、8年も前の規格も満たせないような半端モノのCコンパイラではなく、真っ当なCコンパイラを使ってください。
それがいやなら、C++でも使ってください。
278デフォルトの名無しさん:2007/02/03(土) 00:53:05
>277
すみません、フリーのBorland C++Compiler 5.5です。
月曜日に学校のVisual C++コンパイラでやってみます。
279デフォルトの名無しさん:2007/02/03(土) 00:55:42
いや、一緒だから。
280デフォルトの名無しさん:2007/02/03(土) 01:03:41
C99がまともにコンパイルできるコンパイラで身近なものはiccしかない。
部分的にサポートならgccでもよいが完全ではない。

こういう状態だから「C99は死んだ規格」と呼ばれる。
281デフォルトの名無しさん:2007/02/03(土) 01:34:13
>>277
まともなコンパイラを教えてください
282デフォルトの名無しさん:2007/02/03(土) 03:47:23
>>281
>280
283デフォルトの名無しさん:2007/02/03(土) 13:17:31
>>280
>こういう状態だから「C99は死んだ規格」と呼ばれる。

でも、決して無駄にはならないハズ。
なぜならその屍をC++0xが乗り越えてくれるから。
284デフォルトの名無しさん:2007/02/03(土) 13:50:00
なーんだ結局C++に乗っかかるつもりかよ。やめてくれ。
ただでさえ複雑怪奇なC++の言語仕様をさらに複雑にする気か。

まあC++0xは文法を複雑にするというより、足りない部分を補う
だけで、今の文法でも出来る事を焼き直すわけではないからな。
285263:2007/02/03(土) 14:32:19
>>266-269
回答ありがとうございます。
ローカルマキシマムも図で説明しただいてよく分かりました。
ひとまず269の方法で試してみたいと思います。
286デフォルトの名無しさん:2007/02/03(土) 19:03:10
C++で他のアプリケーションの画面の色を取得したり、クリックしたりできますか?
できないなら言語は何がオススメですか?
287デフォルトの名無しさん:2007/02/03(土) 19:25:09
それはC++かどうかよりもGUIのAPIもしくはライブラリの問題。
288デフォルトの名無しさん:2007/02/03(土) 20:31:25
はいはい、HSPHSP
289デフォルトの名無しさん:2007/02/04(日) 14:53:13
↓ですが、@がAとして認識されるということですが、
  私はAがどういう場合に使われるのかがわかりません。
  externで定義ってどういうことでしょうか?

大きな非互換項目の一つにconst型修飾子の取り扱いの違いがある。
C言語では記憶域クラス指定子を持たず、const型修飾されたファイル
有効範囲の識別子は、外部結合の識別子として取り扱われる。
一方、C++言語では内部結合の識別子として取り扱われる。
つまりC言語ではexternが補完されるのに対し、C++言語ではstaticが
補完されると考えればわかりやすい。多くのプログラマは、C言語での
プログラミングにおいて、extern型修飾子は、変数の外部参照宣言を行
なう時にのみ使用し、変数の定義においては使用していない。
この問題は、const型修飾子を使用している多くのプログラムで発生する
と予想される。

const int a=10;            @
(C言語で認識される型)
extern const int a=10;        A
(C++言語で認識される型)
static const int a=10;         B
290デフォルトの名無しさん:2007/02/04(日) 15:28:27
>>289
どういうこともそういうことも、Cには昔const修飾子がなかったので
const int a = 10はint a = 10と同じスコープを持つしかなかっただけなんだが。
291デフォルトの名無しさん:2007/02/04(日) 15:48:37
>>289
CでもC++でもグローバル変数の定義にはexternを付けてもいいんだよ。
/* hoge.h */
extern int foo; /* グローバル変数fooの宣言 */
extern int bar; /* グローバル変数barの宣言 */

/* hoge.c */
int foo = 4; /* グローバル変数fooの定義 */
extern int bar = 2; /* グローバル変数barの定義 */
292デフォルトの名無しさん:2007/02/04(日) 16:00:40
定義に「付けてもいい」ってところがミソだな
293デフォルトの名無しさん:2007/02/04(日) 19:11:39
>>290>>291
ご回答感謝します。
よくわかりました(助かりました)。
294デフォルトの名無しさん:2007/02/04(日) 19:12:09
>>292
>定義に「付けてもいい」ってところがミソだな
どういうことでしょうか?
295デフォルトの名無しさん:2007/02/05(月) 00:04:19
>>289
> 私はAがどういう場合に使われるのかがわかりません。
C言語では(1)と(2)は同じだから、どっち使うか自由なので
(2)を使わなければいけない場面なんてないんじゃないのかな。

C++だと(1)は(3)の意味になる。
(3)では複数のファイルに同じものがあって無駄に感じるが
そんなの気にしないで(2)を使わず(1)を使うようだね。
296デフォルトの名無しさん:2007/02/05(月) 00:10:04
>>295
生半可な知識しかないなら回答しないでください。

>(3)では複数のファイルに同じものがあって無駄に感じるが
全くの思い違いです。
297デフォルトの名無しさん:2007/02/05(月) 00:12:40
>>296
そうでしたか。
ごめんなさい。
298デフォルトの名無しさん:2007/02/05(月) 00:36:07
C++で
複数のファイルに
const int a=10;
などがあっても
変数aというより値10が直接使われる。

複数のファイルに
const int a=10;
const int *p=a;
とした場合はそれぞれのファイルで異なるポインタのaが存在るんじゃないの。
299デフォルトの名無しさん:2007/02/05(月) 00:37:44
>>296
>無駄に感じる
どう感じるかは自由だ
300デフォルトの名無しさん:2007/02/05(月) 01:09:35
同じ定義を複数のファイルに書いたりしない。一個をインクルードするだろ。常識的に考えて。
301デフォルトの名無しさん:2007/02/05(月) 02:02:43
>>300
そういうこといっているんじゃないと思うが。

その通り実際にはヘッダファイルに書くけど
ヘッダファイルにstatic const int a=10;を書いて複数のファイルからインクルードするのと
複数のファイルにstatic const int a=10;を書きのとで
staticやexternの動作は変わらないでしょ。

それとも別の話?
302デフォルトの名無しさん:2007/02/05(月) 14:30:40
質問です、class Aを継承したclass Bが存在したとします。
class Aに仮想デストラクタが存在しない場合、class Bのデストラクタが呼ばれないと聞きました。
これは、常に真なのでしょうか? B Obj;などと動的に生成しなくても、デストラクタはやはり呼ばれないのでしょうか?
303デフォルトの名無しさん:2007/02/05(月) 14:55:20
>>302
A *obj = new B;
みたいな使い方した場合。
Aに仮想関数が存在しなければobjはすべてAとして動作するから、
デストラクタもAのデストラクタが動けばいいけど
仮想関数が存在した場合、objはBとして動作することがある。
そのときBの動作してAのデストラクタしか動かなかった場合、危険でそ?

B *obj = new B;
のように宣言するならちゃんとobjが破棄されたときにBのデストラクタが動くはず。
でもそんなリスキーなこと考えず、仮想メンバ関数のあるクラスには
virtualなデストラクタを置くのが常識。
304デフォルトの名無しさん :2007/02/06(火) 00:48:51
>>300に同意
ま、スレの題名通りの流れだから良いけど。
305デフォルトの名無しさん:2007/02/06(火) 02:03:28
>>300
そもそも、
複数のファイルに書かれた
static const int a=10;
が、同じ定義かどうかは、わからないぞ。

ファイル内のローカルスコープなわけで、
ファイルによって aの値は違うかもしれないし、
今は同じでも今後変るかもしれない。
306デフォルトの名無しさん:2007/02/06(火) 11:36:10
blowfishをやろうと思っているのですけど、暗号化できません
#include <stdio.h>
#include "blowfish.h"
#include "blowfish.h2"
#define FilePath "text.txt"
#define Key "keyword"
#define BUF_SIZE 256

FILE *fp;
char buffer[] = "asdfghjk";
char newbuffer[255];

CBlowFish *blow = new CBlowFish;

blow->Initialize( Key, strlen(Key));
blow->Encode( buffer, newbuffer, BUF_SIZE);
delete blow;

fp = fopen(FilePath,"w");
fprintf(fp,newbuffer);
fclose(fp);
どこが間違っているのでしょうか?
307デフォルトの名無しさん:2007/02/06(火) 11:40:52
質問です
メインで使うクラスにデストラクタの中で
終了時にメンバ変数の領域をdeleteにより手動で開放する
意味はあるのですか?
308306:2007/02/06(火) 11:55:53
すみませんけど、自己解決しました
309デフォルトの名無しさん:2007/02/06(火) 14:56:08
>>307
確保したものは解放するのが当然。まして、「メインで使う」ことが何度もあるなら。
310デフォルトの名無しさん:2007/02/06(火) 15:11:02
ではもう使わないんなら解放しなくてもいいですね
311デフォルトの名無しさん:2007/02/06(火) 16:15:41
デバッガでメモリリークを検出するようにしてるような場合、
そういうことを適当にしてるとせっかく検出したリークを
見落とすようなことになる。
それに限らず、「もう使わないから」って理由で開放漏れを
容認しだしたら、本当に深刻なリークが発生したとき
あちこちに疑わしい箇所が散逸してて泣くことになると思うぞ。
一人で責任持てるなら良いかもしれんがチームのときは迷惑極まりない。
312デフォルトの名無しさん:2007/02/06(火) 17:23:21
>>307
いや、さすがに冗談だよな……?
313デフォルトの名無しさん:2007/02/06(火) 17:28:58
どうせOSが後始末をしてくれるし、終了処理してたら重くなるから
リリースバージョンではabortで終了する。という人もいるみたい。
314デフォルトの名無しさん:2007/02/06(火) 17:29:37
free論争は秋田
315デフォルトの名無しさん:2007/02/06(火) 17:29:55
まさか307はこういうことを言いたいのか?
class Hoge
{
public:
  ~Hoge() {delete &x;}
private:
  int x;
};
316デフォルトの名無しさん :2007/02/06(火) 17:42:06
>>315
なんかおかしな事になりそうだから試したくないけど
それしたらどうなるの?
317デフォルトの名無しさん:2007/02/06(火) 17:49:39
おそらく未定義の動作。どうなろうと標準規格の関与するところではない。
鼻から悪魔が(ryとよく言われるやつ。
318デフォルトの名無しさん:2007/02/06(火) 18:57:47
同じオブジェクトを二回破壊しようとしたら実行時エラーでないか?
319デフォルトの名無しさん:2007/02/06(火) 19:34:00
>>307じゃないけどデストラクタでdeleteするのってダメなんですか?
デストラクタって破棄される直前に呼ばれるんですよね?
320デフォルトの名無しさん:2007/02/06(火) 19:44:22
メンバ変数がnewで確保されたものなら、デストラクタでdeleteするのは当然だが。
321デフォルトの名無しさん:2007/02/06(火) 19:52:51
ああ、>>315をよく見て無かっただけですた
びっくりしたぜ、サーセン
322デフォルトの名無しさん:2007/02/07(水) 03:11:03
>>316
おそらく何も起きない。

というのも、スタック上にあればdeleteは、
んなポインタ知らないよとスルーするし、
ヒープ上にあっても、
んなポインタ知らないよとスルーするから。

デバッグ版なら、変なポインタをdeleteするな、って叫ぶかもしれない。

だがしかし、実装依存であり、何が起きても泣かない覚悟が必要だ。
323デフォルトの名無しさん:2007/02/07(水) 03:59:03
へ?最近のdeleteはそんな親切設計というか過保護設計というかになってるの?
324デフォルトの名無しさん:2007/02/07(水) 06:49:00
というか、そういう過保護な実装が存在するのか?だな。
325デフォルトの名無しさん:2007/02/07(水) 07:55:33
しないだろ。
326デフォルトの名無しさん:2007/02/07(水) 10:30:05
クラスのメンバ変数についての質問です
グローバル変数としてビュークラスの外で宣言したクラスの
メンバ変数は0や空文字で初期化されてるんですが

そのクラスをビュークラスのメンバとして宣言するとそのクラスの
メンバ変数が初期化されないのはどうしてですか?
327デフォルトの名無しさん:2007/02/07(水) 10:43:10
c++ 変数 初期化 の検索結果 約 145,000 件中 1 - 10 件目 (0.19 秒)

ぐぐったら見つかるだろ
328デフォルトの名無しさん:2007/02/07(水) 10:46:50
>>327
わからないんなら答えなくていいよ
329デフォルトの名無しさん:2007/02/07(水) 10:58:04
>>326
仕様です
330デフォルトの名無しさん:2007/02/07(水) 11:13:14
>>326
向こうにちょっと書いたが・・・
グローバル変数はコンパイル時に場所を決定して0で初期化したブロックにできるが
ヒープの場合実行時に割り当てられるので、わざわざ0クリアするコードを入れるわけ
ではないので初期化はされない。

しかし期待した答えをもらえないからって文句言うな
331デフォルトの名無しさん:2007/02/07(水) 11:13:54
ヒープの場合

ヒープやスタックの場合
332デフォルトの名無しさん:2007/02/07(水) 11:14:54
すいませんありがとうございます
333デフォルトの名無しさん:2007/02/07(水) 19:07:36
C++の勉強したいんですけど、
ゲーム作りしながら学べるような本はありませんか?
持ってるのはVisualC++の6.0なんですけど…。
334デフォルトの名無しさん:2007/02/07(水) 19:13:30
335デフォルトの名無しさん:2007/02/07(水) 19:28:10
mallcoを使って二次元配列の領域を確保したんですけど,
その配列の値を他の関数に渡すにはどうしたらいいんでしょうか?
336デフォルトの名無しさん:2007/02/07(水) 19:43:56
値で渡す場合は値渡しだね
337デフォルトの名無しさん:2007/02/07(水) 19:49:31
>>335
たとえばintなら

int (*array)[10]; // int[10]型のポインタ変数array
array = (int (*)[10])malloc(sizeof(int) * 10 * 5); // int [5][10]
func(array[0][0]); // call

良く使うならint[10]型をtypdedef汁
338デフォルトの名無しさん:2007/02/07(水) 19:58:36
337はfuncの引数がint*となっている場合だね。
void func(int [][10]);などと宣言されていれば、func(array)と呼べる。
339337:2007/02/07(水) 20:11:41
>>338
array[0][0]でちゃんと値を渡してるよ。
コンパイル通してみたから間違いないかと。
340デフォルトの名無しさん:2007/02/07(水) 20:28:09
typedef版。要は配列の基底となる要素数を[10]です、と明示的に
宣言してやらないと領域だけあっても2元配列としては使えない。

typedef int ArrayType[10];
ArrayType *array;
array = (ArrayType *)malloc(sizeof(ArrayType) * 5); // int [10]を5個分
func(array[0][0]);
341デフォルトの名無しさん:2007/02/07(水) 20:53:06
>>323
WindowsのVC++のdeleteは、不正なポインタを渡すとint 3してくれたと思う。
342デフォルトの名無しさん:2007/02/07(水) 20:55:49
>>333
2つのことを同時にやろうとするのは無駄が多いよ。
C++とゲーム作りと、別々に勉強することをお勧めする。

C++の良い参考書はいくつもあるが、
↑と同レベルの、ゲームを作りながらC++を学ぶという本はないから。

343338:2007/02/07(水) 21:31:32
>>339
ごめん。337ではfunc(&array[0][0])と書いてあるかと勘違いした。
344デフォルトの名無しさん:2007/02/07(水) 23:52:01
構造体をヘッダファイルに定義して適当にインクルードしたら
二重定義ということで怒られてしまいました。

#pragma once を使用することで解決しましたが、今まで
C言語をやっていて気になったことはありません。
コンパイルエラーになったのはC++ですが、C++でエラーになる
ようになったのでしょうか?
それともエラーにならなかったコンパイラが寛容だったということでしょうか?
345デフォルトの名無しさん:2007/02/07(水) 23:52:48
お前がまともな規模のコードを書いてこなかっただけ
346344:2007/02/07(水) 23:56:13
>>345
規模と何の関係があるんですか?
347デフォルトの名無しさん:2007/02/07(水) 23:59:42
>>344
C言語でもまともなコンパイラならエラーになる。
大きな規模のプロジェクトならば名前の衝突は経験することがあるはず。
348デフォルトの名無しさん:2007/02/08(木) 00:05:11
>>344
Cでも「構造体をヘッダファイルに定義して適当にインクルードしたら二重定義ということで怒られ」ます。
349デフォルトの名無しさん:2007/02/08(木) 00:20:11
>>348
今Borland C++ 5.5.1をダウンロードして試してみましたが全く
エラーになりません。

<struct.h>
typedef struct test_st
{ int a;
int b; }TEST_ST;

<main.c>
#include"struct.h"
void testFunc(void);
int main(void)
{testFunc();
return 0; }

<sub.c>
#include<stdio.h>
#include"struct.h"
void testFunc()
{ printf("Hello\n"); }

main.cとsub.cで2回構造体の定義(struct.h)をインクルード
していますがエラーにならずに実行できます。
ちなみにエラーになったのはVC++でC++を使ったときでした。
これはエラーにならないコンパイラが甘いということでしょうか?
350344:2007/02/08(木) 00:21:08
どうもVC++のバージョンを上げてから弾かれるようになったように
記憶しているのですが・・・
351デフォルトの名無しさん :2007/02/08(木) 00:24:54
>>344
"piyo.h"というヘッダを作ったとします
そしたらヘッダ内に
#ifndef INC_PIYO_H
#define INC_PIYO_H
 ・
 ・
#endif /* INC_PIYO_H */
のような形の文を必ず書きなさい
そうすればと二重インクルードガードとなる
352344:2007/02/08(木) 00:32:02
>>351
いや、それは知っています。
それの代わりに#pragma onceでもいいってことも。

気になっているのはなぜ今までエラーにならなかったのかと
いうことです。
実際、さきほどbccで試したらエラーにならなかったし。
353デフォルトの名無しさん:2007/02/08(木) 00:44:43
struct.h
をインクルードする
struct2.hを作って

main.cから

#include "struct.h"
#include "struct2.h"

ってしてみれ

規模が大きくなるとそういう事が多くなる
354344:2007/02/08(木) 00:54:32
>>353
ありがとうございます。
なんとなく分かった気がします。

同一ファイル内で1回なら問題ないということですね。

Cで自分で意識してインクルードした場合は、1ファイルにつき
1回しかインクルードしないので問題がなかったのですが、VC++で
MFCを使うと勝手にインクルードとかされてエラーになるように
なったんじゃないかと思います。
355デフォルトの名無しさん:2007/02/08(木) 01:03:19
どんな名前になるのかわからないファイルを勝手にインクルードなどできるはずがない。
356デフォルトの名無しさん:2007/02/08(木) 01:03:41
だからそれはCとかC++とかの問題ではなくて
お前の書くプログラムの規模が小さかったから現れてこなかっただけだ。

ところで分割コンパイルと二重インクルード防止は基礎中の基礎だと思うんだが
最近の入門書じゃ教えてないっぽいな。
嘆かわしいなあ…
357デフォルトの名無しさん:2007/02/08(木) 01:57:01
>>356
まともな入門書には書かれてるよ。

まともじゃない入門書でも、説明しているものがあるけどね。
358デフォルトの名無しさん:2007/02/08(木) 02:35:10
質問です。以下のように、変数を自作クラスを使うベクタを使って作成する場合
どのようにして作成していけばよいのでしょうか。push_backメンバが使えると思うのですが
いまいち自作クラスを使ったベクタでの使い方がわかりません。よろしくお願いします。

class A {
 int a;
 int b;
public:
 void set_a(int seta) { a = seta; }
 void set_b(int setb) { b = setb; }
 int get_a() { return a; }
 int get_b() { return b; }
};

int main() {
 vector<A> vec_a;

 /* vec_aに要素を追加する */

 return 0;
}
359358:2007/02/08(木) 02:38:02
訂正します。
どのようにして要素を作成していけばよいのでしょうか。
360デフォルトの名無しさん:2007/02/08(木) 02:48:54
>>358-359
vec_a.push_back(A());
361デフォルトの名無しさん:2007/02/08(木) 03:12:35
>>358
class Aに引き数をとるコンストラクタを用意した方が何かと便利かもね。
仮に、A(int seta, int setb);というコンストラクタがあるなら、
vec_a.push_back(A(0, 0));って感じで設定も同時に行なえる。
362デフォルトの名無しさん:2007/02/08(木) 03:44:42
>>361
セッターの戻り値を *this にして
vec_a.push_back(A().set_a(0).set_b(0));
なんてやるのもいいと思うけどね。
コンストラクタでやるのに比べるとちょっと冗長だけど、
このスタイルのほうがいろいろと都合がいいことってあるし。
363デフォルトの名無しさん:2007/02/08(木) 07:36:19
それマジ?
364358:2007/02/08(木) 10:19:30
>>360-362
ありがとうございます。
勉強になりました。
365デフォルトの名無しさん:2007/02/08(木) 10:24:34
>>362面白い
それは応用が利きそうだな。
366デフォルトの名無しさん:2007/02/08(木) 11:48:25
setterでthisポインタ返すのは常識だろ
367デフォルトの名無しさん:2007/02/08(木) 13:59:43
質問です
cout << false;
cout << true;
の出力結果は 0 1 ですが、これは環境によって違うのでしょうか?
368デフォルトの名無しさん:2007/02/08(木) 15:19:39
>>367違わない。
369デフォルトの名無しさん:2007/02/08(木) 17:20:28
プリコンパイル済みヘッダに関する質問です、
VC++2003やVC++2005では各cppに#include "stdafx.h"でプリコンパイル済みヘッダが使えます。
ところがそのソースをBCCに移植すると、(ディレクトリの関係で)一部#include "../stdafx.h"にしなければなりません。

VCはディレクトリ関係を気にせず一様に指定出来ますが、BCCで同じことは行えないのでしょうか?
370デフォルトの名無しさん:2007/02/08(木) 17:25:30
>>369
BCCはstdafx.hは必要ありません。
371デフォルトの名無しさん:2007/02/09(金) 01:09:27
>>366
はて、>362は実体を返しているようだが。
372デフォルトの名無しさん:2007/02/09(金) 01:32:40
>>371
僕は参照だと脳内補完した。
373デフォルトの名無しさん :2007/02/09(金) 03:02:01
とりあえずゲッターはconstつけようや
374デフォルトの名無しさん:2007/02/09(金) 19:17:43
C++のソースからクラス図を自動生成してくれるようなツールはないでしょうか・・・?
375デフォルトの名無しさん:2007/02/09(金) 19:19:06
>>369
インクルードパスに..を追加できないの?
""で括ったヘッダ名が見付からなければ、
<>で括ったのと同じようにヘッダを探すことになっている。

だからインクルードパスの指定は""で括ったものにも有効。
376デフォルトの名無しさん:2007/02/09(金) 20:59:55
>>374
Doxygenを含めて色々在ると思う。
377デフォルトの名無しさん:2007/02/14(水) 13:38:46
class A{
static const double a;
static const double b;
static const double c;
};

const double A::a=5;         
const double A::b=10;
const double A::c=a/b;

と書いた場合、cは必ずa=5とb=10が実行された後に実行されるのでしょうか?
378デフォルトの名無しさん:2007/02/14(水) 17:02:17
CTypedPtrListのSeqValueListを
CTypedPtrArrayにする時ってどうすればいいんでしょうか?
下のがソースなんですが、やり方が良くわからない。。。orz
CItemInfo::~CItemInfo(){
int iCount;
POSITION pos;
VALUE *pValue;
m_pValueList = &m_SeqValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
m_pValueList = &m_ParValueList;
iCount = (int)m_pValueList->GetCount( );
pos = m_pValueList->GetHeadPosition( );
for( int i=0; i<iCount; i++ ){
pValue = m_pValueList->GetNext( pos );
delete pValue;
}
m_pValueList->RemoveAll();
}
379デフォルトの名無しさん:2007/02/14(水) 18:28:32
なんだマルチか
380コンパイルとおらねぇもん:2007/02/15(木) 01:23:57
>>377
いいえ。実行されることはありません。
381デフォルトの名無しさん:2007/02/15(木) 14:39:13
MFC実行したら
Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or
PostNcDestroy in derived class will not be called.
って言われたんだけど、どういう意味なの?
382デフォルトの名無しさん:2007/02/15(木) 14:45:37
そのままの意味です。英語の意味が判らないと言うのであれば、鼬害です。
383デフォルトの名無しさん:2007/02/15(木) 22:56:15
>>381
ウィンドウを正しく終了せず
プログラムの変数(インスタンス)が消されたことにより
正しい手順ではなくCWndのデストラクタが呼ばれたんじゃないの(推測)。
384377:2007/02/16(金) 07:39:55
そうするとcの値は何になるのでしょうか?
385デフォルトの名無しさん:2007/02/16(金) 08:19:55
0.5でしょ。コンパイルタイムに確定するから。
386デフォルトの名無しさん:2007/02/16(金) 12:56:06
>>385
この手の順序依存は規格的には未定義じゃなかったっけ?
387デフォルトの名無しさん:2007/02/16(金) 13:13:40
BCCでインデントするとemacsでやってたのと違ってかなり
スペース空くのですが、こんなもんなんですか?
388デフォルトの名無しさん:2007/02/16(金) 13:22:19
BCCでインデント の意味がわからない。
389デフォルトの名無しさん:2007/02/16(金) 16:54:28
class A{ 
static const double a; 
static const double b; 
static const double c; 
}; 

const double A::a=5;          
const double A::b=c/a; 
const double A::c=a/b; 

じつはこれもコンパイルできてしまったりする。
390デフォルトの名無しさん:2007/02/17(土) 12:40:16
>>389
順序は規定されていないけどコンパイルされる以上、値は決まるわけだね。
その例だとa, b, cの順序に評価される可能性が高そうだから、bは(cが暗黙の初期化で0だから)0、cは∞か。
const double A::c=a+b;
const double A::b=c+a;
const double A::a=5;
こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。
まして複数のコンパイル単位に分かれていたらリンク順序にも依存してしまうのかな。

結論:
評価順序に依存した初期化は鼻から悪魔。constにしないでシングルトンにすべきか。
391デフォルトの名無しさん:2007/02/17(土) 12:41:58
一部訂正:
×こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。
○こうなってたとすると、a, b, cがそれぞれ(cbaの順序で評価して)5, 0, 0なのか(acbの順序で評価して)5, 10, 5なのか悩ましいところだ。

392デフォルトの名無しさん:2007/02/17(土) 23:13:18
gccは確か制御できた様な
393デフォルトの名無しさん:2007/02/19(月) 12:03:31
C言語なんですがwaveを再生させるにはどうすればよいでしょうか?
プログラムが完了したら鳴らしたいのですが・・・。
394デフォルトの名無しさん:2007/02/19(月) 12:18:16
Beep()
…言ってみただけ
395デフォルトの名無しさん:2007/02/19(月) 12:19:02 BE:672138566-2BP(1050)
てst
396デフォルトの名無しさん:2007/02/19(月) 12:19:46
ビープ音鳴らすだけならputchar('\a');
処理系依存だけど
397デフォルトの名無しさん:2007/02/19(月) 14:44:15
演算子の多重定義って使う機会ありますか?
398デフォルトの名無しさん:2007/02/19(月) 15:11:16
自分で使うかどうかはともかく、人が作ったものはよく使う。
一番よく使うのがイテレータに対する操作。
後はstd::basic_stringの比較・連結もよく使う。
399デフォルトの名無しさん:2007/02/19(月) 15:31:16
ビープ音ではなくwavのようなPC内部で鳴る種類が良いです・・・
400デフォルトの名無しさん:2007/02/19(月) 16:00:23
>>399
「wave API」でググれ。
401デフォルトの名無しさん:2007/02/19(月) 16:15:44
waveを再生するってのは結構面倒なのでしょうか?
402デフォルトの名無しさん:2007/02/19(月) 16:32:39
君の面倒なレベルがわからないから回答不能
403デフォルトの名無しさん:2007/02/19(月) 19:12:31
WindowsならMCIかwaveoutかDirectX
質問のレベルからしてMCIがお勧め
404397:2007/02/19(月) 22:35:33
>>398
ありがとうございました。m(_ _)m
405デフォルトの名無しさん:2007/02/20(火) 02:13:35
質問です。
typedef std::map<mykey_t,myval_t> mymap_t;
void hoge(mykey_t k, const mymap_t &m){
 mymap_t::iterator p = m.find(k); // コンパイラエラー
}
constが付いたmapのイテレータを造りたいんですけど、
どうすればいいのですか?
406デフォルトの名無しさん:2007/02/20(火) 03:03:39
>>405
mymap_t::const_iterator p = m.find(k);
407デフォルトの名無しさん:2007/02/22(木) 13:38:18
>>381
今さらながらマジレス
Warning: calling DestroyWindow in CWnd::~CWnd;
OnDestroy or PostNcDestroy in derived class will not be called.
[翻訳]
CWndから派生クラスのウィンドウを使っているときに、
規定クラスのCWnd::~CWndデストラクタが呼ばれているので
派生クラス側のOnDestroyやPostNcDestroyハンドラが呼ばれませんですのよ。うふ

ウィンドウ破棄するときに派生クラス->DestroyWindowを呼んでない悪寒です。
408デフォルトの名無しさん:2007/02/23(金) 11:42:39
文字と数字が入力された時に、数字だけを消して
文字だけ表示したいんですけど、どうやればいいのでしょうか?

void del_digit(char *str){
while(*str)
/*ここでどうすれば?*/
putchar(*str++);
}
int main(void){
char str[100];
printf("mojinyu-ryoku:"); scanf("%s",str);
printf("DelDigit:");
del_digit(str);
putchar('\n');
return(0);
}
409デフォルトの名無しさん:2007/02/23(金) 12:22:44
if (isdigit(*str))
410408:2007/02/23(金) 13:05:39
>409

ありがとうございました。解決できました。
411デフォルトの名無しさん:2007/02/23(金) 16:03:53
注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
412デフォルトの名無しさん:2007/02/23(金) 21:26:09
>>411
そうか
413デフォルトの名無しさん:2007/02/25(日) 19:10:07
ユーザー一人一人に別々のシリアルナンバーを割り当てたいのですが、
どのように生成し、ソフト側ではどのようにそれをチェックすればよいのでしょうか?
414デフォルトの名無しさん:2007/02/25(日) 19:45:45
ユーザー特有情報(メールアドレスとか)を秘密鍵で暗号化して、
ソフトに内蔵の公開鍵で復号できたらOK、とか?
415デフォルトの名無しさん:2007/02/25(日) 19:56:51
うんにゃ、クラックから守るにはクラッカーの手口を知る必要がある。
リバースエンジニアリングの本でも買って読んだ方が良いぞ。相手は『強力なデバッガ』使いだからな。
ロジックの流れなんか直ぐに分かってしまう。まずは低水準なレベルで防御しなければならん。
認証用の関数はプログラム処理の流れから完全に分離、関数のアドレスを入れているポインタのconst変数には定数NULLを入れておき、
ifで関数ポインタ変数がNULLじゃなかったらアドレス先の認証関数を実行、とすると良いかもしれん。
これなら認証用関数の手がかりはほとんど無いからな。ダミーの関数でラップしておけば更に頑丈になる。
NULL定数を正常な認証用関数アドレスに書き換えるパッチをユーザーに配る必要があるが、
ユーザー名をキーに若干絡ませて暗号化とかしておけ。
416デフォルトの名無しさん:2007/02/25(日) 20:03:43
なにいってるの?
417デフォルトの名無しさん:2007/02/25(日) 20:20:15
>>415はアレだ。
物事を最初だけ聞いて「みなまで言わずとも分かった」と暴走するタイプだ。
418デフォルトの名無しさん:2007/02/25(日) 22:50:20
単にWizardBibleとか読んでわかった気になってるだけだろ
419デフォルトの名無しさん:2007/02/25(日) 23:34:20
江戸っ子は気が短いんでい!
420デフォルトの名無しさん:2007/02/26(月) 01:25:29
>>415 の言ってるようにクラック対策なら、↓こっちのスレで相談しなさい。

クラッキングの勉強の仕方を教えてください
http://pc10.2ch.net/test/read.cgi/tech/1164783092/
421デフォルトの名無しさん:2007/02/26(月) 20:35:33
VC++自体よくわからんが
ゲーム制作で俗に言うC++ってVC++のこと?
ゲーム制作の参考書買いに行ったがVC++ばっかりで混乱・・・
ちなみにC++の基礎はマスターした。
422デフォルトの名無しさん:2007/02/26(月) 20:41:19
まあ、Windows対象のC++本ならほとんどはVC++を想定して書かれてると思ってもいいんじゃないかな。
423デフォルトの名無しさん:2007/02/26(月) 20:47:30
趣味と実益(基本情報技術者の試験)を兼ねてc言語を勉強しようと思います。
フリーコンパイラ使おうと思うんですがどれがいいでしょうか?
VisualStudio Expressで問題ないですか?
424デフォルトの名無しさん:2007/02/26(月) 20:53:55
趣味ならIDEも付いてるし、VC++でいいんじゃね?
425デフォルトの名無しさん:2007/02/26(月) 21:23:33
夢を壊すようで悪いけど
基本情報は何の実益にもなりません
426デフォルトの名無しさん:2007/02/26(月) 21:29:22
おいらのところは資格手当がでるよ
427デフォルトの名無しさん:2007/02/26(月) 21:33:03
実益というか「そんなのも取ってねぇのかよ」
といわれる会社もあるにはある
428デフォルトの名無しさん:2007/02/26(月) 22:43:59
>>442
サンクス
やっぱりVC++も頭に入れながらやってみる。
429デフォルトの名無しさん:2007/02/26(月) 23:06:02
WindowsならVC++かgccの二択だわな
430デフォルトの名無しさん:2007/02/27(火) 00:46:54
>>429
それを言うならVCかICCの二択だろ。
この期に及んでgcc使うヤツなんていないって。
431デフォルトの名無しさん:2007/02/27(火) 01:02:56
icc高すぎ
432デフォルトの名無しさん:2007/02/27(火) 01:13:14
>>431
じゃ、VCで我慢汁。
433デフォルトの名無しさん:2007/02/27(火) 16:50:30
>> 430

BCC + BCC Developer は?
もしかして却下?

Turbo Debbuger まで全部タダでそろうが…。

BCC Develoer のクラスでSTL使えたか忘れたが…。
434デフォルトの名無しさん:2007/02/27(火) 16:54:18
>>433
STLも使えたはず。
435デフォルトの名無しさん:2007/02/27(火) 17:00:16
>> 434

そうですか!情報提供ありがとうございます。
VCのMFCでは文字列クラスがSTLと共存できない使用だったはず…
最新バージョンでは使えるようになったのかな??
使えないなら BCC の方がよさそうに思いますが…。
436デフォルトの名無しさん:2007/02/27(火) 17:19:16
Borland C++よりVC++ (7.1以上)の方がテンプレートがまともに使える。
STLを使えるかどうか気にするなら、それだけでVC++を選ぶには十分。
MFCとの相性が悪いなら、むしろMFCなんて捨ててしまえ。
437デフォルトの名無しさん:2007/02/27(火) 17:21:18
Cコンパイラとして使うならbccよかgccのほうがマシだろ
438デフォルトの名無しさん:2007/02/27(火) 17:31:37
>> 436

たしかに自分使ってない。

>> 437

gcc は使ったこと無くて…
439デフォルトの名無しさん:2007/02/27(火) 17:44:30
BCCはいまだにC++コンパイラではない
Boostの些細なライブラリが通らないので
C++を知っている人間なら薦めない
(某サイトは特集していたが)
MFCがBoostやSTLやだれそれと共存できないなんてことはない
440デフォルトの名無しさん:2007/02/27(火) 17:47:44
>> 439

いえ自分が言っていたのは MFC内で使われている 文字列クラスと
STL の string クラスの互換性の話…。

MFCをポイすれば悩むこと無いでしたが…
441デフォルトの名無しさん:2007/02/27(火) 17:55:10
>>440
MFCの文字列クラスとSTLのそれを混在させなきゃいいだけの話じゃないの
442デフォルトの名無しさん:2007/02/27(火) 18:10:26
>>440
文字列に限らずコンテナ類も互換性がないが、それより
「互換性がない」と「共存できない」じゃまるで意味が違うだろが。
443デフォルトの名無しさん:2007/02/27(火) 18:14:12
たしかにMFCのCStringTとstd::basic_stringは別物だが、
相互に変換できないわけではないし、
Boost.Range(或いはイテレータ)では統一的に扱えるんだから、
そこまで気にすることは無いと思う。
444デフォルトの名無しさん:2007/02/27(火) 19:00:22
>> 443

参考になりました。ありがとうございます。
445デフォルトの名無しさん :2007/02/27(火) 19:33:39
template<class T>class A{
 private: T na;
 public: A(T a):na(a){};
 friend A<T> operator + <T>(A<T>&,const A<T>&);
};
template<class T>class B{
 private: T nb;
 public: B(T b):nb(b){};
  friend B<T> operator + <T>(B<T>&,const B<T>&);
};

template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;}
template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;}
でBのメンバ変数にアクセスできないのはなぜ--??
446デフォルトの名無しさん:2007/02/27(火) 20:23:37
>> 445

template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;}
template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;}

template<class T>A<T> A<T>::operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;}
template<class T>B<T> B<T>::operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;}

とすればいいのでは?
447デフォルトの名無しさん :2007/02/27(火) 21:03:12
friend関数なのでそれでも無理っぽいです。
448デフォルトの名無しさん:2007/02/27(火) 23:08:00
int x;
int &rx = x;

これおかしくね?
&rx = x; 何でアドレスにint型の変数を代入するの
449デフォルトの名無しさん:2007/02/27(火) 23:08:45
「参照」を知らない香具師は基礎からC++やり直せ
450デフォルトの名無しさん:2007/02/27(火) 23:45:33
(int &)rx=x;
rはreferenceのr
宣言時に型の直後に&をつけたものは参照型になる
嘘です
451デフォルトの名無しさん:2007/02/28(水) 13:09:55
ネットで落としてきたcppファイルとdefファイルを使ってdllを作成したいんだけど、
やり方がよくわかりません。

ぐぐって見たところ、
ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library or MFC Appwizard(dll) を選んで
もにょもにょするって書いてあったんですが、↑の時点で2種類のやり方があってどっちが正解かわからないですし、
そもそも貰ったファイルをdll化することが目的なので新規作成からやるのは何か間違っている気がします。

とりあえずcppファイルを開いてコンパイルして、、、defファイルをプロジェクトに追加。
そして再度コンパイルをしてみても・・・無理でしたorz

どなたか助言をお願いします…

環境はvisual V++ 6.0 Standard Editionです。
よろしくお願いします。
452デフォルトの名無しさん:2007/02/28(水) 13:14:23
>>451
dllを新規作成するからあってるのでは?
そのdllプロジェクトにソースを追加してモニョモニョするんだと思うんだけど。
453451:2007/02/28(水) 13:35:42
うは…なるほど、そういう解釈ですか…

とりあえず
ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library
を選んで空のDllオブジェクトを選択して(この時点で意味不明ですが…他選ぶとどうなるの…?)

プロジェクトの追加でcppを選んでビルドしてみたら何故かdllファイルが出来上がっていました
個人的にはキタ━━━━(゚∀゚)━━━━!!!!
でもどうなってんのか全然だ(ノ∀`)

dllにもフォーマットがあって、cppファイルに則したやり方じゃないとうまく生成されないのだろうか。
ちなみにMFC Appwizard(dll)の方で作ろうとしたら、エラーがでて生成されませんでした。なんでやねん(;´Д`)

それ以前に先ほどDllを作成したときには、プロジェクトの追加でcppファイルを追加したわけですが、
defファイルは追加しなくてもいいんでしょうか?
勝手に追加されるから特に選択する必要はないということでしょうかね・・・(ソースによりけりなのかもしれないけれど)
454デフォルトの名無しさん:2007/02/28(水) 14:19:10
def ファイルは関数のエクスポートに必要
__declspec(__dllexport) を関数につけてないのなら
def無しで作った場合、出来上がったDLLはどこからも呼べないものになってると思うが
depends.exe 持ってないか?
455451:2007/02/28(水) 15:00:26
depends.exeとはDependency Walkerのことなのかな…?

とりあえず、defファイルを追加せずにdll化するとまずそうなので、先ほどの手順で
プロジェクトの追加からcppファイルとdefファイルの両方を追加して見ました。
すると…エラーなしでdll化キタ━━━━(゚∀゚)━━━━!!!!

これで関数もエクスポートできるようなまともなdllになったのかな…

とりあえずDependency Walkerを起動してみて調べたところ、左のツリー状のところに
TEST.dll
  l
  −KERNE32.dll
     l
     −NTDLL.dll

ってなってました。自分にはさっぱりですが、正常にdll化できたと思ってよいのでしょうか(;´Д`)?
456デフォルトの名無しさん:2007/02/28(水) 15:13:48
DLLの関数のエクスポートのやり方は2種類あるのよ
・関数に__dllexportを付ける
・.defファイルに纏めてエクスポートする関数を書く。
どっちでもおk。俺は見やすいからdefの方でやる。
457451:2007/02/28(水) 15:41:47
なるほど…
まだまだ不勉強なようですね。
でも、ねんがんのdllをてにいれることができたので、レスを下さった方々にはお礼を言いたいと思います。

どうもありがとうでした・゜・(ノA`)・゜・
458デフォルトの名無しさん:2007/02/28(水) 16:58:10
>>455
そのTest.dll にカーソルあわせたら
右の下のFunction に一覧出るべ
それがエクスポートされたやつね。
459デフォルトの名無しさん:2007/02/28(水) 17:29:16
今日からマイクロソフトのVisualC++2003をし始めたんですが、どこかのサイトで
見つけた同じC++の例文とか書いてみても実行したとたん画面が消えるのはなぜですか?

printf とか cout っていうのとかって一緒に使えますか?
460デフォルトの名無しさん:2007/02/28(水) 21:40:45
終了したらウィンドウが消えるのは当たり前だろ…
461デフォルトの名無しさん:2007/02/28(水) 22:54:40
Cのポインタについてなのですが
int c;
int *p; /* ポインタの宣言 */
c = 1;
p = &a;
とすると、pにaのアドレスを代入
*p = 1;
ならpの中のアドレスのさす変数aに1を代入
ですよね?

*がない場合はアドレスを入れるものだと思ってたのですが
文字列を扱うときには
char *p = "ABC";
宣言時だろ*があったのですが
後から代入するときには
char *p;
p = "ABC";
という風に*がありませんでした
アドレスの代わりにABCが入ってるのですか?
どのような解釈をすればよろしいのでしょうか
教えてください

462デフォルトの名無しさん:2007/02/28(水) 23:02:30
char *p = "ABC";は「char *」という型の変数pを宣言していると考えろ。
*をcharではなくpのほうへにくっつけて書くのは慣習的な理由。

こう書いても同じ意味になる。
typedef char * pchar_t;

pchar_t p = "ABC";
463デフォルトの名無しさん:2007/02/28(水) 23:35:19
宣言時代入と、後から代入が同じということはわかりました、ありがとうございます

では
*p = 1でaに代入されるのはどういうことでしょうか?
*とpを書いているのは、アドレスの指す変数に代入と考えていいのでしょうか?

それと
p = "ABC";
の場合はアドレスの代わりにABCが入っていると考えていいのでしょうか?
464デフォルトの名無しさん:2007/02/28(水) 23:39:11
OS:Windows XP Professional Version 2002 Service Pack 2
開発環境:Microsoft Visual C++ 6.0

===やりたいこと===
ChemDrawという化学構造を描画するソフトウェアのファイルフォーマットであるcdx形式のファイル(バイナリ)を読み込みたい

===これまでに実施した内容===
まず、CDXファイルフォーマットに関しては以下のページに書かれています。(英語)
 http://www.cambridgesoft.com/services/documentation/sdk/chemdraw/cdx/index.htm
その内、バイナリファイルを読み込む際に事前に定義されたヘッダーファイルが以下のページのファイルです
 http://www.cambridgesoft.com/services/documentation/sdk/chemdraw/cdx/IntroCDX.htm
のリンクにある
 http://www.cambridgesoft.com/services/documentation/sdk/chemdraw/cdx/CDXConstants.h
のファイルがcdxファイルフォーマットを読み込む際に使用するヘッダーファイルです。この中で
 typedef UINT16 CDXTag;
 typedef INT32 CDXObjectID; // signed for now, due to mac compiler bug?
という行があるのですが、私の開発環境ではUINT16とINT32という型が存在しないため、コンパイルをしても
 c:\hogehoge\cdxconstants.h(54) : error C2146: 構文エラー : ';' が、識別子 'CDXTag' の前に必要です。
とエラーが出てしまいます。そこでUINT16ってなんだ?ってことを調べ始めて、
 ・UINT16は16bitのUINT
 ・「.NET Framework クラス ライブラリ」 においてUINT16は定義されているらしい
  http://msdn2.microsoft.com/ja-jp/library/system.uint16(VS.80).aspx
ってところまでは分かったのですが、何をしたらいいのかお手上げ状態になってしまいました。
とりあえず、このヘッダーファイルがコンパイルで通るようにしたいです。よろしくおねがいします。
465デフォルトの名無しさん:2007/02/28(水) 23:42:32
UINT16は最近のPlatform SDKに入っている
<windows.h>(の中でインクルードされているファイル)の中で宣言されている。
今回のものと.NET Frameworkのは関係ない。

手っ取り早く対処するなら、
そのヘッダをインクルードするより先に自分で宣言してしまえばよい。
typedef unsigned __int16 UINT16;
typedef __int32 INT32;
466デフォルトの名無しさん:2007/02/28(水) 23:45:54
>>463

> int * pa; // (A)
変数paはintへのポインタであることを示す。

> *pa = 1; // (B)
> b = *pa; // (B)
*paの*は、ポインタpaが指す場所に対して代入したり値を取り出したりする。

俺の推測だが
(A)と(B)の*を無理やり同じ意味にしようとしているのか。
467デフォルトの名無しさん:2007/02/28(水) 23:50:01
>>463

char *p; と宣言している以上は、
ポインタpに入れられるのは(char *)だよ。

"ABC"だってどこかのメモリに存在するわけで
アドレスがあるよ。

468デフォルトの名無しさん:2007/02/28(水) 23:52:21
>>461

> p = &a; 
> とすると、pにaのアドレスを代入 
> *p = 1; 
> ならpの中のアドレスのさす変数aに1を代入 
> ですよね? 

そうだね
469464:2007/02/28(水) 23:55:46
>>465
おおお動きました^^;

最終的に
typedef unsigned __int16 UINT16;
typedef unsigned __int32 UINT32;
typedef __int32 INT32;
の3行追加で何とか認識できました。

ありがとうございました!!
470463 461:2007/03/01(木) 00:04:47
>>466
同じ意味かと思ってました
理解できました
ありがとうございました

>>467
納得できました、ありがとうございました

>>468
ありがとうございます


皆さん本当にありがとうございました
471471:2007/03/01(木) 00:12:14

/************************************************************************/
/* 機能 : port5のLEDを交互に点滅させる。 */
/* */
/* 作成日 : 2007/2/27 */
/* 作成者 : 佐々木 */
/************************************************************************/

作ったプログラムソースをメモリーステックに保存して、別のパソコンでソースを
開いたら、
こんなにレイアウトが崩れてしまいます。
使っているコンパイラはBCCとGCCなのですが、
どうしたらいいですか?
472デフォルトの名無しさん:2007/03/01(木) 00:18:21
>>466
> (A)と(B)の*を無理やり同じ意味にしようとしているのか。
そういうこと。「『*pがchar型になる』と読める」というような説明はよく見かける気がする。

ttp://kmaebashi.com/programmer/pointer.html
> K&Rによれば、Cの宣言は、「変数が現われ得る式の構文を真似た(P.114)」そうである。
> しかし、本質的に全く異なるものを無理に似せようとしたため、
> 結局わけのわからない構文になってしまっている。
473デフォルトの名無しさん:2007/03/01(木) 00:21:10
>>471
ソースは同一でパソコンを変えただけなんだね。
使用しているエディタが違うとかフォントが違うとかじゃないの。
474471:2007/03/01(木) 00:30:18
フォントをいじればいいのですね。
スペースとかTabで崩れてると思うし。
475デフォルトの名無しさん:2007/03/01(木) 00:37:01
>>474
タブがスペース何文字分なのかは迷惑な話だよね。
476471:2007/03/01(木) 00:51:51
文字サイズをいじっても良くはなりませんでした。
そのTabがスペース何文字分かを設定するのはどこからですか?
477471:2007/03/01(木) 00:59:41
漏れ的には、
関数の紹介文は
/*************/
/*___________*/
こんな感じでアスタリスク埋めして正確な文字数が出てるし、
TABは避けるべきだったかなと思いますた。
文頭はいいとは思うけど。
  char *NEET;
みたいに。
478デフォルトの名無しさん:2007/03/01(木) 02:32:22
deleting Debugって出てメイクできないんですが、イミフです
ググったら全角スペースが原因とかプロジェクト設定をwinにすれば良いとか
出てたのですが、何やってもダメです。
ちなみにReleaseだと実行できます。

何が原因なのでしょう・・・?
コンパイラはbccです。
479デフォルトの名無しさん:2007/03/01(木) 05:01:02
>>478
bccを捨てるのはどうでしょう。

>>477
囲う手間の割りに見栄えがよくないので、左側だけにすることをお勧めします。
ついでにDoxygenコメントを埋めてこんな感じ。
////////////////////////////////////////////////////////////////
/// \brief あーたら処理
///
/// なにやら処理するらしい。
/// \param[in] para パラメータ構造体
/// \return 処理結果
/// \author だれそれ
/// \date いついつ
//
説明を書き換えるだけで右側の桁を揃え直す手間を掛けるなんてナンセンスですよ。
480デフォルトの名無しさん:2007/03/01(木) 09:19:13
class classname
{
classname(): root(0) {....}
}
とあったんですが、この書式って正しいんですか?正しければ意味とか説明があるサイトを紹介してくださいませ。
僕の持ってる本にはこのような書き方が載ってないです。。
(標準講座C++)
481デフォルトの名無しさん:2007/03/01(木) 10:29:32
コンストラクタ 初期化リスト でググれ
482デフォルトの名無しさん:2007/03/01(木) 10:31:50
>>480
メンバにrootという変数があるなら正しい。コンストラクタ初期化子でぐぐれ。
ちなみに俺が買った教本にも載ってなかった(C++クラスと継承完全制覇)
483デフォルトの名無しさん:2007/03/01(木) 13:00:29
クラス周りではかなり重要な項目だから、
載せてないなんて信じがたいけどなあ…
484デフォルトの名無しさん:2007/03/01(木) 13:28:59
>>481,482
さんきゅ!分かりました。
本買い直すかな。。
485デフォルトの名無しさん:2007/03/01(木) 15:06:57
C++でディレクトリ操作することは可能ですか
486デフォルトの名無しさん:2007/03/01(木) 15:37:09
>>484
標準講座C++(独習も)はいい本だから買いなおさなくてもいいよ。
コンストラクタでの初期化子についての記述が無いのは有名なバグ。他の内容はわりといい。
487デフォルトの名無しさん:2007/03/01(木) 15:46:42
>>485
ディレクトリ操作は OS 依存になるから、
OS がワカランとはっきりしたことは言えない。
大抵は mkdir と chdir があると思うが、
もっと複雑なディレクトリ操作のできる API が
OS ごとに用意されてると思う。
488463 461:2007/03/01(木) 21:33:57
>>472
ありがとうございます
489デフォルトの名無しさん:2007/03/01(木) 22:28:08
vxworksでUDP受信のみ(ブロードキャスト)でタイムアウトを検出するにはどうすればいいでしょう?
winsockとかにはそれらしいのがあるのですが、socklibには無いようで・・

とりあえず、ブロッキングされてると、タイムアウトは検出できない気がしました。
環境がまだないので試してませんが、↓のようにすれば受信はできますでしょうか?
アドバイスよろしくお願いします。vxwoksとか検索しても出てこない(ノ-`)

*********************************************
struct sockaddr_in my_recaddr;

my_recaddr.sin_family = AF_INET;
my_recaddr.sin_port = portNum;
my_recaddr.sin_addr.s_addr = INADDR_ANY;//ブロードキャストを受信するために必要っぽい?

fd=sock(AF_INET,SOCK_DGRAM,0);
bind(fd,(struct sockaddr*)&my_recaddr,sizeof(my_recaddr));//ブロードキャストを受信するために必要っぽい?

while(1){
☆ ret = recv(fd, (char*)buf,sizeof(datasize));
if( ret ){
//他のタスクに受信データを送信
  //タイムアウト解除通知+カウントしたものを初期化
}else{
//何かカウントして、タイムアウト通知
}
}
*********************************************
ブロッキングだと、受信するまで☆で止まってるという認識でいいんでしょうか?
490デフォルトの名無しさん:2007/03/03(土) 04:02:10
Visual C++を使ってトランプの神経衰弱のようなゲームを作っています。

COMプレイヤーが4人、「You」プレイヤーが1人で遊ぶようにして
いるのですが、「You」プレイヤーの番が終わり、COMプレイヤーが
カードをめくったりしている間、マウスの入力を受け付けることが
できません。例えばウィンドウの右上にある「X」ボタンを押して
も反応がありません。おそらく WM_PAINT内でCOMプレイヤーの
カードをめくる処理をやっているためだと思われますが...。
COMプレイヤーがカードをめくった後、少しだけ delay を入れて
めくったカードがしばらくの間表示されるようにしてあります。

COMプレイヤーの処理はどこでやると、この問題が避けれるので
しょうか?
491デフォルトの名無しさん:2007/03/03(土) 07:39:10
>>490
たとえばWM_TIMERで1人ずつ処理する。
1つのメッセージでreturnせず続けて全部やるから何も受け付けなくなる。
492デフォルトの名無しさん:2007/03/03(土) 09:32:45
それかスレッドを使う
493デフォルトの名無しさん:2007/03/03(土) 10:45:58
>>491 & >>492
ありがとうございます。こういう時はWM_TIMERでやるか、スレッドを
使えばいいんですね。いまだに昔のBASIC(PC-8001)や、DOS のプログラ
ミングから抜け切れてないんでそんな当たり前のようなことも思いつか
なかった....
494デフォルトの名無しさん:2007/03/08(木) 01:48:30
VC++になりますが質問させていただきます
これを使って簡単なゲームプログラミングを参考書に沿って学習していってるのですが、
ビルドしたら以下のようなエラーが出ました

-----------------------------------------------------------------

\○○\my documents\○○\dicegame\dicegame\Form1.h(117) : error C2039: 'button1_Click' : 'Dicegame::Form1' のメンバではありません。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(22) : 'Dicegame::Form1' の宣言を確認してください。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(117) : error C2065: 'button1_Click' : 定義されていない識別子です。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(117) : error C3350: 'System::EventHandler' : delegate コンストラクタには 2 つの引数が必要です

------------------------------------------------------------------

書籍に沿って行っていっているのでエラーなんか出るはずないのですが・・・
なにとぞ対処の仕方をお願いします。

※○○はフォルダの名前
495デフォルトの名無しさん:2007/03/08(木) 02:08:13
ネイティブと.NETの区別をつけましょう
496デフォルトの名無しさん:2007/03/08(木) 02:21:28
詳細をお願いします。
497デフォルトの名無しさん:2007/03/08(木) 10:12:37
プロジェクトはどれを選んで新規作成したよ。
そっから間違ってるんだよ、たぶん。
498496:2007/03/10(土) 17:09:38
すいません、返事が遅れました

>>497
どれをというのは何でしょうか?
多分プロジェクトの種類は「CLR」だと思います。
すいませんがageさせていただきます
499496:2007/03/10(土) 18:02:54
最初からやり直したところ、ちゃんと出来ました
お騒がせしました
今後も質問することがあるかもしれないので何卒おながいします。
500496:2007/03/10(土) 18:47:18
すいません、早速質問させてもらいます
今度は

private: System::Void button1_Click(System::Object^ sender, System::EventArgs^ e) {
if (radioButtonKisu->Checked == true){
MessageBox::Show("奇数が選択されました");
}
};
}


---------------------------------------

if (radioButtonKisu->Checked == true){

これを打ち込むとまたエラーが出てしまいました。
勿論、書に沿ってるだけです。
さっき解決したのでは、「 MessageBox::Show("ボタンが選択されました"); 」
のみのクラスを入れた構文であって、それにif構文を追加しただけで、エラーが出たという事です
対処法お願いします。
501デフォルトの名無しさん:2007/03/10(土) 18:56:45
>教えてクン養成マニュアル
>2. 情報を開示しないこと
>トラブルの場合は、状況を正確に記述してはならない。
>「なんだかうまく動きません。」とか「エラーが出ます。」等と具体的なことは何も書かないことが重要である。
502デフォルトの名無しさん:2007/03/10(土) 19:04:55
しかも解決した時も礼は言わないわ
どこをどう変えたら解決したかを言わないわで散々だな。
503496:2007/03/10(土) 19:10:30
すいません、ほんとお願いします。
書籍どおりやってるのにエラー出られたらたまりません
対処法なんて分かりませんし・・・
大体エラーが出る自体分かりません
504デフォルトの名無しさん:2007/03/10(土) 19:16:01
出版社にお問い合わせください
505デフォルトの名無しさん:2007/03/10(土) 19:22:13
とりあえず平謝りしておいて
自分が本当に困っていることを主張するとか、
マジで教えてクンのテンプレみたいな奴だな
釣り?
506デフォルトの名無しさん:2007/03/10(土) 19:23:09
>>503
いい加減にしやがれ!
こっちょは、その本を見ているわけじゃないし
お前が出したエラーを透視してみることが出来るわけじゃない。

情報を出せとか
どうやったのかいえってんのを無視すんなよ。

↓こうすればここではエラーでなくなるよ。
/* if (radioButtonKisu->Checked == true) */ {

507デフォルトの名無しさん:2007/03/10(土) 19:23:45
エラーにも色々あるけど、こっちからはどんなエラーが出ているのか
お前のPCを覗き込めない。せめてエラーメッセージの丸写しくらいしろよ。
アドバイスをもらう気があるのなら。
508496:2007/03/10(土) 19:31:17
>>506
それを打ち込んでもエラーでました

>>507
.\DiceGame.cpp(6) : error C2143: 構文エラー : ';' が 'using' の前にありません。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(25) : error C2059: 構文エラー : 'インライン関数のヘッダー'
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(25) : error C2143: 構文エラー : ';' が '{' の前にありません。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(25) : error C2447: '{' : 対応する関数ヘッダーがありません (旧形式の仮引数リスト?)
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(183) : error C2039: 'pictureDice4_Click' : 'DiceGame::Form1' のメンバではありません。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(22) : 'DiceGame::Form1' の宣言を確認してください。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(183) : error C2065: 'pictureDice4_Click' : 定義されていない識別子です。
c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(183) : error C3350: 'System::EventHandler' : delegate コンストラクタには 2 つの引数が必要です
.\DiceGame.cpp(6) : error C2059: 構文エラー : ';'
.\DiceGame.cpp(19) : fatal error C1075: 左側 中かっこ '{' に対応するものが 'c:\documents and settings\○○\my documents\○○\dicegame\dicegame\Form1.h(4)' で見つかる前に EOF が検出されました。

以上のエラー出力が出ました
○○はフォルダ名

すいませんがよろしくおながいします
509デフォルトの名無しさん:2007/03/10(土) 19:34:41
{と}の数があってない。
文法知らないならやめておくべき。
510デフォルトの名無しさん:2007/03/10(土) 19:37:01
>>508
どっかで間違えて
そのせいで次のところがエラーになって
以降ぼろぼろってヤツだな。
511496:2007/03/10(土) 19:37:24
どういうことですか?
512496:2007/03/10(土) 19:38:04
>>510
本に沿ってるだけで間違うなんてことはありえません
それにまだ序盤です
513デフォルトの名無しさん:2007/03/10(土) 19:38:41
>>511
CやC++の使い方を知らないうちに
ウィザード頼りにプログラムを書き始めるのは無謀だ、ということ。
514デフォルトの名無しさん:2007/03/10(土) 19:39:07
>>512
間違えていないんじゃ直すこと出来ないな。
515デフォルトの名無しさん:2007/03/10(土) 19:40:52
何の本か知らないけど
その本が古いとか。
516496:2007/03/10(土) 19:41:42
すいません、説教はいいので解決法をお願いします。
517デフォルトの名無しさん:2007/03/10(土) 19:42:05
はいはい釣り師釣り師
518デフォルトの名無しさん:2007/03/10(土) 19:44:55
>>516は偽者です。いい加減にしてください。
本当に困っているのでなんとかしてください。おながいします。
519496:2007/03/10(土) 19:45:05
>>515
新しいです

>>517
はあ?
520デフォルトの名無しさん:2007/03/10(土) 19:45:31
>>516
えー!
ヒドイヨ〜
521デフォルトの名無しさん:2007/03/10(土) 19:47:39
>>518
正直言って判らない。
これってC++を拡張したC++/CLIってやつだよね。
そっちのスレニ池!

こういうのって最初のエラーを直すと以降のエラーが変わるかもしれない。

.\DiceGame.cpp(6) : error C2143: 構文エラー : ';' が 'using' の前にありません。 

ここかここより前にへんなことが起きているのかしら。
522デフォルトの名無しさん:2007/03/10(土) 19:48:34
>>519
いい加減にしてくださいと言っているでしょう
怒らせないでください
523デフォルトの名無しさん:2007/03/10(土) 21:09:19
どう考えても釣りなんだからスルーしとけよ
524デフォルトの名無しさん:2007/03/12(月) 11:56:59
>>489
もう見てないor解決してると思うけど…

>vxworksでUDP受信のみ(ブロードキャスト)でタイムアウトを検出するにはどうすればいいでしょう?
selectを使って受信の検知とタイムアウトを行えばいい。その為の関数だから。

>ブロッキングだと、受信するまで☆で止まってるという認識でいいんでしょうか?
いいと思うよ。エラーでも返ってくるけどね。
525デフォルトの名無しさん:2007/03/12(月) 17:16:10
ビルドエラーしたさいの対処法が分かる書籍とか売ってますかね?
526デフォルトの名無しさん:2007/03/12(月) 18:22:46
そんなネガティブな本あるのか…
527デフォルトの名無しさん:2007/03/12(月) 18:34:19
>>525
ビルドエラーは固有のモノも多いから専門書籍はないと思う

クリティカルなエラーならヘルプを見るのが一番いいんじゃないかな
たとえばVisual Studio使ってるならエラー番号で検索掛けると原因と微妙ながらも対処も出てくる。

コンパイラの名前とエラー番号を条件にググるのもアリかと。
528デフォルトの名無しさん:2007/03/13(火) 00:15:15
>>527
VC++を使っております。
これでも同じように対処できますか?
529デフォルトの名無しさん:2007/03/13(火) 00:55:15
>>528
これでもってVC++のことか
Visual Studioのことじゃないか
530デフォルトの名無しさん:2007/03/13(火) 00:55:48
>>528
VCでも問題無い筈。
デフォルト設定ならF1押すとヘルプでない?
531デフォルトの名無しさん:2007/03/13(火) 00:58:42
コンパイラやバージョン変われば役に立たなくなる本なんて作らないだろうな。
作ってもたまに注文があればいいほうですぐに返品でしょ。
それにどうせお前らは奇怪なコード書いて
それに対して奇怪なエラーメッセージが出るから
対処法なんて予測不可能で難しい。
532デフォルトの名無しさん:2007/03/13(火) 01:11:08
>>529
EEです(Express Edition

>>530
ヘルプは出してます。
問題の、出力エリアに表示されるコンパイルエラー内容を解決したいのですが、
トークンがどうのこうのインラインがどうのこうの色々出ておりまして・・・
これをほんと、どうにかしたいのですが
533デフォルトの名無しさん:2007/03/13(火) 01:17:01
try~catchで0除算エラーが起きた場合に投げられるエラーの種類を教えてください。
534デフォルトの名無しさん:2007/03/13(火) 01:22:36
基本的にC++の例外処理で捕まえられるものではない。

でもVisual C++なんかだと/EHa付けておけばcatch (...)で捕まえられる。
_set_se_translaterを使えば自作の例外クラスのオブジェクトに変換できる。
535デフォルトの名無しさん:2007/03/13(火) 02:08:58
>>532
ヘルプは出すだけじゃダメだ

後、使ってるのがC++だからここで質問したんだと思うが
でもな聞いてるのはVS固有の問題だろ?
つまりスレ違いだ。
536デフォルトの名無しさん:2007/03/14(水) 00:04:46
例外に関して、よく「巻き戻す」という表現をすることがあるようですが
巻き戻してもう一度tryブロックの最初からやり直すようなことはできないのでしょうか?

HANDLE h = NULL;
try
{
function(h);
}
catch(null_exception& e)
{
write_log();
h = valid_value;
}

こんな感じになる処理できるかと思ったのですが・・・
537デフォルトの名無しさん:2007/03/14(水) 00:14:45
コンストラクタの動作について質問です。
画像の描画を行うクラスがあり、そのコンストラクタ内部で
データの読み込みを行っているのですが、その読み込みに失敗した場合は
クラスのインスタンスを作成しないようにしたいのです。

class drawImage {
drawImage() {
 //グラフィックデータのロード
 if( loadFile(filename)==FALSE ) {
  // ロードに失敗したら
 }
 //成功したらパラメーターの初期化等を行う
}

drawImage *img = new drawImage(); // ←初期化に失敗してたらNULLが入ってて欲しい

このようなクラスがあったとして、
インスタンスを作成する際に画像データの読み込みに失敗したらimgにはNULLが入るようにしたいのです。

こういう場合はどのように記述すればよいのでしょうか?
それとも、こういう事は出来ないのでしょうか?
できれば例外を使わないで実装したいのですが・・・
538デフォルトの名無しさん:2007/03/14(水) 00:20:53
drawImageクラスをsingletonにしちまう
539デフォルトの名無しさん:2007/03/14(水) 00:21:31
。。。factory
540デフォルトの名無しさん:2007/03/14(水) 01:17:36
>>537
作り方が変過ぎる。

オマエのコンストラクタがロードに失敗した事を呼出し元に返せるならnewを自分で書けばできる。
newは演算子だからな。
541デフォルトの名無しさん:2007/03/14(水) 02:27:42
>>536
これでどう?
HANDLE h = NULL;
for (; ; ) {
    try {
        function(h);
        break;
    }
    catch(null_exception& e) {
        write_log();
        h = valid_value;
    }
}
542デフォルトの名無しさん:2007/03/14(水) 08:55:28
>>536
でも、C++の例外でやり直し型の例外がないのは要らないと言う結論に達したから。
543デフォルトの名無しさん:2007/03/14(水) 09:20:26
もうgoto使っちゃえよ
544デフォルトの名無しさん:2007/03/14(水) 15:32:58
537です。

>>540
>オマエのコンストラクタがロードに失敗した事を呼出し元に返せるならnewを自分で書けばできる。
コンストラクタが値を返せるようにできるんですか?
newをオーバーロードすれば、>>537のような事ができるんでしょうか。
やり方があれば教えて欲しいです…
545デフォルトの名無しさん:2007/03/14(水) 15:43:56
546デフォルトの名無しさん:2007/03/14(水) 15:57:40
で、new をオーバーロードしたとして。
ローカルに作ったやつはどーすんの?
547デフォルトの名無しさん:2007/03/14(水) 16:01:05
コンストラクタをprivateにするか、使用可能/不可能フラグ使うか、
好きに選べばいいんじゃない?
548デフォルトの名無しさん:2007/03/14(水) 16:11:39
いや、元の質問者はどういう想定をしてるのかなと
549デフォルトの名無しさん:2007/03/14(水) 16:13:40
後者を考えていたに1票
550デフォルトの名無しさん:2007/03/14(水) 16:44:29
コンストラクタは引数持てないだろ・・・
だから「オマエのコンストラクタ」ってワザワザ書いてる

方法は>>547が書いてくれてる通りフラグを持たせて外部で判断

>作り方が変過ぎる。
↑を無視するな
オマエがしたいと言うから答えたが、インスタンスを拒否するクラスなんて聞いた事が無い。
newでしか作れないクラスって普通オカシイと思わないか?
551デフォルトの名無しさん:2007/03/14(水) 16:47:27
スルーされているが、>>539が正攻法だと思う。
552デフォルトの名無しさん:2007/03/14(水) 17:07:49
>>551
コンストラクタの機構だけでしたいって事だからスルーされたんじゃないのか?
553デフォルトの名無しさん:2007/03/14(水) 17:32:20
537です。レスありがとうございます。

class drawImage {
drawImage(char* filename) {
 //グラフィックデータのロード
 if( loadFile(filename)==FALSE ) {
  // ロードに失敗
 }
 //成功したらパラメーターの初期化等を行う
}

drawImage *img = new drawImage("image.data"); // ←初期化に失敗してたらNULLが入ってて欲しい
if(img==NULL ) return; // インスタンスがなければ処理を抜ける


こういう使い方を想定しています。
>>547さんの言うように使用可能フラグを使うとすると、
毎回状態をチェックして自前でdeleteしてあげなくてはならないので面倒かなと。。。
コンストラクタ内の初期化で失敗していたら勝手にdeleteされる
(そもそもインスタンスが作られない)という風にしたかったんです。

>>550
>オマエがしたいと言うから答えたが、インスタンスを拒否するクラスなんて聞いた事が無い。
確かにそうですが、エラー処理で初期化失敗してたらdeleteするようなケースだと
最初っからインスタンスが作られなければ便利だと思ったので…
こういう考えってあんまり一般的ではないんでしょうか?
554デフォルトの名無しさん:2007/03/14(水) 17:37:25
>newでしか作れないクラスって普通オカシイと思わないか?
ああ!スイマセンわかりました!!

もし俺が言うような仕組みが実装できた場合、newじゃないインスタンス化が出来なくなりますね。
drawImage img;
↑のような場合にコンストラクタ内部で失敗したらどうなるか考えてませんでした…orz

フラグなりfactoryパターンなりで実装します。
お騒がせしました。


555デフォルトの名無しさん:2007/03/14(水) 17:38:42
超超低レベルな質問だが、C言語のコンパイラの仕方が分からない……。
BorlandからソフトもDLして、インストールもしたんだが……。
どうすればいいのですか?
556デフォルトの名無しさん:2007/03/14(水) 17:39:26
×コンパイラの仕方
○コンパイルの仕方
557デフォルトの名無しさん:2007/03/14(水) 17:42:30
>>549
何も考えていなかった、が正解でした。
558デフォルトの名無しさん:2007/03/14(水) 17:43:06
bcc ****.cと入力してエンタ押しても、

エラー E2209 ****.c 1: インクルードファイル 'stdio.h'をオープンできない
警告 W8065 ****.c 5: プロトタイプ宣言のない関数 'printf' の呼び出し(関数 main)

と出るだけ……
559デフォルトの名無しさん:2007/03/14(水) 17:43:49
>>555
ソフトによって違う。
説明書で調べてわからなかったところを専用スレで聞け
560デフォルトの名無しさん:2007/03/14(水) 17:44:20
>>558
環境変数 INCLUDE を設定していない。
561デフォルトの名無しさん:2007/03/14(水) 17:44:56
フリーソフトだから説明書はありません。
562デフォルトの名無しさん:2007/03/14(水) 17:45:29
>>558
そりゃお前インクルードパスが通ってないんだよ
563デフォルトの名無しさん:2007/03/14(水) 17:46:23
インクルードパスって何ですか?
564デフォルトの名無しさん:2007/03/14(水) 17:46:54
×インクルード パス
○インド クルー パス
565デフォルトの名無しさん:2007/03/14(水) 17:47:32
>>563
bin/bcc32.cfg
は設定したぁ?

binフォルダにbcc32.cfgというファイルを作って
-I"c:\borland\bcc55\include"
-L"c:\borland\bcc55\lib\PSDK"
-L"c:\borland\bcc55\lib"
て書けばいいと思うよ。

ReadMeくらい読めよな低脳
566デフォルトの名無しさん:2007/03/14(水) 17:50:43
低脳なのは認めますが、できませんでした
567デフォルトの名無しさん:2007/03/14(水) 17:51:43
悪い
>>565
の各パスは自分の環境に合わせてくさい。
568デフォルトの名無しさん:2007/03/14(水) 17:53:46
全てデフォルトのままだから合ってるはずなんですが……
569デフォルトの名無しさん:2007/03/14(水) 17:59:49
おーけーわかった

コンパイルの時に、 

bcc32 -I"パス" [ファイル名]

でやってみて下さい。
パスはbinフォルダのIncludeフォルダを右クリック→プロパティの、[場所]という 所に書いてあります。
例えば

bcc32 -I"c:\borland\bcc55\include" [ファイル名]

こういう感じです。きっと出来るとおもいます
570デフォルトの名無しさん:2007/03/14(水) 18:05:29
できません……。
上と同じエラーがでます
571デフォルトの名無しさん:2007/03/14(水) 18:10:28
>>570 
では、
binフォルダのパスを教えてください。
パスはわかりますか??
572デフォルトの名無しさん:2007/03/14(水) 18:12:43
C:\Borland\Bcc55\bin
です
573デフォルトの名無しさん:2007/03/14(水) 18:19:06
そのbinフォルダにIncludeというフォルダはありますか?

574デフォルトの名無しさん:2007/03/14(水) 18:19:41
おいおいどこのサポートだよ
575デフォルトの名無しさん:2007/03/14(水) 18:20:21
ありませんでした。
でも、作っても無理でした
576デフォルトの名無しさん:2007/03/14(水) 18:20:54
作ったって、中にstdio.hが無けりゃ意味ねーだろ、インストールしなおせ
577デフォルトの名無しさん:2007/03/14(水) 18:26:02
Includeファイルがそもそもねーのかよ!!!!!!
大爆笑だよ!
578デフォルトの名無しさん:2007/03/14(水) 18:41:37
>>573 の内容が気になる
binと同じ位置にあるか聞いたつもりだったのだろうが、
中にあるかを答えてる気がする。
579デフォルトの名無しさん:2007/03/14(水) 18:44:58
>>578
そ、それは笑えねぇギャグだぜ・・・(ゴクリ
580デフォルトの名無しさん:2007/03/14(水) 19:35:38
うぁ……、そのギャグの通りです……。
もう一度インストールしてみました。
でも、Binと同じ位置にIncludeはありますが、その中にstdio.hはありません。
自分で作るんですか…?
581デフォルトの名無しさん:2007/03/14(水) 19:36:27
・・・・
ちょっと待て、いったいどれをインストールしたんだ?
582デフォルトの名無しさん:2007/03/14(水) 19:40:34
どれ、というのはどういうことですか…?
freecommandlinetools_update.exe をクリックして、次へを押し続けただけです
583デフォルトの名無しさん:2007/03/14(水) 19:42:26
今ダウンロードしてインストールしてみたが、ちゃんとできたぞ
ファイル名は freecommandlinetools2.exe だった
updateはインストール済みのbccがいるんじゃないのか?
584デフォルトの名無しさん:2007/03/14(水) 19:48:10
マジですか……!!
そこのURL教えてください
585デフォルトの名無しさん:2007/03/14(水) 19:51:48
もう外出ちゃって携帯だ
bcc フリー
でぐぐって最初のページだったかな
586デフォルトの名無しさん:2007/03/14(水) 19:52:56
外出中も携帯からこのスレをみてる>>583に軽く感動した
587デフォルトの名無しさん:2007/03/14(水) 19:56:39
できましたぁぁ!!!
ありがとうございました!!!
588デフォルトの名無しさん:2007/03/14(水) 20:00:16
失礼します。あまりに初歩的なことで恥ずかしいのですが・・・
Visual Studio 2005 Standard Editionに入ってるMFCを使ってるんですが、
↓のコードを実行しようとすると必ずエラーになります。

// CMy652View メッセージ ハンドラ

void CMy652View::OnTestTest()
{
AfxMessageBox("Hello");
}

エラー一覧には↓が表示されます。
エラー 1 error C2665: 'AfxMessageBox' : 2 オーバーロードのどれも、すべての引数の型を変換できませんでした

これはどうしたら改善できるでしょうか。
589デフォルトの名無しさん:2007/03/14(水) 20:02:54
590デフォルトの名無しさん:2007/03/14(水) 20:06:33
>>>589
ありがとうございます!見事に表示できました
感動しました、あなたが神ですか。
591デフォルトの名無しさん:2007/03/14(水) 21:11:36
簡単な計算式を表示させると、即ウィンドウが消えるんですが、それでいいんですか?
592デフォルトの名無しさん:2007/03/14(水) 21:16:39
>>591
それコンソールアプリでしょ。
そして表示後プログラムが終了しているんでしょ。

Windowsならコマンドプロンプトを起動して
そこで実行すればいい。
593デフォルトの名無しさん:2007/03/14(水) 21:22:15
>Windowsならコマンドプロンプトを起動して

どうやるんですか?
594デフォルトの名無しさん:2007/03/14(水) 21:24:27
スタート→プログラム→アクセサリ
595デフォルトの名無しさん:2007/03/14(水) 21:30:58
さんくすあろっと
596デフォルトの名無しさん:2007/03/14(水) 22:00:59
どうやらこのスレには天才が住んでいるようだな
俺には及びもつかん
597デフォルトの名無しさん:2007/03/14(水) 23:27:38
ファイル名を指定して実行 → cmd
598デフォルトの名無しさん:2007/03/14(水) 23:46:06
char temp[10];
gets(temp);
でいいじゃん
599デフォルトの名無しさん:2007/03/15(木) 10:36:50
ダメ。それをやるなら、getchar()の一つでも置く方がよっぽどマシ。
600デフォルトの名無しさん:2007/03/15(木) 10:57:39
コンソールプログラムならconio.hインクルードしてgetch()がとてもオヌヌメ。
dosのpauseコマンドみたな感じで止まる。
エンターキーじゃなくても進むし。
601デフォルトの名無しさん:2007/03/15(木) 13:39:15
インプットファイルに

ABCDE FGH IJKL

というような文字列があるとして、ブランクごとに抽出したい(ABCDEとFGHとIJKLの3つとして取り出す)
のですが、どうすればよいですか?
602601:2007/03/15(木) 13:43:06
ちなみにC++の方です。
603デフォルトの名無しさん:2007/03/15(木) 13:56:54
strtokでいんでね?
604デフォルトの名無しさん:2007/03/15(木) 13:57:39
#include <string>
#include <fstream>

std::string a, b, c;
std::ifstream is("hoge");
is >> a >> b >> c;
605601:2007/03/15(木) 14:06:25
>>603,604
すいません、stringでやったら普通にできました。
でも、ABCDEを抽出した後A B C D Eというように文字一つ一つ分けたいんです。
上手く説明できないのですが、
Aなら1、Bなら2、Cなら3、Dなら4、Eなら5、そしてその総和がいくつかという問題で、
文字の個数がバラバラでfinを使うわけにもいかなくて…
どなたか教えて頂けないでしょうか。
606デフォルトの名無しさん:2007/03/15(木) 14:30:00
>>605
>604のa, b, cから一文字ずつ取り出せばいいだろ。
607デフォルトの名無しさん:2007/03/15(木) 14:37:31
オーバーロードすることが可能な演算子 <<= の本来の役割って何なんでしょうか?

グローバルな演算子オーバーロードに = が使えないので
代わりに使おうかなと考えているのですが・・・
608デフォルトの名無しさん:2007/03/15(木) 14:41:38
+= とかとかわんないよ。

foo = foo << 4;
609デフォルトの名無しさん:2007/03/15(木) 14:43:45
なるほど
ストリームと関係のない所で使ったらややこしいか・・・
610デフォルトの名無しさん:2007/03/15(木) 14:45:06
ストリームじゃなくてビットシフト
ストリームもビットシフトを使わないからまったく別の用途でオーバーライド
611デフォルトの名無しさん:2007/03/15(木) 14:46:18
ビットシフトの可能性があるようなクラスでもない限り、<<=があったからってビットシフトだなんて思う香具師はいないだろ。
612デフォルトの名無しさん:2007/03/15(木) 14:53:42
ビットシフト失念してました

void operator〜
{
 CharStringToWideString(l,r);
}

みたいな定義なんでビットシフトと間違えることは多分ない気がします
613デフォルトの名無しさん:2007/03/15(木) 16:04:22
そういや、ストリーム I/O にビットシフト演算子使ったのは何処の莫迦なの?
614デフォルトの名無しさん:2007/03/15(木) 16:13:15
D&EによればDoug McIlroyが提案したと書いてある (8.3.1)。
615デフォルトの名無しさん:2007/03/15(木) 16:14:47
便利は便利だが全く気持ちが悪いな
616デフォルトの名無しさん:2007/03/15(木) 18:37:31
>>614
f(void) が気持ち悪いと言った人が
<< >> は気持ち悪くなかったんかいな。

…つーか、あんまり考えるのやめようかな。
言語仕様のすべてが汚物に見えてきそうだ。
617デフォルトの名無しさん:2007/03/15(木) 18:49:32
普通の関数がずらっと並ぶより、演算子を並べるほうが気に入ったらしい。
618デフォルトの名無しさん:2007/03/15(木) 19:40:41
POINT、RECTのdouble版short版ってあるんですか?
POINTSは見つかりましたが、他のが見つかりません
619デフォルトの名無しさん:2007/03/15(木) 20:15:13
あります。
少なくとも私のディスクの中に。
620デフォルトの名無しさん:2007/03/15(木) 20:55:34
良かったら教えてください
621デフォルトの名無しさん:2007/03/15(木) 20:56:43
探すより自分で作っちゃった方が早くね?
622デフォルトの名無しさん:2007/03/15(木) 21:00:18
というかRECTって組み込みで用意されてたのか
623デフォルトの名無しさん:2007/03/15(木) 21:07:51
>>622
<windows.h>の中(でインクルードされているヘッダのどこか)で定義されている型。
624デフォルトの名無しさん:2007/03/15(木) 21:16:11
型っていうか単にint型変数が4つ詰まっただけの構造体
625デフォルトの名無しさん:2007/03/15(木) 21:29:01
それは知ってるけども。
ここって、特に環境を示さない場合は
デフォルトで言語か標準ライブラリの話になるんじゃないのか
626デフォルトの名無しさん:2007/03/15(木) 21:36:16
windows.hは言語でも標準ライブラリでもない、迷惑な質問だ。
そんな迷惑な質問が、まともな回答されないのは自然な流れ。
627デフォルトの名無しさん:2007/03/15(木) 21:41:04
迷惑だとか思うならスルーしとけばいいじゃんよ
628デフォルトの名無しさん:2007/03/15(木) 21:57:22
みんな優しいからだろ。
629デフォルトの名無しさん:2007/03/15(木) 22:09:42
C言語の知識を使って、在宅アルバイトをしたいんですが、
いいのありませんか?
月に2万円程度の稼ぎでもいいです。
ちなみに、C言語はそれほど詳しくありません・・・。
これからもっと勉強するつもりですが。
630デフォルトの名無しさん:2007/03/15(木) 22:14:15
お前みたいな馬鹿でも勤まるそんなバイトがあったら
このスレから回答者がいなくなると思わないか?
631デフォルトの名無しさん:2007/03/15(木) 22:17:35
職安でぐぐれ
632629:2007/03/15(木) 22:18:20
思わないですよ。
在宅アルバイトには、キーボードで入力するだけのものもあるんだから、
プログラミングを生かすアルバイトでも、別に僕にできるものだってあってもおかしくないと思いますが・・
Cで難しければ、javascriptみたいな単純な言語をこれから勉強してでも始めたいです。
633デフォルトの名無しさん:2007/03/15(木) 22:26:52
経験者ですって偽って応募するといいよ
あと街のほうなら職歴不問のところもある筈だからネットの求人でも求人誌でもじっくり探して見れ
634デフォルトの名無しさん:2007/03/15(木) 22:27:26
正直、プログラム作成を
社会経験のない実績のないしかも在宅に任せられないでしょ。
テープ起こしみたいな仕事なんじゃない。
635デフォルトの名無しさん:2007/03/15(木) 22:28:09
>>629
世の中舐めてるヒキコモリ乙
636デフォルトの名無しさん:2007/03/15(木) 22:49:46
>>629
結局の所、信用だから会社作ればいけるかも知れんぞ
637デフォルトの名無しさん:2007/03/15(木) 23:10:29
募集なんてこんなもん。

プログラミング→Spamメール書き
データ入力→出会い系もどきのサクラ
データ処理→アンケート調査にかこつけた無店舗販売
638デフォルトの名無しさん:2007/03/16(金) 23:41:35
C++の入門書を一通り終了して生まれた疑問。
本のソースプログラムとかだと、実行すると基本的にコマンドプロントで結果だの何だのが出るよね。
ちゃんとしたソフトウェアってどうするのさ。
ちゃんと専用の画面が開いて、[ファイル]とか[表示]とかそういうのつけるのとか、サパーリ分からんわけよ。
そこら辺解説した本とかサイトとかないかね
639デフォルトの名無しさん:2007/03/16(金) 23:44:30
WindowsプログラミングとかVisual C++とか書いてある本見ろ。
640デフォルトの名無しさん:2007/03/16(金) 23:47:58
ああ、ウィンドウズプログラミングってそういう意味だったのか
ありがつー
641デフォルトの名無しさん:2007/03/17(土) 02:06:11
プログラミングを始めるには何かソフトをかわないといけないんですか?
642デフォルトの名無しさん:2007/03/17(土) 04:01:24
いいえ、必ずしも買う必要はありません。
643デフォルトの名無しさん:2007/03/17(土) 15:29:52
構造体アナライザみたいの作りたいのだが
構造体のメンバの一覧を得る方法ってあるのだろうか?
ヘッダファイルをテキストで読み込んで解析する、でいいのかな?
644デフォルトの名無しさん:2007/03/17(土) 15:59:09
VC++のオブジェクトブラウザでFA
645デフォルトの名無しさん:2007/03/17(土) 16:01:58
>>644
linuxで既にある巨大な共有メモリの構造体を
ダンプできるようにしたいのよ
646デフォルトの名無しさん:2007/03/17(土) 16:04:59
> 構造体を 
> ダンプ
ソースコピペでおk
647デフォルトの名無しさん:2007/03/17(土) 16:53:14
上手く伝わらないorz
デバッガ用のツールでメモリダンプするの作るんだけど
どうせならユーザーが構造体のメンバとか
見れるようにしたいのよ
階層深いところまであるからインタフェースは
まだちょっと悩んでるんだけど
648デフォルトの名無しさん:2007/03/17(土) 17:55:41
>>647
デバッガ用のツールなら、デバッガにその程度の機能はあるんじゃないのか?
649デフォルトの名無しさん:2007/03/17(土) 17:56:35
シンボルって出力できなかったっけ?
まぁ俺はそこまでデバッガ使いこなしてないけどな
650デフォルトの名無しさん:2007/03/17(土) 21:50:48
×デバッガ
○デバッグ

とりあえず、無理っぽいのかな?
651デフォルトの名無しさん:2007/03/17(土) 21:53:19
コンパイラ連携型のデバッガは大抵できるな
652デフォルトの名無しさん:2007/03/19(月) 17:19:55
よくしらんけどinsightのソースでも読んでみたら?
653デフォルトの名無しさん:2007/03/19(月) 18:46:25
作成済みのpthreadが実行中かどうかを知るにはどうしたらいいでしょうか?
654デフォルトの名無しさん:2007/03/19(月) 19:58:55
>>653
pthreadには終了待ちのjoinしか無いんじゃない?
だからソケットかグローバル変数使うんじゃないかな。
やりたい事が判らないから、的外れだったらすまん
655デフォルトの名無しさん:2007/03/20(火) 17:31:22
「出力は入力データセットと同数の行でなければならない」

っていうのは
入力A
出力A
入力B
出力B
みたいに1行ごとに出力していくのと

入力A
入力B
入力C
出力A
出力B
出力C
みたいに最初に入力してあとで一気に出力するのとどっちの
タイプでも良いんでしょうか?
656デフォルトの名無しさん:2007/03/20(火) 17:38:26
その文章を書いた奴に聞け
657デフォルトの名無しさん:2007/03/20(火) 19:33:03
テンプレートクラスにパラメータとして与えた型の種類を問わず、
そのテンプレートクラスのオブジェクトを指せるポインタって作れますか?
658デフォルトの名無しさん:2007/03/20(火) 19:39:10
void*

テンプレートクラスに共通の親を持たせるとか。

#で、なぜそんなポインタを持ちたいんだ?そのポインタで
#何を処理するわけ?
659デフォルトの名無しさん:2007/03/20(火) 19:46:27
AクラスにテンプレートクラスT<A>へのポインタを持たせたくて、
BクラスにテンプレートクラスT<B>へのポインタを持たせたくて、
Cクラスに・・みたいな状態になっているので、
A、B、Cの基底クラスにそういうポインタを持たせたかったんです。
ポインタに行う処理も共通のものですし。
660デフォルトの名無しさん:2007/03/20(火) 19:54:07
A,B,Cには共通の親が居るんだろ?
親もテンプレートにすれば解決。
661デフォルトの名無しさん:2007/03/20(火) 20:09:03
えーと
template <class T> class Parent {
  X<T>* p;
};
として、
class A : public Parent<A> {/*〜*/};
とすればよいということでしょうか?

テンプレートへの理解が足りないようですな、俺orz
勉強しなおしてきます。回答ありがとうございます。
662デフォルトの名無しさん:2007/03/20(火) 22:15:09
>>661
それだとParentがクラス変数を持っているときに困るかも

>>658の言うようにXに共通の親を
持たせればいいんだろうけど、Xが有り物だと無理だな
663デフォルトの名無しさん:2007/03/22(木) 02:26:15
入力:AabB

出力:aABb
みたいに、大文字を小文字、小文字を大文字に変換するには
どうすれば良いですか?
664デフォルトの名無しさん:2007/03/22(木) 02:54:13
>>663
ctype.h
isupper()
tolower()
とか(引数略

Shift_JISとかはアーアー見えなーい(ry
665663:2007/03/22(木) 03:20:45
>>664
ありがとうございます!
666デフォルトの名無しさん:2007/03/23(金) 03:20:51
>>663
char配列なら自作関数でも直ぐにかける気がする。
for(int i=0;i<len;++i){
if(str[i]>='a'&&str[i]<='z'){
//文字コード知らないから分からないけど定数を足すか引くで変換できるはず
}else if(str[i]>='A'&&str[i]<='Z'){
//同文
}
}
こんな感じで
667デフォルトの名無しさん:2007/03/23(金) 08:30:33
>>666
isupper, islower, toupper, tolower
668デフォルトの名無しさん:2007/03/23(金) 10:14:13
しかも文字コード知らなくてもできるし
669デフォルトの名無しさん:2007/03/23(金) 11:18:46
今、話題の黒ウーロン

これって3トリーが必死で安売りを阻止してる。
課長クラスが店に乗り込んでいって値上げ交渉をしてるし。
これって法令違反?
厳密に言えばグレーだけど。
公取にチクれば注意は受けるかもな。

ちなみに店への納入価格は
350で@120
1Lで@320くらい。

670デフォルトの名無しさん:2007/03/23(金) 12:15:42
仕様変更を見越した設計って可能なんすか?
671デフォルトの名無しさん:2007/03/23(金) 12:24:34
仕様変更が分かってるなら書く必要なくね?
672デフォルトの名無しさん:2007/03/23(金) 12:32:23
そのためのOOP

だと思うorそういうことになってる
673デフォルトの名無しさん:2007/03/23(金) 12:57:54
日曜大工感覚で作るアプリって徐々に機能追加したくなるじゃん?
で、後から部分を最適化してパフォーマンスをあげる事もやりたくなるじゃん?
そういう機能の追加や削除、改変に柔軟に対応できる設計手法ってなんかありそうで無いような
そんな気がする
ある程度組みあがったらそれを捨てて、また一から設計しなおすってのもあるけど
そういう手はあまり使いたくないじゃん?
(そりゃあ何年もかけて作ってるようなアプリだと何回か遭遇するもんだとは思うけど)
674デフォルトの名無しさん:2007/03/23(金) 14:07:35
>>670
その業界、会社、担当者の性格等に馴染んできたら
「こういうのがあると嬉しいんだろうなあ」くらいの予想はつくかも試練が
全く予想外の方向から覆される事も少なくない。
675デフォルトの名無しさん:2007/03/23(金) 21:54:45
>>669
なにが厳密に言えばグレーだよ。 んなもん黒に決まってんだろが!


・・・黒ウーロンなんだから。
676デフォルトの名無しさん:2007/03/24(土) 04:14:35

組み込み系のスレって無いのかな?

OSが Nucleus Plus で MULTI を使って開発してんですが、
printf系の関数で %f の編集がうまく行かないのです。

<Sample Code>
double a = 123.456;
char buf[256];
sprintf( buf, "%f", a);

このコードで編集された結果が
0.00000
みたいになります。

組み込みってあんま詳しくないんだけど、
仕様なんですかね?
整数と文字列は正しく編集されるんですが。

677デフォルトの名無しさん:2007/03/24(土) 04:25:57
>>676
double じゃなくて float ならうまくいくとかそんな気がしないでもないが、
多分、それはその実装固有のバグじゃね?
printf系の関数は実装が結構面倒だし、バグを抱えてる実装は珍しくはないぞ。
678デフォルトの名無しさん:2007/03/24(土) 04:30:37
679デフォルトの名無しさん:2007/03/24(土) 05:01:46
%lf じゃないとダメとか……
そんなこと関係ないよね?
680デフォルトの名無しさん:2007/03/24(土) 08:49:15
バグというより、実数演算ライブラリを自動ではリンクしないだけなんでね?
試しに、double a = sqrt(2);にしてみたら?
681デフォルトの名無しさん:2007/03/24(土) 12:03:48
>>677-680
ありがとうございます。
floatも試したけど駄目だったんだよねぇ。
まあ、当面は使う予定ないから良いけど。

>>680
何をリンクしたらいいのかな。
あんま詳しくないもので、まあ、調べてみます。

682デフォルトの名無しさん:2007/03/24(土) 18:45:52
int test[]={
0,111,222,333
};
という内容の fTest.datがあります。
インクルードすればそのままtest[0]などを取り出せますが、
これをfopenでファイルを開いてから値を取得するプログラムを組んでいます。
test[0]に当たる数値の位置が固定であればSEEK_SETで、
ダメならwhileで'{'の次の位置まで来、fscanfをして値を取得しています。
無理やりな感じがしますが他に方法はあるのでしょうか。
一番はfTest.datの中身を数値だけにして取得しやすいようにすればいいのですが
現状のファイル内容で他に数値の取得方法があれば助言お願いします。
683デフォルトの名無しさん:2007/03/24(土) 19:21:44
数字とカンマ、改行以外を飛ばせばあとはcsvとかわらん
684デフォルトの名無しさん:2007/03/24(土) 21:12:52
ありがとうございます
685デフォルトの名無しさん:2007/03/25(日) 21:43:26
アクティブなウィンドウのexe名を取得するにはどうしたらいいですか?
686デフォルトの名無しさん:2007/03/25(日) 23:01:31
CにもC++にもウィンドウを表示する機能などというものは備わってないので
アクティブなウィンドウのexe名を取得する方法というのも存在しません
687デフォルトの名無しさん:2007/03/26(月) 00:00:36
>>685
お使いのウィンドウシステム関連のスレへどうぞ。
688デフォルトの名無しさん:2007/03/26(月) 13:32:55
Cでスクリーンショット撮ってクリップボードや適当な画像ファイル形式に保存する
プログラムを作成したいんだけどどうしたらいい?
689デフォルトの名無しさん:2007/03/26(月) 13:36:48
690デフォルトの名無しさん:2007/03/26(月) 14:06:10
非常にくだらない質問かも知れないのですが、C++にはアクセサはありましたでしょうか?
C#でprivate宣言したメンバをset/get使ってアクセスするやつ。
ググっても出てこない・・・
691デフォルトの名無しさん:2007/03/26(月) 14:08:46
>>690
好きなようにお書きください。
692デフォルトの名無しさん:2007/03/26(月) 14:11:55
>>690
ない。ただしjavaのようにgetXX/setXXのようなルールを決めてそういう目的で使うことは普通にある。
C++/CLIにはあったりするんで、そっち方面なら話は別。
693デフォルトの名無しさん:2007/03/26(月) 14:21:57
>>691-692
ありがとうごじゃります。
やっぱりそうですか…。
694デフォルトの名無しさん:2007/03/26(月) 22:04:03
まあ無茶すれば

template<typename T>
struct proxy
{
proxy<T>& operator=(const T&){〜}
T& operator T(){〜}
};

class hoge
{
private:
int i_;
public:
proxy<int> i;
};

という風にすればなんとか…
自分で使おうとは思わないけど。
695デフォルトの名無しさん:2007/03/27(火) 00:07:04
C言語で引数を使わずに関数に変数渡しをしたいのですが
どのように記述すればよいのでしょうか?
#呼んでいる関数はアセンブラです。

int hoge(void)
{
int addr;
addr = 8000;

func_a();

}

func_a()
{
mov (addr),d1
mov 0xa,d2
add d1,d2


}
696デフォルトの名無しさん:2007/03/27(火) 00:09:22
スタックかレジスタに積まれてるだろうから
そこから持ってくればいんじゃね
697デフォルトの名無しさん:2007/03/27(火) 07:10:39
デバッグ情報を駆使して、呼び出しもと関数の
スタックフレームを調べるということでひとつ。
#最適化で変数が消えていても泣かない
698デフォルトの名無しさん:2007/03/27(火) 08:40:54
string関数を使わずに
文字列の長さを取得するにはどうすれば良いでしょうか?
699デフォルトの名無しさん:2007/03/27(火) 10:16:51
strlen()
700デフォルトの名無しさん:2007/03/27(火) 10:24:47
>>698
string関数とは何ぞや。
std::stringクラスという意味ならstring.hのstrlen()で。
それもダメだというなら自分で数えれば宜しい。
701デフォルトの名無しさん:2007/03/27(火) 10:40:53
文字列というのがヌルターミネートのchar配列のことだとしたら
\0 が来るまで数えればいいじゃないか
702デフォルトの名無しさん:2007/03/27(火) 18:07:50
>>701
ヌルターミネートを含むchar配列なんだったらstrlenを使うべきじゃないの?

あと、よく「ないなら自分で作れ」的なこと言うヤツいるけど、
それってアホ化する第一歩にしか思えん。。。
誰でも思いつくような便利関数はもともとあるかすでに誰かが作ってるから
それを探し出して使うべき。
自分で作るのは、調べ尽くし、どうにもならなくなったときだけにしる。
703デフォルトの名無しさん:2007/03/27(火) 18:18:31
>>702
元の質問者がstring(str?)関数を使わずに、と言ってるんだから
704デフォルトの名無しさん:2007/03/27(火) 18:22:48
あえて逆らってみる。

size_t strlen(const char* s)
{
  size_t len = 0;
  while (*s++)
    len++;
  return len;
}
705デフォルトの名無しさん:2007/03/27(火) 18:32:10
俺がエスパーするに…
>>698はVC++.NET2005あたりを使ってて、System.Objectをusing指定できない
OLEか何かを作っており、Stringクラスが使えないからConvert::ToString関数
など変換クラスあたりの代替になるものはないか、と言っているのだと思う。
706デフォルトの名無しさん:2007/03/27(火) 18:34:27
それが当たってたらすごいw
707デフォルトの名無しさん:2007/03/27(火) 18:53:53
つーか、ここと

【初心者歓迎】C/C++室 Ver.35【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1171888583/

の違いって何?
708デフォルトの名無しさん:2007/03/27(火) 19:00:21
C/C++の初心者質問スレは、たくさんあるからなあ
709デフォルトの名無しさん:2007/03/27(火) 21:11:33
++iとi++の違いを教えてください。
710デフォルトの名無しさん:2007/03/27(火) 21:13:52
前置 後置 インクリメント演算子でググれ
711デフォルトの名無しさん:2007/03/27(火) 21:14:15
式の値がi+1かiかの違い。副作用は同じ。
712デフォルトの名無しさん:2007/03/27(火) 22:07:44
>>707
違いなんて無いだろ。
俺はこのスレが1000まで行っても次スレは立てないでそこへ合流すればいいと思っている。
713デフォルトの名無しさん:2007/03/27(火) 23:13:38
>>709へのレスかと思って一瞬ビビった
714100:2007/03/28(水) 00:19:06
最後赤の方、お疲れ様でした。
久々の30台、 全然動けねぇ…
そして遅くても関係無く中段貰う俺テラヨワス…
Vで一矢報いることが出来たのが幸いでした…
715デフォルトの名無しさん:2007/03/28(水) 00:19:51
誤爆スマソ
716デフォルトの名無しさん:2007/03/28(水) 00:20:34
どこへの誤爆だよ…
717デフォルトの名無しさん:2007/03/30(金) 11:55:25
WinXP SP2, VC++ Ver.6 SP6です。

LIBCD.lib(wincrt0.obj) : error LNK2001: 外部シンボル "_WinMain@16" は未解決です

ビルドの際に上記のエラーが出るので、プロジェクトを新規にConsole
アプリケーションで作り直しました。そのときは快調に動くものの、
セーブして後日開くとまたWin32アプリケーションに戻っています。

これは何が原因なのでしょうか? よろしくお願いします。
718デフォルトの名無しさん:2007/03/30(金) 14:12:35
まさか、プロジェクトを保存してないって落ち?
719デフォルトの名無しさん:2007/03/30(金) 14:24:49
2次元配列の先頭アドレスを変数に入れて扱う場合,その変数はどんな型に宣言したらよいのでしょうか?


int array[3][10];
int **A;
として
A=array;

としてみたのですが、不正な代入という警告がでます。


キャストしてやれば警告がでませんが、根本的に間違ってるような気がします。
720デフォルトの名無しさん:2007/03/30(金) 14:35:27
int (array[3])[10];
と見れば、これは「int [10]が3つ」あるわけで、それを指すポインタは
  int (*A)[10];
721デフォルトの名無しさん:2007/03/30(金) 14:36:34
>>719に便乗して質問。
この場合、 array の式の中での型は int (*)[10] でいいんだっけ?
722721:2007/03/30(金) 14:38:03
スマソ
時間差で重なった
723720:2007/03/30(金) 14:45:57
補足。
  int *A[10];
だと、
  int *(A[10]);
とみなされて、「int * が[10]個」になってしまう。
この辺りは慣れるしかない。

>>721
そう。

因みに、「10」とかベタで書くと後で変更するとき困るのは
言うまでもない。
 #define N 10
とするか、または
 typedef int ARRAY[10];
 ARRAY array[3];
 ARRAY *A;
とでもした方がいい。
724デフォルトの名無しさん:2007/03/30(金) 14:46:12
>>720-722
ありがとうございます。
たしかに警告消えました。

それにしてもはじめて見る書き方です。
使い方をしらべてみます。
725721:2007/03/30(金) 14:53:22
>>723
なるほど。
こういうのをしっかり解説してる本って無いのかな…
726717:2007/03/30(金) 14:58:00
>>718 んなわけナス。保存してファイルで日時も確認しているから不思議なんだす。
727717:2007/03/30(金) 15:00:27
>>718 補足

そもそも新しく作り直しているんだから、セーブしなけりゃプロジェクトそのもの
存在しない。
確かに、新しく作っといて過去のを開きなおして「まただorz」って言うのも
一回あったけど。
728デフォルトの名無しさん:2007/03/30(金) 15:03:51
VC++のMDIで、アクティブなビューが変わった事をMainFrmで知りたい場合、どうするんだっけ。。。
729デフォルトの名無しさん:2007/03/30(金) 15:29:47
>>727
随分態度でかいけど、作り直さないで修正だけして保存してもダメなの?
#実は作り直した積もりで毎回同じ古いのを保存しているだけだったり。
730デフォルトの名無しさん:2007/03/30(金) 15:33:38
731デフォルトの名無しさん:2007/03/30(金) 15:39:50
>>730 はえらい遅い上に的外れだな
732デフォルトの名無しさん:2007/03/30(金) 16:55:05
質問失礼します。

pBuf= new char[14];
上記のコードを実行すると、
void *operator new[](size_t size)
ではなく、
void *operator new(size_t size)
が呼び出されます。

なぜでしょうか?
分かる方お願いします。
733デフォルトの名無しさん:2007/03/30(金) 16:55:25
>>729
>作り直さないで修正だけして保存してもダメなの?

Win32アプリケーションでプロジェクト作っといて、コンソールアプリ
ケーションに変更するなんてことできたっけ?
734デフォルトの名無しさん:2007/03/30(金) 17:03:04
リンカの設定でサブシステム切り替えればできるんじゃない
735デフォルトの名無しさん:2007/03/30(金) 17:06:03
>>733
できるんじゃ?
Wizardからしか設定できない隠し項目とかないでしょ。まさか。


>>717
同じ名前のプロジェクトがいくつもあるんじゃないの?
736デフォルトの名無しさん:2007/03/30(金) 18:18:45
>>733
「C/C++」タブの「プリプロセッサの定義」:
  _WINDOWS ⇔ _CONSOLE
「リンク」タブの「プロジェクト オプション」:
  /subsystem:windows ⇔ /subsystem:console
でリビルド。
737717:2007/03/30(金) 18:53:38
>>736

エラーは吐かなくなったけど、実行したらdos窓が出た瞬間にとまるorz
main関数の実行まで行っていないような・・
738デフォルトの名無しさん:2007/03/30(金) 19:38:57
まさか、瞬間的に処理が終了してdos窓が閉じただけって落ち?
739デフォルトの名無しさん:2007/03/30(金) 20:32:17
>>732
コンパイラが仕様に完全に準拠してないから。
740732:2007/03/30(金) 20:52:28
>>739
返答ありがとうございます。

それは強烈ですね。。。
ガベコレによる演算子チェックは諦めます。。。
741デフォルトの名無しさん:2007/03/30(金) 21:08:05
今どきそんなコンパイラあるのか?
何使ってるの?
742デフォルトの名無しさん:2007/03/30(金) 22:01:37
あるサイトから複数の.cppや.hファイルの入ったフォルダをダウンロードしました
このサイトやRADEMEなどありませんでした
これを実行したいんですがどうしたら良いでしょうか?
基本的な手順が書いてある参考になるサイトなどはご存知じゃないでしょうか?
自分でも検索してみたのですがなかなか見つかりません
ちなみにBCCとBCPadはインストールしてHelloWorldぐらいは実行できます
よろしくお願いします
743デフォルトの名無しさん:2007/03/30(金) 22:49:31
そのサイトを書いた方が早いとは思うが
744デフォルトの名無しさん:2007/03/30(金) 22:52:21
その .cpp や .h にコンパイル方法が書いてあることもある。
745デフォルトの名無しさん:2007/03/30(金) 23:07:08
C言語の関数ポインタについて質問があります。

void (*p[2])(void) = {
a,
&a,
}

上記のようにaとしても&aとしても同じで関数aが*p[0], *p[1]に入るのですが、
どちらが正しい記述なのでしょうか。

ちなみにVCCで試しました。
コンパイラの話なのか、言語の話なのかもわからないのですがよろしくお願いします。
746デフォルトの名無しさん:2007/03/30(金) 23:13:28
>>745
前者は後者を省略形の扱いになるんじゃなかったっけ?
確か、これは言語の仕様で、コンパイラは関係なかった気がする。
747742:2007/03/30(金) 23:22:21
>>743
>>744
レスありがとうござます
BCPadでmakeしてみたのですがエラーが出ました。
それによるとg++がどうのこうのとのことで、makefileを見てみるとg++とかgccなどの記述がありました。
これってBCCじゃなくてGCCを使う必要があるってことでしょうか?
748デフォルトの名無しさん:2007/03/30(金) 23:26:42
>>747
C++はしっかり互換性を意識してやってないと他のコンパイラじゃ
まともにコンパイルが通らないことがフツー。
てか、どこのサイトだよ? 教えてくれればもっと適切にアドバイスできるんだけど。
749デフォルトの名無しさん:2007/03/30(金) 23:30:19
>>745
どっちでもおk。常識的にはaは「関数」であるんだから、
aとだけ書いて「関数へのポインタ」に置き換えられるのはヘンな話だけど
なぜかCには「関数は式の中では関数へのポインタに置き換えられる」っていう規則がある。
だから前者でも後者でも関数へのポインタが入るし、その後の関数呼び出しも
p[0]();でも(*p[0])();でもおk。間接参照演算子を使って「関数へのポインタ」から「関数」を手繰り寄せても
↑の規則のせいで速攻「関数へのポインタ」に置き換わる。つまり関数へのポインタに*つけても何もしない。
つまりぶっちゃけ(**********p[0])();っていう関数呼び出しも通る。
ただ後者の方が丁寧な書き方ではあるとは思う(少なくとも俺は読みやすい)。

>>747
makefileあるならmakeできるんじゃ。
Windows環境でgcc+makeしたいならCygwin入れると楽(自分がやってるだけだけど)。
750デフォルトの名無しさん:2007/03/30(金) 23:32:32
>>745
式中にある呼び出されない関数は関数へのポインタに成り下がるから、
a が関数なら a, &a, *a は等しく関数aのポインタを意味する。
751デフォルトの名無しさん:2007/03/30(金) 23:35:53
>>745
ようするにどっちも正しい記述。
お前が気に入った書き方をすればいい。
752742:2007/03/30(金) 23:38:19
>>748
ありがとうございます
身元がばれるかもしれないのでサイトを晒すのはちょっと(^^;

>>749
はい、gccを使えばmakeできそうです

週末を使ってgccの使える環境を整えて再チャレンジしてみたいと思います
753745:2007/03/31(土) 13:20:57
>>746
>>749
>>750
>>751

皆さんご返答ありがとうございます。
明示するということで"&"をつけて記述しようとおもいます。
ありがとうございました。
754740:2007/04/02(月) 14:46:44
>>741
VC++ 2003 を使用しています。
答えになってます?
755デフォルトの名無しさん:2007/04/03(火) 14:32:51
>>754
俺も2003だが、以下のコードで普通にnew[]の方を呼ぶよ。
自分でnew[]を書かなければnewaop.cppの
void *__cdecl operator new[](size_t count) _THROW1(std::bad_alloc)を呼ぶ。

void * operator new[](size_t nSize)
{
void * ptr = malloc(nSize);
return ptr;
}

void * operator new(size_t nSize)
{
void * ptr = malloc(nSize);
return ptr;
}

int _tmain(int argc, _TCHAR* argv[])
{
char * pBuf= new char[14];
sprintf(pBuf, "Hello, world!");
printf("%s\n", pBuf);
return 0;
}


番号コテは発言毎に付け替えるものではない。
一連の同じ話題の間は初めの発言番号をずっとつけておくものだ。
756732,740,754:2007/04/03(火) 14:39:46
>>755
返答ありがとうございます。
コテの件おっしゃる通りですね。。。すいません。

operator new ですが、こちらと挙動が異なるようですね。
今一度確認してみます。
757742:2007/04/06(金) 08:40:15
>>752
(自己レス)Eclipse+CDTで何とかgccコンパイル・実行ができました

でもEclipseって自分には多機能すぎるのかちょっと使いにくく感じます
gccが使えて、CPadのようにコマンドプロンプトにいちいち入力しなくて良い物は無いのでしょうか?
758デフォルトの名無しさん:2007/04/06(金) 08:45:00
emacs
759デフォルトの名無しさん:2007/04/14(土) 19:47:56
最近の32ビット以上のマシンだと、doubleでもfloatでも実行速度は変わらないのでしょうか?
760デフォルトの名無しさん:2007/04/14(土) 20:03:35
doubleの方が速い事さえある
761デフォルトの名無しさん:2007/04/14(土) 20:39:01
「最近」がここ20年程を指すなら>760。
ここ数年を指すなら一概には言えない。
#例えばIntelCPUなら、floatの方が速くなる可能性を秘めている。
762デフォルトの名無しさん:2007/04/14(土) 20:41:31
>>759
それが問題になるほどクリティカルなプログラムを作りたいなら実測しろ。

つーか、>>760は生半可な知識で答えずにきちんと実測してから回答すべきだな。
763デフォルトの名無しさん:2007/04/14(土) 20:47:33
質問の答えになってない件について
764デフォルトの名無しさん:2007/04/14(土) 21:02:08
最近とか32ビット以上のマシンって色々な条件が考えられるので一概には言えない。
というかコンパイラがどういうコードを生成するかとかCPUの特長とか
サブルーチン呼ぶときdouble型にされてしまうとかプログラムしだいで変わるだろうから
毎回実測したほうがいい。聞かれても困るし、過去の経験や聞いた話しに頼るべきではない。
765デフォルトの名無しさん:2007/04/14(土) 21:04:54
doubleもfloatも80bitに拡張されるんじゃなかったっけ
766デフォルトの名無しさん:2007/04/14(土) 21:11:17
>>765
x86のFPUはそうだな。

でもWin64では、64ビットプログラムだと事実上FPUが使えず、
SSEを使うことになるので、そうでもない。

>>759
761とは違う理由も挙げてみる。
Cではfloatをプロトタイプ宣言のない関数の引数として渡すと、
doubleに拡張されることになっていた。
標準ライブラリもみなdouble型の引数・戻り値ばかりだった。
故にfloatではいちいちdoubleとの変換の手間がかかる分速度が遅くなるとされた。

しかし近年はプロトタイプ宣言が普及し、
標準ライブラリもfloatを引数・戻り値に取るものも用意されるようになったので、
ここでも結論は761と同じ
767デフォルトの名無しさん:2007/04/14(土) 21:16:52
>>765
それは一部のCPUの実数演算ユニットに限定された条件。

>>764
>サブルーチン呼ぶときdouble型にされてしまうとかプログラムしだいで変わるだろうから
古いCや可変個数引き数でもない限り、安全にfloat値を関数に引き渡すことができる。
768デフォルトの名無しさん:2007/04/14(土) 21:23:18
SIMD命令使う際でfloatはdoubleの半分のビット幅だから
処理効率が二倍ぐらいになったりするの?
769デフォルトの名無しさん:2007/04/14(土) 21:29:05
>>768
処理効率が速度のことなら、巧く填まれば倍の速度が出る。
#例えば配列同士の加算など。
実際には、ニモニック自体が4並列の方が遅かったり
メモリからの詰め替えが遅かったりであんまり変わらなかったりもする。
770デフォルトの名無しさん:2007/04/15(日) 00:07:20
あとデータがキャッシュに載るかどうかという点で、
同じ大きさならfloatはdoubleの倍の要素を保持できるという点もおいしいらしい。
実際測ってみたことないからよくわからないけど。

floatとdoubleの大きさを決め付けているのは元質問からの仮定ということで許してくれ。
771デフォルトの名無しさん:2007/04/19(木) 12:31:23
標準関数などで用意されている2次元の構造体 pos.x pos.y のようにアクセスできる
ものって用意されていたりしませんか?

ある本にプログラムは作るな!と書いてあったので
構造体も作らないほうがいいのかなとか思いました。

できればoperatorで演算できるものだとうれしいんですが
そういったものが用意されていたら教えてもらえるとうれしいっす。
772771:2007/04/19(木) 12:52:43
文章がおかしかったので訂正します。

標準ライブラリなどで

struct pos
{
  double x,y;
}

のような構造体は用意されていますか?
されているのであれば何をインクルードして何という型名なのか教えてほしいです。
773デフォルトの名無しさん:2007/04/19(木) 12:58:48
お前は作らなくていいから俺が作ってやるよ
774デフォルトの名無しさん:2007/04/19(木) 13:05:41
作るなって理由が判らんが。
複素数として扱っていいなら、CにもC++にも定義がある。
C++の複素数なら、メンバの型も自由だ。
775771:2007/04/19(木) 14:46:33
なんか自分頭おかしかったです。はい。
どうもすみませんでした
776デフォルトの名無しさん:2007/04/19(木) 15:26:10
どうせ「車輪の再発明はするな」って意味っしょ?
まあ、あるものは使った方がいいけど、
初心者ならとりあえず作ってみるのも勉強になっていいと思うぜ。
777デフォルトの名無しさん:2007/04/19(木) 19:13:27
プログラムの勉強をしているのですが、分からない問題があります。どなたかこのプログラムを作ってくれませんか?
問題は
「5つの整数値を入力させて入力順に出力し、最大値と最小値も出力するプログラムをつくりなさい。」
<注>このプログラムは、並び替え処理は行わずに作成してください。

下のように出力できればいいんですが・・・・。できないです。よろしくお願いします。
Input number1 : 52
Input number2 : -34
Input number3 : 27
Input number4 : 612
Input number5 : 9

maximum value is 612
minimum value is -34
52 -34 27 612 9
778デフォルトの名無しさん:2007/04/19(木) 19:19:25
>>777
丸投げするなら宿題スレの方がいいと思うが。
779デフォルトの名無しさん:2007/04/19(木) 19:23:28
>>778
分かりました。宿題スレいってきます。有難うございます。
780デフォルトの名無しさん:2007/04/19(木) 21:42:43
ああああああああああ
ああ ああああ  あああ
  あ         ああ ああ        あ
781デフォルトの名無しさん:2007/04/20(金) 15:11:40
質問ですが、unsignedのマイナスの扱いがよく分かりません。

unsigned int uTest = -1;
fwrite( &uTest, sizeof(unsigned int), 1, fp );
で-1が記録されます。

unsigned int uTest = 4294967295;
でも-1が記録されます。

ファイル出力にunsignedは使えないのでしょうか?
またどうやったら使えるのでしょうか?
782デフォルトの名無しさん:2007/04/20(金) 15:20:09
>>781
あのね、32ビット16進表記では、-1も4294967295も 0xFFFFFFFF なんだけど。
何を見て-1が記録されると言ってんの?
783デフォルトの名無しさん:2007/04/20(金) 15:35:01
>>782
あぁなるほど、バイナリエディタで型をsignにしてました。
ありがとうございます。
784デフォルトの名無しさん:2007/04/20(金) 20:04:45
書き込む前に少し頭使おうぜ
785デフォルトの名無しさん:2007/04/21(土) 12:41:37

小数に対応させるためにdoubleにすると、整数の場合も4.00000000みたいに小数点以下に0が無駄に出てしまうんですが
それを出さない方法ってあるんですか?あるなら教えてぷりいいいぃぃずううううう(iдi)
786デフォルトの名無しさん:2007/04/21(土) 13:32:58
double型に対して整数とは如何に。
中身が本当に、小数点の底まで整数と信じるなら、
intにでもキャストしろ。当然、±1の誤差に対する
苦情は却下だ。
787デフォルトの名無しさん:2007/04/21(土) 13:33:34
>>785
printf("%g\n", 4.0);
788デフォルトの名無しさん:2007/04/21(土) 13:33:48
>>785
double a=4;
cout<<int(a)<<endl;
789785:2007/04/21(土) 13:35:07
みなさんありがとうございます。
キャストでうまくいきそうです。
790デフォルトの名無しさん:2007/04/21(土) 13:45:06
それよりも出力精度に0を指定したほうがいいような気もするが。
791デフォルトの名無しさん:2007/04/21(土) 13:55:59
>>790
小数対応といっている以上、%.0fではダメだろう。有効精度が判っているなら、(例えば3桁として)%.3gでよかろう。
792785:2007/04/21(土) 15:14:29
>>786
入力した数の平均を求めるプログラムなので、整数にも小数にも対応できるようにdoubleにしました。
そうすると、平均が整数になろうと小数になろうと、後ろに0がいっぱいついてしまうのです。

>>789は死ね
793デフォルトの名無しさん:2007/04/21(土) 15:25:30
>>792
寝言は>787を試してから言え。
794785:2007/04/21(土) 15:27:54
>>793
起きてますから寝言ではありません。
>>787は期待した結果になりません。
795デフォルトの名無しさん:2007/04/21(土) 15:33:13
整数、整数っていうけど、実際は、
4.000000000000003とか
3.999999999999998じゃねーの。
796デフォルトの名無しさん:2007/04/21(土) 15:34:09
#include <stdio.h>

int main()
{
printf("%f %g\n", 4.0, 4.0);
}
これで4.000000 4という出力が得られた。
797785:2007/04/21(土) 15:34:46
>>794は偽者です
798785:2007/04/21(土) 15:45:03
説明が悪かったかな

#include<stdio.h>
int main()
{
int i;
double x,sum=0,ave=0;

printf("実数を3つ入力してください\n");

for(i=1;i<=3;i++)
{
printf("%dつめ⇒",i);

scanf("%lf",&x);

sum = sum+x;
ave = sum/i;

printf("合計=%f\n",sum);
printf("平均=%f\n",ave);
}

return 0;
}

これで3つとも1と入力しても1,000000とかになっちゃうのです
799デフォルトの名無しさん:2007/04/21(土) 16:01:44
>>798
入力・演算・出力で全部小数として扱ってるんだから、
その結果で何一つ問題はないと思うのだが。
それとも、入力が全部整数だったときだけは出力も整数、
1つでも小数が入ってたら小数出力したい、というのか?


あと、なりすましが嫌なら酉つけろ。もうおそいけど。
それと、自分に対するレスには目を通せ。>>788とか
話しの流れ見れば>>790-791もそう分かるはず。 用語が分からんだけかもしれんが

ついでに。一応最低限のことは知ってるのか?
ttp://www.linux.or.jp/JM/html/LDP_man-pages/man3/printf.3.html
800785 ◆HOZlQYR1MY :2007/04/21(土) 16:25:11
>>799
申し訳ない、習い始めたばっかりなので用語もいまいちわかりません(ノд`;)

答えが整数なら整数で、小数なら小数で出力したいのです。
例えば、>>798のような入力した実数の合計と平均を求めるプログラムで、
1と2を入力した場合、和は3.000000平均は1.500000と出てしまうのを、
和は3、平均は1.5とぴったり無駄に0がつかないように出力したいのです。
801デフォルトの名無しさん:2007/04/21(土) 16:35:09
>>800
それは無理。
浮動小数点と2進数の関係をもう一度勉強しろ。
手計算で4になっても、数値計算ではぴったり4ではない。
802785:2007/04/21(土) 16:38:06
分かりました。
もう一度勉強してから出直します。
ホント、このスレは馬鹿ばっかですね。
803785 ◆HOZlQYR1MY :2007/04/21(土) 16:40:30
>>801
そうなんですか、わかりましたorz
長々お邪魔しました、勉強して出直してきますo(`ω´*)o
ありがとうございました〜
804785 ◆HOZlQYR1MY :2007/04/21(土) 16:43:06
>>802

m9(^Д^)
805デフォルトの名無しさん:2007/04/21(土) 16:55:41
>>800
だから%gで出力してみたのか?
それを試してから寝言を言えって。

>>801
表示だけならできるのだから、「無理」と決め付けるな。
806785 ◆HOZlQYR1MY :2007/04/21(土) 17:05:52
>>805
うおおおおできたああああああああ
まjでありがとうございまssっす!!!!!!!1!!1!11
寝言言ってすいまえsんでした
807デフォルトの名無しさん:2007/04/21(土) 17:26:05
そんな調子だから偽者も出てくるんだよ……
808デフォルトの名無しさん:2007/04/21(土) 20:41:18
質問っす。

今からプログラム始めるとして、BASIC、C、C++、Java、Fortranの中で入門用・汎用性ではどんな感じなんでしょうか?
一応専攻は機械・設計っす
809デフォルトの名無しさん:2007/04/21(土) 20:45:01
あせえんぶらぁぁぁあ!!!
810デフォルトの名無しさん:2007/04/21(土) 20:57:25
C
811デフォルトの名無しさん:2007/04/21(土) 21:16:21
. iiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii.liiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiiii!.liiiiii,,,_.   _,,_____ iiiiiiiiiiiii  iiiiiii.iiiiii
. lllllllllllllllllllllllllllllllllll.lllllllllllllllllllllllllllllllllll! llllllllllllllliiii、llllllllll! lllllllllllll  .llllll゙llllll
. ゙!!!!!!!!!!!!!!!llllllllllllll.゙!!!!!!!!!!!!!!!llllllllllllll ゙!!!!lllllllllllll!lllllllllll! lllllllllllllii,,,,,_  ̄ ________________,
       llllllllllllll .lllllliiiii,,_ ,llllllllllllll   .゙゙゙!!!ll lllllllllll llllllllllllllllllllllllllllliiiii llllllllllllllllllllllllllllll!
       llllllllllllll .lllllllllllllllllllllllllllllll゙         ,llllllllllll lllllllllllllll!!llllllllllllllll llllllllllllllllllllllllllllll!
. iiiiiiiiiiiiiiiiiiiiillllllllllllll .゙゙゙!!llllllllllllllllllll!゙  iiiiiiiiiiiiiiiiiilllllllllllll!"llllllllllllll   .゙゙゙゙゙!!!
 llllllllllllllllllllllllllllllllll   .゙゙!lllllllllllllllii、.llllllllllllllllllllllllll!!゙゛ llllllllllllll
 !!!!!!!!!!!!!!!!!!!!!!!!!     .゙!!!!!!!!!!!!! .!!!!!!!!!!!!!゙゙゙゙´   l!!!!!!!!!!
812デフォルトの名無しさん:2007/04/21(土) 21:53:40
>>808
CとC++とJavaは見た目が似てるから一緒に覚えられるかも
813デフォルトの名無しさん:2007/04/21(土) 22:14:44
見た目が似ていても中身は全くの別物
一緒に覚えられるような代物ではない
814デフォルトの名無しさん:2007/04/21(土) 22:57:22
          ____   
       / \  /\ キリッ
.     / (ー)  (ー)\      
    /   ⌒(__人__)⌒ \   見た目が似ていても中身は全くの別物
    |      |r┬-|    |   一緒に覚えられるような代物ではない
     \     `ー'´   / 
    ノ            \
  /´               ヽ              
 |    l              \
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、.    
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))


          ____
        /_ノ  ヽ、_\
 ミ ミ ミ  o゚((●)) ((●))゚o      ミ ミ ミ
/⌒)⌒)⌒. ::::::⌒(__人__)⌒:::\   /⌒)⌒)⌒)
| / / /     |r┬-|    | (⌒)/ / / //  だっておwwwwwwwwwwwwwwwwwww
| :::::::::::(⌒)    | |  |   /  ゝ  :::::::::::/
|     ノ     | |  |   \  /  )  /
ヽ    /     `ー'´      ヽ /    /     バ
 |    |   l||l 从人 l||l      l||l 从人 l||l  バ   ン
 ヽ    -一''''''"~~``'ー--、   -一'''''''ー-、    ン
  ヽ ____(⌒)(⌒)⌒) )  (⌒_(⌒)⌒)⌒))
815デフォルトの名無しさん:2007/04/22(日) 02:44:39
無難にCかな。

一緒に学べないかというとそんなことはないとは思うが、
プログラミング初心者に複数の言語をやれというのは酷な話だな。
816デフォルトの名無しさん:2007/04/22(日) 05:03:18
C++で二つテキストボックスを作ってボタンを押すことによって
ボックス1にコピペした文字列のノイズを取ってボックス2の方に表示させたいんだが。
文字列を検索したり抜き出すための関数が分からなくて挫折してる。
817デフォルトの名無しさん:2007/04/22(日) 05:10:01
ハンドガン l;7 s;20 マシンガン l;2 s;32ってなってるのをボタンを押すと ハンドガン lv7 マシンガン lv2
って感じに翻訳っぽく。sから少し後ろはノイズだから消し去りたくて。
lの方でレベルは把握されてるけどそれをlvに直して数値を最後に付けて。

悪いsageチェック入ってなかった。
818デフォルトの名無しさん:2007/04/22(日) 06:14:20
>>816
C++にはGUIの規定はないので、恐らく何らかのライブラリを使っていると思うのだが。
そのライブラリの該当スレで聞くといいよ。
819デフォルトの名無しさん:2007/04/22(日) 13:41:18
C++におけるabsとfabsの違いを教えてください。
820デフォルトの名無しさん:2007/04/22(日) 14:14:50
前者はint abs(int)と宣言されていて、後者はdouble fabs(double)と宣言されている。
821デフォルトの名無しさん:2007/04/22(日) 14:17:20
>>819
オバーロードがあるから意味ないんじゃね?

と言いたいのかと思った
822デフォルトの名無しさん:2007/04/22(日) 14:34:49
どうせ最適化で消えるんだからどっちでもいいよ。
823デフォルトの名無しさん:2007/04/22(日) 14:37:00
#include <stdio.h>
をC++で書いてる人っているのか?
824デフォルトの名無しさん:2007/04/22(日) 15:08:19
ちょっと古い処理系への互換性が必要な場合とか、古い本を読んでそれで覚えてる奴とか。
825デフォルトの名無しさん:2007/04/22(日) 15:22:00
交互に攻撃を行うプログラムを書いていて int kougeki は 攻撃側の識別に使ってます。
下のコードは攻撃を行うと攻撃の権利が相手に移るという部分のなんですが、仮に
*kougeki = 1;
*player = 1;
*computer = 0;
という状況でこのコードが実行されると
*kougeki = 0;
*player = 0;
*computer = 0;
という風に*kougeki、*player共に同時に値が書き換わってしまいます。

if(*kougeki == *player){//攻守の交替
printf("1---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
*kougeki = *computer;
printf("1---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
}else if(*kougeki == *computer){
printf("2---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
*kougeki = *player;
printf("2---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
}

これはなぜでしょうか?理由が分かる方がいたら指摘お願いします。
826デフォルトの名無しさん:2007/04/22(日) 15:23:54
kougeki == player なんだろ。
なんでそんなわけのわからんポインタの使い方をしてるんだ
827デフォルトの名無しさん:2007/04/22(日) 15:35:04
本当だ・・・

if(*kougeki == *player){//攻守の交替
printf("1---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
kougeki = computer;
printf("1---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
}else if(*kougeki == *computer){
printf("2---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
kougeki = player;
printf("2---P=%d,C=%d,K=%d\n",*player,*computer,*kougeki);
}

に修正したらちゃんと動きました。ポインタを理解できてないみたいですね・・・
ありがとうございます!
828デフォルトの名無しさん:2007/04/22(日) 16:02:05
コメントアウトの仕方とか
インデントのかけ方とかド素人丸出しなソースだな
829デフォルトの名無しさん:2007/04/22(日) 16:20:36
一年目でコメントアウトの一般的なやり方なんか知るかボケ
インデントは勝手に省略されたんだよカス
830デフォルトの名無しさん:2007/04/22(日) 16:30:03
コメントアウトの仕方って問題あるのこれ?
831デフォルトの名無しさん:2007/04/22(日) 16:44:47
掲示板で質問するときの疑似コードとか100行以内で書き捨てる
ような用途なら全然ありじゃね?縦に長くならないし。

それよりインデントするなら全角空白でして欲しいとかそっちのほうが
気になるな漏れは。(実体参照だとJaneだと上手くコピペできない)
832デフォルトの名無しさん:2007/04/22(日) 16:58:30
>>829
答えてやったのに
答えてもらった後はどうでも良いって奴か
お前みたいな奴はPG向いてないからやめたほうがいい
833デフォルトの名無しさん:2007/04/22(日) 16:59:13
C++スタイルのコメントだわな

実際にC99/C++なのかもしれないけど
834デフォルトの名無しさん:2007/04/22(日) 17:03:03
#include <stdio.h>
#define TATE 7
#define YOKO 5
int main(void)
{
int arr[TATE][YOKO]={
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
{0,0,0,0,0},
};
int i,j;
int *p;

p=*arr;

*(p+10)=1;

for(i=0;i<YOKO;i++)
{
for(j=0;j<TATE;j++)
{
printf("[%d][%d] = %d ",i,j,arr[i][j]);
}
putchar('\n');
}
return 0;
}
835834:2007/04/22(日) 17:05:07
>>834をコンパイルすると、

[0][0] = 0 [0][1] = 0 [0][2] = 0 [0][3] = 0 [0][4] = 0 [0][5] = 0 [0][6] = 0
[1][0] = 0 [1][1] = 0 [1][2] = 0 [1][3] = 0 [1][4] = 0 [1][5] = 1 [1][6] = 0
[2][0] = 1 [2][1] = 0 [2][2] = 0 [2][3] = 0 [2][4] = 0 [2][5] = 0 [2][6] = 0
[3][0] = 0 [3][1] = 0 [3][2] = 0 [3][3] = 0 [3][4] = 0 [3][5] = 0 [3][6] = 0
[4][0] = 0 [4][1] = 0 [4][2] = 0 [4][3] = 0 [4][4] = 0 [4][5] = 0 [4][6] =

こうなります。

int *p;
p=*arr;
*(p+10)=1;

↑この操作によって、
arr[1][5]にもarr[2][0]にも1が代入されるのはどうしてでしょうか。
836デフォルトの名無しさん:2007/04/22(日) 17:07:51
すいません。
TATEとYOKOがテレコでした…


for(i=0;i<TATE;i++)
{
for(j=0;j<YOKO;j++)


で、納得です。
837デフォルトの名無しさん:2007/04/22(日) 17:16:15
普通はダブルポインタじゃないの?
838デフォルトの名無しさん:2007/04/22(日) 17:19:32
配列は連続して並ぶから大丈夫だべ
839デフォルトの名無しさん:2007/04/22(日) 17:30:39
あれ?ダブルポイmmタってなんだっけ?
840デフォルトの名無しさん:2007/04/22(日) 17:39:37
ダブルポインタって名前はどうも気になるんだよな…
ポインタへのポインタでなぜいかんのかと
841デフォルトの名無しさん:2007/04/22(日) 17:46:36
クィントゥープルポインター!
842デフォルトの名無しさん:2007/04/22(日) 17:54:27
C++の名前空間で、階層は持てないんでしょうか?
JAVAのパッケージやURIみたいに
843デフォルトの名無しさん:2007/04/22(日) 17:59:46
持てる
844デフォルトの名無しさん:2007/04/22(日) 19:39:27
質問ですが、
CreateWindowで作ったウィンドウのタイトルバーと枠の消し方が分かりません。
CreateWindow第三引数を、通常「WS_OVERLAPPEDWINDOW」としているところから
「WS_VISIBLE」のみに変えれば、「WS_CAPTION」が無くなって出来るかと思ったのですが、
やはりタイトルバーも表示されてしまいます。

どうすればタイトルバーを消すことが出来るのでしょうか?
845デフォルトの名無しさん:2007/04/22(日) 21:48:09
C言語のstrtokについて質問なんですが、
普通の中置記法の計算式が入ってる配列を、strtokで演算子だけ取り出そうとしたのですが
()がはいるとうまく取れません。
10+40+(5+5)*10=と入力すると、"+" "+(" "+" ")*" "="
って感じに、(の直前の演算子と)の直後の演算子がくっ付き、ひとつの文字列になってしまうのですが

全部ばらばらにひとつずつわける方法ありませんか?
846デフォルトの名無しさん:2007/04/22(日) 21:52:50
そんなことにstrtokを使うなよ。
普通に前から一文字ずつ見ればいい話
847デフォルトの名無しさん:2007/04/22(日) 21:53:34
iniファイルを構文解析するライブラリで
これはお勧め! っていう決定版みたいなのある?
C言語で
848デフォルトの名無しさん:2007/04/22(日) 22:42:01
>>847
java使え
849デフォルトの名無しさん:2007/04/22(日) 22:45:56
ありがとう
C言語用のJava探してくるよ
850デフォルトの名無しさん:2007/04/22(日) 22:47:25
>>847
Windows API
851デフォルトの名無しさん:2007/04/22(日) 22:51:26
wineにあるよねきっと。
852844:2007/04/22(日) 23:14:00
すいません。自己解決しました。
853デフォルトの名無しさん:2007/04/22(日) 23:44:01
>>846さん
指摘ありがとうございます。

言われたとおり式が入ってる文字列を先頭から数字以外は飛ばして
演算子がみつかったら中身を格納して〜って感じでやったのですが、

while(*enzan)でループさせて中でカウントしつつ、演算子なら格納して
最後に確認のために格納したデータを出力しようとしたのですが
エラーがでて出力されません。

もしかしてstrcpyすると\0なくなってるとかですか?
854デフォルトの名無しさん:2007/04/22(日) 23:50:37
>>853
strcpyをどのように使ったのか気になるが・・・
ちょソース晒してみ
855デフォルトの名無しさん:2007/04/22(日) 23:57:09
strcpyはヌルで終わるはずだが
856デフォルトの名無しさん:2007/04/23(月) 02:20:16
>>809-815サンクスっす
自分でも少し調べたけど、今の時代はBASICでもなくCが入門用で汎用ってことでFAっですよね…。

ちなみにウチの学科は今期の授業ではFortranを学びます。敢えてFortranなんて始める聞くのを修得する必要ってあるんでしょうか?
ぶっちゃけこれはウチの先生が異常なんすよね…?
857デフォルトの名無しさん:2007/04/23(月) 07:11:28
Fortranは昔からあるから知っている人が多い。
知らないものは教えられない。
授業で教えるのはFortranに決定。
そんなところだろ。
858デフォルトの名無しさん:2007/04/23(月) 07:30:27
Fortranはいい言語だよ。ただちょっと時代遅れなだけで。
859デフォルトの名無しさん:2007/04/23(月) 07:43:48
スパコンならFortranも使えたりするから、その都合じゃね
理系学科ならそういう科目あってもいいかと

少なくともhtmlの基礎よりは
860デフォルトの名無しさん:2007/04/23(月) 07:50:52
>>856
言語の講義(特に一番最初のもの)ってのは、
扱っている言語の文法を覚えるためだけにあるんじゃないんだよ。
扱っている言語が古いか新しいかなんて関係ない。
他に習得したい言語があるのなら受身になっていないで自分で学べ。
その際にはFortranの講義で得た知識が役に立つだろうから。
861デフォルトの名無しさん:2007/04/23(月) 13:49:47
せめて Fortran90 にしてほしい。
862デフォルトの名無しさん:2007/04/23(月) 23:55:49
>>854さん
すみません、自己解決しました。
コピーする側をmallocしわすれてました・・・
863デフォルトの名無しさん:2007/04/24(火) 00:02:35
Pythonって人気ないの?
864デフォルトの名無しさん:2007/04/24(火) 00:05:05
>>863
信者には大人気です。
865デフォルトの名無しさん:2007/04/24(火) 01:12:04
>>856
機械とか材料関係ならFortranはバリバリ現役なので特におかしな選択ではないと思う。
コンピュータを文字通り「計算機」として使う分野だから新しめの言語よりもFORTRANの
枯れて信頼性のあるライブラリを使ったり研究室で書きためたコードを読めるようになった
方がよい、ということなのだろう。
866デフォルトの名無しさん:2007/04/24(火) 04:43:09
電子物性ですがCです
でも情報の学科がJavaとアセンブリしかしないようなぬるぽな学科なんで
まともな所は違うかも…
867デフォルトの名無しさん:2007/04/24(火) 05:54:08
>>864
それなんてトートロジー・・・
868デフォルトの名無しさん:2007/04/24(火) 07:46:32
もはや信者も飽き飽きしている、とかもあるんじゃね?
869デフォルトの名無しさん:2007/04/24(火) 07:47:33
えーっと、ここはC/C++の質問スレだよな?
870デフォルトの名無しさん:2007/04/24(火) 11:06:15
char *p = "xyz";

この場合、xyzというのは文字列定数なんでしょうか?
*pはxyzという文字列定数のアドレスを保存すると考えていいのでしょうか。
871デフォルトの名無しさん:2007/04/24(火) 11:24:12
そうです。但し、*pではなく(char*)と言う型を持ったpが、です。
872デフォルトの名無しさん:2007/04/24(火) 15:09:58
ファイルを読み込んで先頭文字で処理を振り分けたいのですが、
文字をきちんと読み込んでくれません。
どうしたら読み込んでくれるようになるでしょうか?

ファイルの中身は
0xF1 0x40 0x40 ・・・
となっていて、プログラム内では
chInBuff[0] -15 '・
chInBuff[1] 64 '@'
と読み込まれています。

ヘッダファイル
static FILE *fp0;

プログラムファイル

char chInBuff[265];

fp0 = fopen( ファイル , "rb" )
fread( chInBuff , 265 , 1 , fp0 );
if(chInBuff[0] == 0xF1){}
873デフォルトの名無しさん:2007/04/24(火) 15:16:31
サイズのわからないバイナリファイルを読み込みたいのですが
ファイルの末端をどのようにして検出すればいいのでしょうか?

ある程度の長さの配列を用意して、終端になるまでmallocで確保しながらぶち込んでいこうかと考えたのですが・・・・
874デフォルトの名無しさん:2007/04/24(火) 15:16:34
TryEnterCriticalSectionという関数をDLLで使おうとしたんですが、
error C3861: 'TryEnterCriticalSection': 識別子は、引数依存の照合を使用しても見つかりません。
と出てしまいます。
ググってみたら_WIN32_WINNTが0x0400以上でなければならないといっていたので
stdafx.hに
#ifndef _WIN32_WINNT
#define _WIN32_WINNT 0x0400
#endif
を#include <windows.h>の前に追加したんですがそれでもだめでした。
VC7でDLL(Win32 プロジェクト)でやっています。
よろしくお願いします。
875874:2007/04/24(火) 15:27:56
自己解決しました。
どうやら実際にTryEnterCriticalSectionを使うクラスを宣言したヘッダーに
#include "winbase.h"
としていたのが原因のようです。
はっきりとした理由はわかりませんが、stdafx.hでwindows.hを読んだあとにwinbase.hを読んだことがまずかったみたいです。
876デフォルトの名無しさん:2007/04/24(火) 15:30:25
>>872
ヘッダファイルでグローバル変数定義なんてするもんじゃないという話はさておき、
0xf1は8ビットのsigned整数として表示すれば-15だからあってるじゃん。
試しにchinBuff[0]をunsignedにキャストしてみたら?

>>873
一般的には、ファイルサイズを調べておいてそのサイズでメモリ確保、fread()で読む込む。
ファイルサイズを調べる手段は、stat()を使うか標準関数だけで済ませたいならfseek()で
ファイル末尾に移動してftell()するとか。
#但し、2GBを超えるファイルには要注意。
教条主義的にファイルサイズを調べる手段も使わないというなら、一度空読みしてやればいい。
#fgetc()はファイル末尾に到達するかエラーに遭遇するとEOFを返すので検出できる。
877デフォルトの名無しさん:2007/04/24(火) 15:34:22
char は 「チャー」 でいい?
878872:2007/04/24(火) 15:41:55
>>876
ありがとうございます。
if((unsigned char)chInBuff[0] == 0xF1){}
とすることで比較することができました。
staticの位置も修正しました^^;
理由などは調べてみます。

>>877
char キャラ型 と呼ぶかと
879デフォルトの名無しさん:2007/04/24(火) 15:42:32
>>877
チャーでもキャラでもどっちでもいい
880デフォルトの名無しさん:2007/04/24(火) 16:26:32
>>877
シャア
881デフォルトの名無しさん:2007/04/24(火) 16:40:23
チェアー

椅子ではない
882デフォルトの名無しさん:2007/04/24(火) 17:17:26
つまんね
883デフォルトの名無しさん:2007/04/25(水) 05:46:16
>>876
いやー、多分一般的にはファイル全体を一気に読み込むんじゃなくて
何とかして必要な部分を切り出して読み込むんじゃないかと思うぞ
もしくはメモリマップファイルを作るとか
884デフォルトの名無しさん:2007/04/25(水) 08:08:55
どこの貧乏OSだか。そのファイルの全部が必要なら、一気に読むのが一番いいジャマイカ。
885デフォルトの名無しさん:2007/04/25(水) 10:03:39
うっかりユーザーが10GBのファイルを指定しちゃうと目も当てられないw
886デフォルトの名無しさん:2007/04/25(水) 16:45:46
フリーでオススメの統合開発環境を教えてくれ
WideStudio以外で
887デフォルトの名無しさん:2007/04/25(水) 17:02:40
OSくらい書け
888デフォルトの名無しさん:2007/04/25(水) 17:04:32
WindowsXP Pro SP2です
889デフォルトの名無しさん:2007/04/25(水) 17:24:42
Visual Studio 2005 Express Edition
890デフォルトの名無しさん:2007/04/25(水) 18:50:06
フリー公開されてたのか。ありがとう。
891デフォルトの名無しさん:2007/04/25(水) 20:15:37
浦島太郎ですか
892デフォルトの名無しさん:2007/04/25(水) 20:40:35
なんで分かった
893デフォルトの名無しさん:2007/04/25(水) 21:06:20
vectorで、初期化する時ではなく、途中で一括して領域を確保したい場合、
forループなどでpush_backするしか内のでしょうか?

vector<vector<int>> vec;
とやっておいて、
あとから与えられた値の分、例えばint x=100,y=100;と与えられたら
for(int i=0;i<x-vec.size();i++){
 vec.push_back(0);
 for(int j=0;j<y-vec[i].size();j++){
  vec[i].push_back(0);
 }
}
の用にしなければいけませんか?
894デフォルトの名無しさん:2007/04/25(水) 21:10:31
resize()があるだろ
895デフォルトの名無しさん:2007/04/25(水) 21:31:35
reserve
896デフォルトの名無しさん:2007/04/25(水) 21:32:45
みんなSTLにどんな機能があるか知らずに使ってんだな…
897デフォルトの名無しさん:2007/04/25(水) 21:36:42
>>895
reserve()はちょっと意味が違うな
898デフォルトの名無しさん:2007/04/25(水) 21:37:47
vectorについて詳しく調べてみればわかるのだが、思ったよりも
たくさんのメンバ関数を持っている事がわかる。Effective STLなどで
勉強しよう。
899デフォルトの名無しさん:2007/04/25(水) 22:02:02
ありがとうございます。resizeなんて便利なのあるんですね。
C++はじめて数日なのでまだまだ知らない事一杯でして・・・
ttp://www.geocities.jp/ky_webid/cpp/library/002.html
ここみてやろうとしてました。
やはり専門書あった方がいいようなのでEffectiveSTLも買ってみます。
900デフォルトの名無しさん:2007/04/25(水) 22:04:58
901デフォルトの名無しさん:2007/04/25(水) 22:20:33
ありがとうございます。早速見てみます。
902デフォルトの名無しさん:2007/04/25(水) 22:23:13
これからSTLのことで質問しようとしている諸君、
人に聞く前にSTLのソースを見るんだ!
もしくはεπιστημη様にでも訊いて地獄のような説教をしてもらえ!
903デフォルトの名無しさん:2007/04/25(水) 22:35:33
STLは実装について規定しない。
仕様書を読むべきなんじゃないの?
904デフォルトの名無しさん:2007/04/25(水) 22:54:39
お金をかけずにC言語の勉強をしたいと思うのですが、コンパイラなど
、良いフリーソフトをご存知ないですか?

というか、最低限必要なソフトやツールを教えていただけると嬉しいです・・・
905デフォルトの名無しさん:2007/04/25(水) 22:56:38
超初心者なのですが、C言語について質問です。
コンパイラでdos形式のexeファイルにしたのですが、実行しても一瞬入力した文字が出てきてすぐ閉じてしまいます。
開いたままにするって事はできないのでしょうか?

後、C言語でdos画面以外はできないのでしょうか?
初心者なので分かりづらい質問かもですが、回答よろしくおねがいします。
906デフォルトの名無しさん:2007/04/25(水) 23:03:28
>>904
visual studio 2005 express edition
cygwin gcc

>>905
getch()
Win32API
907デフォルトの名無しさん:2007/04/25(水) 23:05:18
>>905
#include <windows.h>
#pragma comment(lib, "user32.lib")
int main()
{
MessageBox(NULL, "hoge", "hage", MB_OK);
return 0;
}
908デフォルトの名無しさん:2007/04/25(水) 23:22:33
>#pragma comment(lib, "user32.lib")
これの意味について詳しく
909デフォルトの名無しさん:2007/04/25(水) 23:27:17
いろんな機能が使えるようになるおまじないだ
910デフォルトの名無しさん:2007/04/25(水) 23:29:24
user32.libをリンクする
リンクしないといろいろな機能を使えない、というかリンクエラーが起こる
911デフォルトの名無しさん:2007/04/25(水) 23:33:49
素のVC++ EEだとuser32.libがなくてリンカエラーになる予感
912デフォルトの名無しさん:2007/04/25(水) 23:36:15
プラットフォームSDKだったっけ
913デフォルトの名無しさん:2007/04/25(水) 23:46:45
>>906
ありがとうございました。

早速ググってみます。
914デフォルトの名無しさん:2007/04/26(木) 00:01:16
>>912
Windows SDKでも可
915デフォルトの名無しさん:2007/04/26(木) 00:28:19
>911
その前にwindows.hが見つからないという騒ぎになる
916デフォルトの名無しさん:2007/04/26(木) 00:29:30
>>907
ありがとうございます。
正直超初心者なのであんまり分からないですが、すぐ終わるっていうのが仕様じゃなくてよかったです。
917908:2007/04/26(木) 08:14:52
ほもほも
2003 professionalだとなくても通っちゃったのでなんじゃこりゃって悩んだけど
そういう意味だったのか
918デフォルトの名無しさん:2007/04/26(木) 11:20:18
>>917
コンパイルオプションにuser32.libをリンクするって設定してあるんだろう。
大抵はコンパイルオプションでシステム系のライブラリはリンクするようにデフォで設定されてる。
#pragma(libはソース中にライブラリのリンクを明示する時に使う。
919デフォルトの名無しさん:2007/04/28(土) 22:11:24
C言語で質問です。
今、式を打ち込んで()内の式を抜き取るという関数を作っているのですが
うまく抜き取れなくて困っています。
これで動かない理由がまったく分りません。
char shiki[256];
char kakko[256];

gets( shiki ); len = strlen( shiki ); len+=1; // shiki←計算式 len ← shikiの長さ \0含めるために+1
c_leni = strcspn( shiki, "("); // c_leni←shiki内の'('の位置
c_lenc = strcspn( shiki, ")"); // c_lenc←shiki内の')'の位置

memcpy( kakko, shiki + ( c_leni + 1 ), ( len - c_lenc ) * sizeof( shiki[0] )); // kakko←'(' の位置+1から ')'の位置-1までの文字列
for( i = 0; kakko[i] != '\0' ; i++){
printf( "%c" , kakko[i]);
}
920デフォルトの名無しさん:2007/04/28(土) 22:17:17
ちゃんと戻り値を確認しながら実行してみれ
921デフォルトの名無しさん:2007/04/28(土) 22:23:48
strcspnなんか久しぶりに見たわ。普通にstrchr使えよ
文字列のコピーならstrcpy/strncpyを使うべきだ。
そいから、getsは危険だから絶対に使っちゃならん。

pl = strchr(shiki, '(');
pr = strchr(shiki, ')');
if(pl++ && pr) {
strncpy(kakko, pl, pr - pl);
kakko[pr - pl] = '\0';
printf(kakko);
}
922デフォルトの名無しさん:2007/04/28(土) 22:32:44
>>921
plがNULLのときにインクリメントするのは鼻から悪魔。
それに、sprintf()でできることをstrncpy()でやるのはちょっと疑問。
plとprの位置関係くらい見ておいた方がいい希ガス。
もう一つ、文字列中に%があると死ぬから第一パラメータに持ってくるのは拙い。

ってことで、こんな感じで。
char * pl = strchr(shiki, '(');
char * pr = strchr(shiki, ')');
if (pl != NULL && pr != NULL && pl < pr) {
sprintf(kakko, "%.*s", pr - pl - 1, pl + 1);
printf("%s", kakko);
}
923デフォルトの名無しさん:2007/04/28(土) 22:35:54
getsがダメと言ってる人間にsprintfを使って添削すんなよ・・・
924デフォルトの名無しさん:2007/04/28(土) 22:37:38
gets()が危険だろうが何だろうが使うのは俺の勝手だ。
925デフォルトの名無しさん:2007/04/28(土) 22:38:09
確かに、gets()がダメと言いつつprintf(kakko)とかやっちゃう香具師に何言っても無駄だな。
926デフォルトの名無しさん:2007/04/28(土) 22:40:33
ま、Cの規格書にgets()は使用禁止と書いてあればさすがに従うけどな。
書いてないなら誰かに使うなと言われる筋合いは全くない。
927デフォルトの名無しさん:2007/04/28(土) 22:42:20
>>926
あー、コードレビューでこんな事言ってた奴がいたなぁ・・・
928デフォルトの名無しさん:2007/04/28(土) 22:46:31
std::string str;
std::cin.getline(str);
もやヴぁいでしょうか?
929デフォルトの名無しさん:2007/04/28(土) 22:51:02
>>928
それは使い方が違う。
std::cin.getline(char* str, streamsize count)
又は
std::cin.getline(char* str, streamsize count, char delim)
930919:2007/04/28(土) 22:52:23
レスありがとうございます。
取り合えず一通りためしてみます^^;
931デフォルトの名無しさん:2007/04/28(土) 23:30:10
>>926
自殺するなら止めないけど。人に迷惑かからない範囲で
932デフォルトの名無しさん:2007/04/28(土) 23:36:42
>>931
日本語でおk
933デフォルトの名無しさん:2007/04/28(土) 23:40:15
>>926は明らかにフィッシング
934デフォルトの名無しさん:2007/04/29(日) 00:01:01
すごく幼稚な質問かもしれないが関数で文字を送るにはプロトタイプ宣言をどうすればいいんだ?
たとえばこんな感じの↓
kansuu("a=",a)
935デフォルトの名無しさん:2007/04/29(日) 00:03:11
"string"はchar*型なので
kansuu(char*,nanntoka)
936デフォルトの名無しさん:2007/04/29(日) 00:05:10
>>935
素早い返信サンクス
早速やってみる
937デフォルトの名無しさん:2007/04/29(日) 01:14:25
>>935
C++なら絶対に、Cでもよっぽどの理由がなければconst char*にすべき
ちなみに"string"などの文字列リテラルの正確な型はconst charまたはcharの配列
938デフォルトの名無しさん:2007/04/29(日) 01:53:42
>>937
Cとの互換性の関係で文字列リテラルは const じゃないよ。
939デフォルトの名無しさん:2007/04/29(日) 01:57:05
>>937
知ったかぶり
カス
940デフォルトの名無しさん:2007/04/29(日) 02:00:22
マジですか
>>937と同じく文字列リテラルはconst char*だと思ってた
941デフォルトの名無しさん:2007/04/29(日) 02:14:55
vector<string*> vec;
vec.push_back(new string("あべし"));

vec.clear();
ってした際には"あべし"が格納されてるstringオブジェクトは
ちゃんとdeleteされるんでしょうか?
942デフォルトの名無しさん:2007/04/29(日) 02:15:50
>>941
されません。boost::ptr_vectorを使えばされます。
943デフォルトの名無しさん:2007/04/29(日) 02:32:11
d
ぼーすとって凄いラインぶらり何ですね
944919:2007/04/29(日) 02:35:02
>>922さん
sprintf(kakko, "%.*s", pr - pl - 1, pl + 1);
ってどういう動きしてるんですか?
やってみたんですがpr-pl-1のところとかいじっても出力結果が変わらなかったのですが
何がどうなってるのか全然わからないす・・

いじった理由は'('から次の文字はちゃんと取れているのですが')'の前で終わって欲しいのに
')'の後ろの文字まで出てしまうからです。
945デフォルトの名無しさん:2007/04/29(日) 03:42:26
>>944
%*s は、文字列の長さが少なくても指定した幅だけは最低とる
指定した長さで切るなら、%.*s
短くても長くても固定サイズにしたいなら %*.*s

NULLをインクリメントしたって鼻から悪魔でもなんでもない
946919:2007/04/29(日) 09:21:19
>>945さん
ありがとうございます。早速試してみます
947デフォルトの名無しさん:2007/04/29(日) 15:14:23
C言語でのデバッグのコツを教えてください。
948デフォルトの名無しさん:2007/04/29(日) 16:46:43
printf
949919:2007/04/29(日) 18:19:20
だめだー・・どうあがいても無駄な文字まで拾ってきてしまう・・
大人しくfor文で回して一文字ずつ格納していくしかないのか
950919:2007/04/29(日) 18:38:21
と思ったら事故解決しました。
お騒がせしました
951デフォルトの名無しさん:2007/04/29(日) 21:59:06
今さらだけど>>938ってマジ?
PCぶっ壊れてるから確認できない。
952デフォルトの名無しさん:2007/04/29(日) 22:07:36
>>938-940
C++では、const charの配列だが、文字列リテラルからchar*への変換が定義されている。
X 3014:2003
2.13.4 文字列リテラル 1節目
4.2 配列からポインタへの変換 2節目
953デフォルトの名無しさん:2007/04/30(月) 00:41:27
constしか取れないとAPIに渡せなくて困っちゃうことが多いから、そうしたんだっけ
954デフォルトの名無しさん:2007/04/30(月) 00:49:29
>>953
そーしないと、既存の(C言語の)資産を活かせるという
C++の最大の売りのひとつが台無しになっちゃうからね。
955デフォルトの名無しさん:2007/05/01(火) 01:08:10
Javaは多少やっていて、今C++を調べています。

C++だと宣言しただけでオブジェクトができる?みたいですが、

vector<string> vec;
vector<string> *vec = new vector<string>();

上の二つの宣言でどちらも利用できますが
どちらを使ったほうがいいんでしょうか?
956デフォルトの名無しさん:2007/05/01(火) 01:14:33
C++にはご存知のとおりGCはない。
後者の場合プログラマが明示的にdeleteしないとメモリリークが発生する。
特に理由がなければ前者を使えばいいし、他のスコープなどから参照するような場合があるなら後者を使えばいい。
957デフォルトの名無しさん:2007/05/01(火) 01:15:43
boost::smart_ptrとかstd::auto_ptrに入れればスコープが外れると
自然にdeleteされるのでそれをお勧めする
958デフォルトの名無しさん:2007/05/01(火) 01:16:38
というか
>C++だと宣言しただけでオブジェクトができる?みたいですが、
こう書いてある時点でSTLやらBoostにはまだ手を出してはいけないような気がする。
959デフォルトの名無しさん:2007/05/01(火) 01:31:02
のど渇いたから水飲んでこよーっと
960デフォルトの名無しさん:2007/05/01(火) 01:33:32
>>959
ダメ! 寝る前に水飲むとオネショするよ?
961デフォルトの名無しさん:2007/05/01(火) 01:44:27
今日は早起きしたからこんな時間に居るんだよ?
962デフォルトの名無しさん:2007/05/01(火) 03:20:34
早起きにもほどがあるw
963デフォルトの名無しさん:2007/05/01(火) 03:50:02
newで配列を動的に確保する場合、
a[100][2]よりa[2][100]のような形の方がメモリが連続して速くなりますか?
964デフォルトの名無しさん:2007/05/01(火) 04:47:37
longの場合で[10000][1]と[1][10000]なら50倍近い差が出て笑った
もちろん速いのは後者ね
これはループまわして確保するって事の影響なんだろうけど
965デフォルトの名無しさん:2007/05/01(火) 05:00:41
ループまわさないでやったら大差なかった
ごめん
966963:2007/05/01(火) 05:31:57
forループで何か計算させる場合も、メモリが連続している方がキャッシュが効きやすくなるのでしょうか?
967デフォルトの名無しさん:2007/05/01(火) 06:36:27
そんなの環境によるだろ
キミに必要なのは、自分で実際に試してみて計測する気持ちだ
968デフォルトの名無しさん:2007/05/01(火) 06:39:58
どんな環境でも連続してる方がキャッシュは効きやすくないか?

まあ、それはともかく、type* で連続メモリを確保して、
type** でそこへのアドレスを保存するテーブルを作ればいいんだぜ。
969デフォルトの名無しさん:2007/05/01(火) 06:42:07
キャッシュが無い環境では効くも何も無い
970デフォルトの名無しさん:2007/05/01(火) 06:50:35
質問自体が成り立たない状況は
質問の対象外だろ
971デフォルトの名無しさん:2007/05/01(火) 07:01:03
多次元配列 hoge[X][Y]のX,Yという並びには意味があるときがほとんどだから
その意味を潰す事のコストが大きすぎて、多少の差なんてどうでもよくなってしまう
972デフォルトの名無しさん:2007/05/01(火) 07:05:49
>>970
つまり実際に試せということだ
973デフォルトの名無しさん:2007/05/01(火) 08:01:56
キャッシュの有無は CPU の仕様を見れば
974デフォルトの名無しさん:2007/05/01(火) 11:39:45
>>971
そういう気持ちの悪い理由で、二次元データを画像に落とすときにもにょる羽目になることは多い。
975デフォルトの名無しさん:2007/05/01(火) 13:20:19
C言語で、aaaというファイルを読み書き両用で作成するなら
fp = fopen("aaa.txt", "a+");
でいいと思うんですが
aaaという固定のファイル名ではなくて、
キーボードから入力した任意の文字列のファイル名でファイルを作成したい場合はどうすればいいのでしょうか?
976デフォルトの名無しさん:2007/05/01(火) 13:35:40
任意の文字列を格納したchar配列を渡せばいいんじゃないか
977デフォルトの名無しさん:2007/05/01(火) 14:05:33
>>975
ファイルを作成するなら"w+"だな。
"a+"じゃファイルは既存である必要がある。
#尤も、"w+"じゃ既存ファイルを消してしまうが。
978デフォルトの名無しさん:2007/05/01(火) 14:58:31
a や a+ はファイル作成するよ
979デフォルトの名無しさん:2007/05/01(火) 15:05:13
既存ファイルの破壊を防ぐ典型的な方法って
書き込み用として開く前に、読み込み用に開こうと試みて指定ファイルの存在を調べる
以外にありますか?
俺の少ない知識ではこれしか思いつかないんですが・・・
980デフォルトの名無しさん:2007/05/01(火) 15:35:19
char* str = "aiueo";

このaiueoは定数なんですよね?
だったら、
str = "owner";
としてaiueoという定数ではなくownerという定数を指すようにすることはできても
定数自体を書き換えることはできないんですか?
*str = "o"
*(str+1) = "w"

みたいな感じです
981デフォルトの名無しさん:2007/05/01(火) 15:38:25
次スレは?
982977:2007/05/01(火) 15:46:58
>>978
あーそうだっけ。失敬。
どっちみち、既存ファイルの既存部分に手をつけられないから使うメリットは余りないけど。

>>979
環境依存しない方法では、それが無難だね。
"r+"で試みて駄目なら"w+"で開くのが一般的かな。
#追記限定なら"a"でいいでしょ。
983980:2007/05/01(火) 15:50:06
>>980
できてしまうかもしれないけれど、一般的には駄目。
もしかしたらその"aiueo"が"waiueo"と共存しているかもしれないし。
984983:2007/05/01(火) 15:51:26
ありゃ、名前欄ミスった。スマソ
985デフォルトの名無しさん:2007/05/01(火) 16:07:14
>>983
やっぱりだめなんですね。
共存というのがよくわからないのですが、さらに調べてみます。
986デフォルトの名無しさん:2007/05/01(火) 16:08:02
>>980
>*str = "o"
>*(str+1) = "w"
これは、
*str = 'o'
*(str+1) = 'w'
こうなる。
ただし元の"リテラル"を書き換える事は普通しない。
配列か、malloc等で確保した領域で行う。
987デフォルトの名無しさん:2007/05/01(火) 16:10:46
>>980
文字列リテラルは書きかえちゃダメというのが C の規約にあったはず。
その癖型は char* なんだけどな。
そういう規約がなかった時代に書きかえるコードが書かれてて、
そういうコードが通らなかったら困るからという歴史的な理由だった記憶があるけど、
違うかもしれん。

char str[] = "aiueo";
なら書きかえても大丈夫。
str という配列変数を自前で作ってるから。
988デフォルトの名無しさん:2007/05/01(火) 16:15:09
すごく丁寧な回答をありがとうございます。
とても理解しやすく、非常に為になりました。
989デフォルトの名無しさん
次スレいらね。
↓使えば十分っしょ。

【初心者歓迎】C/C++室 Ver.36【環境依存OK】
http://pc11.2ch.net/test/read.cgi/tech/1175436073/

はきだめC/C++下級者の質問箱 2
http://pc11.2ch.net/test/read.cgi/tech/1156206091/