トップページ⇒tech
1001コメント319KB

【初心者歓迎】C/C++室 Ver.10【環境依存OK】

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
エスケープシーケンスやWin32APIなどの環境依存な物でもOK。
ただしその場合、質問者は必ず、環境を書きましょう。

【歴代スレ】
1:http://pc5.2ch.net/tech/kako/1059/10590/1059041347.html
2:http://pc5.2ch.net/tech/kako/1067/10671/1067189450.html
3:http://pc2.2ch.net/test/read.cgi/tech/1069719929/ (消滅?)
4:http://pc2.2ch.net/test/read.cgi/tech/1073473867/ (消滅?)
5:http://pc5.2ch.net/test/read.cgi/tech/1077102238/ (dat落ち)
6:http://pc5.2ch.net/test/read.cgi/tech/1082182233/(dat落ち)
7:http://pc5.2ch.net/test/read.cgi/tech/1086373839/(dat落ち)
8:http://pc5.2ch.net/test/read.cgi/tech/1091264964/(dat落ち)
9:http://pc5.2ch.net/test/read.cgi/tech/1094494997/l50

【ラウンジ】質問、回答が長い時はココを使うと見やすい
http://do.sakura.ne.jp/%7Ejunkroom/cgi-bin/megabbs/lounge/index.html

関連スレは>>2-5ぐらい
0002デフォルトの名無しさんNGNG

【関連スレ(処理系別)】
★初心者にVisual C++を教えるスレ★ Part14
http://pc5.2ch.net/test/read.cgi/tech/1093672937/l50

■MFC相談室 mfc11.dll■
http://pc5.2ch.net/test/read.cgi/tech/1088084875/l50

C++Builder相談室 Part11
http://pc5.2ch.net/test/read.cgi/tech/1094749339/

GCCについて part4
http://pc5.2ch.net/test/read.cgi/tech/1090062751/l50

cygwin + mingwn + gcc 相談室
http://pc5.2ch.net/test/read.cgi/tech/1058134693/

タダで使えるBorland C++ Part4
http://pc5.2ch.net/test/read.cgi/tech/1091066805/l50

タダで使えるVisual C++ $2
http://pc5.2ch.net/test/read.cgi/tech/1086287039/l50

Borland C++ BuilderX
http://pc5.2ch.net/test/read.cgi/tech/1065260556/l50

Turbo C++ 5.0 プログラミング
http://pc5.2ch.net/test/read.cgi/tech/1030878794/l50
0003デフォルトの名無しさんNGNG
【関連スレ(その他)】
C言語なら俺に聞け! Part 92
http://pc5.2ch.net/test/read.cgi/tech/1096696253/

C++相談室 part36
http://pc5.2ch.net/test/read.cgi/tech/1096304546/

ぼるじょあがC/C++の宿題を片づけますYO! 31代目
http://pc5.2ch.net/test/read.cgi/tech/1095075678/

【C++】template 統合スレ -- Part5
http://pc5.2ch.net/test/read.cgi/tech/1091522597/l50

C++は難しすぎ 難易度:2
http://pc5.2ch.net/test/read.cgi/tech/1071697977/l50

C言語の第一歩
http://pc5.2ch.net/test/read.cgi/tech/1031374980/l50
0004デフォルトの名無しさんNGNG
【関連スレ(その他)】
★C言語で遊ぼう!★
http://pc5.2ch.net/test/read.cgi/tech/1028269762/l50

プリプロセッサについて熱く語るスレ。
http://pc5.2ch.net/test/read.cgi/tech/1058203590/l50

C統合・質問スレッド
http://pc5.2ch.net/test/read.cgi/tech/1068359871/l50

フリーコンパイラー使えよ。
http://pc5.2ch.net/test/read.cgi/tech/1061384369/l50

C、C++の最適化について語るスレ
http://pc5.2ch.net/test/read.cgi/tech/1084676298/l50

ラウンジでC言語
http://etc3.2ch.net/test/read.cgi/entrance/1093006298/l50
0005デフォルトの名無しさんNGNG
次スレ立ってないみたいなので勝手にスレ立て。
一応関連スレも最新に更新したつもりだけど抜けがあったらスマソ。
0006デフォルトの名無しさんNGNG
スレ勃て乙
0007デフォルトの名無しさんNGNG
MFCスレはここが最新でした。_| ̄|○

■ MFC相談室 MFC12.dll■
http://pc5.2ch.net/test/read.cgi/tech/1096848771/

0008デフォルトの名無しさんNGNG
>>1
早いな。オツカレ。
0009デフォルトの名無しさんNGNG
ウワァァァァァァン。・゚・(ノД`)・゚・。
オーバーロードとオーバーライドがワケワカラン!
なんでこいつらこんな名前似てるの?
0010デフォルトの名無しさんNGNG
カタカナデカンガエルカラワケワカンナクナルンダヨ
0011デフォルトの名無しさんNGNG
>9
とりあえず俺はオーバーライドの「ライド」という部分の意味で識別してる。
0012デフォルトの名無しさんNGNG
そっか、オーバーロードは多重定義
オーバーライドは・・・漢字で何て書くんだろ
ライドはrideだから乗る・・・上乗り。よし、覚えたぜ!!!
0013デフォルトの名無しさんNGNG
いや・・・普通に英語で。
overload - 荷を積み過ぎる
override - 優先する
だっけか?
0014デフォルトの名無しさんNGNG
overload 腎虚
override 騎乗位
0015デフォルトの名無しさんNGNG
>>13
ダメじゃん
0016デフォルトの名無しさんNGNG
VC6はひょっとして#include <iostream> using namespace std;に対応してない?
clに-gxでやれゴルァといわれちゃうんですけど
0017デフォルトの名無しさんNGNG
/* sample16.c */
#include <stdio.h>
int main(void)
{
int a, x;
int *pa; /* ポインタ変数の宣言 */
a = 100;
pa = &a; /* 変数aのアドレスを代入する */
printf("address=%x\n",pa); /* 変数aのアドレスを表示 */
x = *pa; /* 変数aのアドレスの内容をxに代入 */
printf("data:a=%d x=%d\n",a,x);
}

を実行すると一瞬だけウインドウが表示されてすぐに消えてしまって
結果が確認できません
どうすれば結果が表示されたままになるのでしょうか?
0018デフォルトの名無しさんNGNG
>>17
どのように実行したのですか?
001917NGNG
>>18
f5を押しました
0020デフォルトの名無しさんNGNG
>>17
終わりにgetchar();
0021デフォルトの名無しさんNGNG
>>18
>>20
うまいこといきました

ありがとうございました
0022デフォルトの名無しさんNGNG
>>19
f5は何かのショートカットですか?
0023デフォルトの名無しさんNGNG
デバッグ実行 by vc6
>>21
その前にCtl+F5ですよ。
0024デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void)
{
int a, x;
int *pa; /* ポインタ変数の宣言 */
a = 100;
pa = &a; /* 変数aのアドレスを代入する */
printf("address=%x\n",pa); /* 変数aのアドレスを表示 */
}
↑の時はpaでアドレスが表示されるのに

#include <stdio.h>
int main(void)
{
char *pa;
pa = "abcd";
printf("%s\n",pa);
}
↑の時はアドレスが表示されないで文字のabcdが表示されるのですか?
0025デフォルトの名無しさんNGNG
>>23
ありがとうございます

ちゃんと表示されたままになりました
0026デフォルトの名無しさんNGNG
>>24
だって文字列表示と指示してんじゃん。
0027デフォルトの名無しさんNGNG
>>24
出力書式でググッてみな
0028デフォルトの名無しさんNGNG
>>26
>>27
>printf("%s\n",pa);
調べてみました

でフォーマット指定子が%sの時はpaのアドレスにはいっているabcdが表示されて
%dにするとなんか数字が表示されたんですけどabcdが入ってるアドレスが表示されたんですか?

paはアドレスしか示さないと思ってたのにびっくりです

0029デフォルトの名無しさんNGNG
%dと%xの違いは10進数か16進数かということ。
っていうか聞く前に自分で調べろや。
0030デフォルトの名無しさんNGNG
>>24
%p が使える環境ならそれを使うべき。
%x,%d で代用するならキャストが要る。
0031デフォルトの名無しさんNGNG
OpenFileMappingに失敗します。OpenFileMappingの戻り値はNULL、エラーコードは2(指定されたファイルが見つからない)です。
オブジェクト名は何度も確認したので間違いありません。CreateFileMappingには成功し、オブジェクトに書き込んだデータを
OutputDebugStringで表示することができました。失敗の原因として、オブジェクト名以外に何が考えられますか?
使用しているコンパイラはBCCです。猫でもわかるの123章のプログラムを実行しました。
0032デフォルトの名無しさんNGNG
#include <stdio.h>

struct teststruct
{
int x,y,z;
};
void func(struct teststruct *test[]);
int main()
{
struct teststruct test[8];
test[1].x=8;
func(&test[1]);


}
void func(struct teststruct *test[])
{
printf("%d" , test[1]->x);
}

何度もすいませんけど
メイン関数内のtest[1]の内容を関数func()の中で見たいんですけど
どうしたらいいのでしょうか?
上の様にすると実行中に
test1.exe の 0x00411af4 でハンドルされていない例外が発生しました
: 0xC0000005: 場所 0xcccccccc を読み込み中にアクセス違反が発生しました。 。
と出てきます
0033デフォルトの名無しさんNGNG
× func(&test[1]);
○ func(test);
0034デフォルトの名無しさんNGNG
ん?
× void func(struct teststruct *test[])
○ void func(struct teststruct test[])

× printf("%d" , test[1]->x);
○ printf("%d" , test[1].x);
0035デフォルトの名無しさんNGNG
>>32
なんでそれで正しく動くと思うの?
0036デフォルトの名無しさんNGNG
無意味な質問キタ━━━━━━(゚∀゚)━━━━━━!!
0037デフォルトの名無しさんNGNG
>>33
>>34
>>35
レスありがとうございます
ご指摘の通り修正したらエラーは出なくなったんですけど
8じゃない別のすごい大きな数字が表示されます
test[1].x=8;
で8を代入したはずなのになんでなんですか?

いろいろ調べて例とか見て改良を加えてみたのですが
正しく動くかどうかまでは判断できなかったので聞いてみました
0038デフォルトの名無しさんNGNG
>>37
少なくとも自分で正しく動くと思うものを持ってきてくれ。
0039デフォルトの名無しさんNGNG
>32
よくわからんので、オレ流に書き直してみた。

#include <stdio.h>

typedef struct
{
  int x;
  int y;
  int z;
} teststruct;

void func(teststruct* pTest);

int main()
{
  teststruct test[8];

  test[1].x=8;
  func(&test[1]);
}

void func(teststruct* pTest)
{
  printf("%d\n" , pTest->x);
}
0040デフォルトの名無しさんNGNG
>>39
うまくいきました
おかげさまで解決しました
ありがとうございました
0041デフォルトの名無しさんNGNG
>>40
なぜ>>39でうまくいくのかよく考えてくれよ。
このスレは初心者歓迎って書いてあるから質問にはそれなりに回答するけど、
かわりにやってやるスレじゃないからな。
0042デフォルトの名無しさんNGNG
要するに配列とポインターをいまいち理解しきれてない模様
0043デフォルトの名無しさんNGNG
メモリマップ書きながらお勉強すると割りと簡単に理解できるよね
0044デフォルトの名無しさんNGNG
MFCアプリケーションからコンソールアプリケーションの標準出力結果を取得するプログラムを作成中です。
OSはWindowsXP,コンパイラは.NET2003です。

("test.exe"での標準出力をbufにセットする処理)

http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=122

以上の処理までは作成できましたが、
このとき、"test.exe"で'\n'や'\t'などの空白文字を標準出力しているのに
ReadFileしたときにはそれらの空白文字が飛ばされてbufにセットされています。
どこが間違いでこうなるのかがわからないのでお教え願います。
0045デフォルトの名無しさんNGNG
bufの表示か書き出しの仕方のほうがまずいかんじ
0046デフォルトの名無しさんNGNG
#include <stdio.h>
#include <math.h>
struct teststruct
{
int x,y,z;
};
struct teststruct func(void);
int main()
{
struct teststruct test[8];
test=func();
printf("%d" , test[0].x);
printf("%d" , test[1].x);
printf("%d" , test[2].x);
}
struct teststruct func(void)
{
struct teststruct test[8];
  test[0].x=7;
test[1].x=1;
test[2].x=3;
return test;
}
func内のtest[0]〜test[7]をそっくりそのままmainに渡したいのですけど
上のプログラムだと
error C2440: '=' : 'teststruct' から 'teststruct [8]' に変換できません。
error C2440: 'return' : 'teststruct [8]' から 'teststruct' に変換できません。
とエラーがでますどうすればいいのでしょうか?


0047デフォルトの名無しさんNGNG
>>46
まず配列のコピーは代入したからといってコピーしてくれるわけではありません。
次に関数の返却値はコンパイルエラーそのままです。
だからC++では
const teststruct (&f())[8]{....} こんなことやって配列の同じ型なら返せますけど・・・だれもやらない。と、思う。
で、言いたい事は最初に言ったことを覚えればいいです。
最後に
ttp://www9.plala.or.jp/sgwr-t/
こんなところで勉強した方がいいかも。
内容は読んでないからよくわからないけど見出しではいろいろそろってる感じだし
なんか、本も出版してるみたい。
0048デフォルトの名無しさんNGNG
>46
漏れならこう書く

#include <stdio.h>

struct teststruct
{
  int x,y,z;
};

void func(struct teststruct* pTest);

int main()
{
  struct teststruct test[8];

  func(test);
  printf("%d\n" , test[0].x);
  printf("%d\n" , test[1].x);
  printf("%d\n" , test[2].x);
}

void func(struct teststruct* pTest)
{
  pTest[0].x=7;
  pTest[1].x=1;
  pTest[2].x=3;
}
0049デフォルトの名無しさんNGNG
>>47
わかり易そうな解説のサイトですね
お気に入りに登録しました
>>48
なるほど、リターンで返さないでもこうすればできるんですね

おかげさまで解決しました
お返事ありがとうございました



0050デフォルトの名無しさんNGNG
>>49
>なるほど、リターンで返さないでもこうすればできるんですね
お前もう一度一から勉強し直せ・・・。
0051デフォルトの名無しさんNGNG
似たような質問ですいませんが
下のプログラムは不完全なんですけど
やりたいことはわかってもらえると思うんですけど
#include <stdio.h>
#include <math.h>
struct teststruct
{
int x,y,z;
};
struct teststruct func(void);
int main()
{
struct teststruct test[];
test=func();
printf("%d" , test[0].x);
printf("%d" , test[1].x);
printf("%d" , test[2].x);
}
struct teststruct func(void)
{
a=5;
std::vector<struct teststruct> test(a);
test[0].x=7;
test[1].x=1;
test[2].x=3;
return test;
}
配列の要素数aの値はfunc内で求めなければいけないので今度は>>48の方法が使えなくなりました
func内のtest[0]〜test[a]をそっくりそのままmainに渡したいのですけど
どうすればいいのでしょうか?
c言語使ってます
0052デフォルトの名無しさんNGNG
>>51
c言語でvectorは使えない。これはc++のライブラリ。

あと君はポインタの勉強がまだのようですね。
ポインタが分からないと配列は扱えないので
まずそちらをきちんと勉強しましょう。
0053デフォルトの名無しさんNGNG
.NETでC++で開発してます。
MFCアプリケーションでダイアログベースで作ってます。
ある程度コントロールを配置してイベントを書いたところで、
ダイアログのIDを変更したところ、
なぜかリソースビューのダイアログエディタでボタン等をダブルクリックしたら、
MFCクラスウイザードが立ち上がり、今までのソースファイルとは別のソースファイルのクラスの作成を促されます。
ダイアログのIDの変更を生かしつつ新しいクラスを作成せずに今まで作ったソースを利用するにはどうすればいいのでしょうか?
0054デフォルトの名無しさんNGNG
>>53
1行目と2行目の間にそこはかとなく矛盾があるがそれは置いておくとして、
ダイアログクラスのなかに enum{ IDD = HOGE }; の形でダイアログテンプレートのIDが記憶されてる。
それと実際のテンプレートのIDが合ってないとウィザードが新しいクラスを作ると言い出す。
005553NGNG
ありがとうございます。
目的通り動きました。
0056デフォルトの名無しさんNGNG
mallocで確保されるメモリー領域は必ず連続した領域として
確保されているんですか?
幾つかに分割されていることもあるんでしょうか?
0057デフォルトの名無しさんNGNG
>>46
ポインタについてよく理解できていないようですね。私の分かる範囲で指摘しておきます。
まず、test=func();という記述は明らかにおかしいです。配列名は配列の基底アドレスを示す定数のポインタです。
従って、配列名を左辺に置くことはできません。
次に、return test;という記述がおかしいです。関数funcの戻り値はteststruct型の構造体ですが、
testはteststruct型の構造体へのポインタです。戻り値の型が一致していません。
このような場合一般的には、関数の引数として、teststruct型の構造体へのポインタを渡します。
そうすれば、main関数で宣言されたteststruct型の変数testの内容を、間接的に別の関数で書き換えることができます。
0058デフォルトの名無しさんNGNG
>>56
実体はシランがプルグラマからは連続した領域に見えるから(・ε・)キニシナイ!!
0059デフォルトの名無しさんNGNG
class A{

public:
  A(){};
  B* bobj;
  void funcB(B*);
};
//A.h

class B{

public:
  B(){};
  A* aobj;
  void funcA(A*);
};
endif//B.h

このような2つのヘッダファイルを
コンパイルすると、エラーになってしまいます。
AとBの間で通信を行おうとしているのですが、具体的にはAとBはウィンドウで
Aのボタンを押したら結果をBに反映させ、Bのボタンを押したら、結果を
Aに反映させようとしております。何か良い方法が無いでしょうか?
宜しくお願いいたします。
0060デフォルトの名無しさんNGNG
ヘッダ分けずにclass A の定義の前でclass Bを宣言だけする。
0061デフォルトの名無しさんNGNG
>>59
mediatorパターン
006259NGNG
>>60>>61
ありがとうございます。A=プロパティシートB=子MDIチャイルドです。
>>60
多分先頭でclass B;と書くのですね?
今まで、こういうソースを見ても良くわからず、理解に苦しんでおりました。

>>61
共通の基底クラスを作ってそこからABを派生させるという事で宜しいでしょうか?
とりあえず、「AはA、BはB」と分けるのがスジと思っておりますので、「家系図」を
考えてみます。

ありがとうございました。
0063デフォルトの名無しさんNGNG
失礼しまつ
http://pc5.2ch.net/test/read.cgi/tech/1095075678/669
・アルゴリズム・データ構造の説明(少なくていいです)
・スピードやメモリの効率向上のためなど工夫した点
を聞きたいのですが、おねがいします
0064デフォルトの名無しさんNGNG
>>63はマルチなのでスルー
0065デフォルトの名無しさんNGNG
>>64
マルチですんませんがマジで困ってるんです
助けてください
0066デフォルトの名無しさんNGNG
>>65
むしろ荒らしだろ
マルチするにも程がある
0067デフォルトの名無しさんNGNG
実行速度が速すぎてキャラの移動が早すぎるので
ウエイトかけたいんですけど簡潔で効率的なウエイトのかけ方を
教えてくださいC言語でおねがいします
0068デフォルトの名無しさんNGNG
>>67
DirectDraw/Direct3D
0069デフォルトの名無しさんNGNG
>>68
そっちで聞いてみます
誘導サンクス
0070デフォルトの名無しさんNGNG
自分でアーカイブしたファイル(無圧縮)を読み込んでいるのだけど、

BOOL LoadFile(short nNum){ //ファイルを読み込む関数
HANDLE handle=0; //ファイルハンドル
CFileAercaiver cFa; //アーカイブファイルから読み込むための自作クラス。

if (!cFa.Open("アーカイブファイル名"nNum)) //成功したら、指定したアーカイブのnNum番目のファイルの情報とファイルハンドルを、cFaオブジェクトが保有します
 handle = cFa.GetHandle(); //アーカイブファイルのハンドルを取得

/*cFa.Open()内では、
 ※m_hFileは、privateのメンバ変数
 m_hFile = CreateFile("アーカイブファイル名", GENERIC_READ, FILE_SHARE_READ, NULL,OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);

 //処理を省略)アーカイブファイルのヘッダーを読み、nNum番号のファイルへのファイルポインタ(dwFPont)を取得する。

 SetFilePointer(m_hFile,dwFPont,NULL,FILE_BEGIN); //nNum番号のファイルの先頭にファイルポインタを移動
*/
//指定ファイルのヘッダーを読む
LoadHeder(handle);
}
------------------
BOOL LoadHeader(HANDLE &hFile){
 RIFFHEAD riffhead; //自作の構造体 ※20byte
 DWORD readed;

 ReadFile( hFile, &riffhead, sizeof(RIFFHEAD), &readed, NULL );
}
このLoadHeader関数内のReadFileが問題で、ReadFileは1を返して、readedもちゃんと20になっているのだけど、
riffhead構造体のメンバがすべて0になってしまいます。なぜ読み込めないのか、ヒントだけでもお願いします。
0071デフォルトの名無しさんNGNG
読んだファイルの内容が全部0x0というオチ
007270NGNG
>>71
スミマセン、マジでそんなオチがつくかもしれません OTL
読み込もうとしてるファイルは、wavファイルのアーカイブなんですが、
その元のwavファイルには、ちゃんとヘッダー情報が保存されているのに…。

同じアーカイバのルーチンでbmpも扱っているけど、これは正常に読めてたので、
アーカイバには問題無いと思ってましたが、もう一度見直してみます。
007344NGNG
>>45さん、ご解答ありがとうございました。
調べてみたら、bufはちゃんと改行文字を取得していて、
それを表示する際に間違えていました。
どうも、お手間をかけさせてすみませんでした。
0074デフォルトの名無しさんNGNG
typeid( anInstance ).name()で取り出せる型情報を示す文字列が
minGWでコンパイルしたものとVCでコンパイルしたものとで違うんですがコンパイラ依存なんですか?
具体的にはminGWの方が
  St16runtime_error
とかよくわからないプレフィックスが付いてるっす。
007570NGNG
>>71
ホントにそういったオチでした… OTL ハズカシイ…
アーカイバをちょっと変更したとき、アーカイブファイルも更新してやるべきでした。

2日も悩んでたことが解決しました。ありがとうございました。
0076デフォルトの名無しさんNGNG
>>74
コンパイラ依存です。
007774NGNG
>>76
なるほど。ありがとう。
JAVAの教本か何かで例外には意味のある名前を付けようみたいな事が
書いてあってC++でも型名取得する方法あるかな・・・と思ったのですが、name()で
常に意味のある文字列を返すと思って使わない方がよさげですね。
0078デフォルトの名無しさんNGNG
クラスの中に静的なポインタと、そのポインタを初期化する静的な関数を作ったのですが、
"error LNK2001: 外部シンボル ""private: static int * a::ptr" (?ptr@a@@0PAHA)" は未解決です。"
というエラーが出て、リンクの時点で失敗します。
ソースは以下です。
ポインタが、普通の変数なら上手くいくんですが、原因が分かりません。
分かる方いらっしゃいましたら、ご教授お願いします。

//----------------------------
#include <stdio.h>

class a{
static int *ptr;
static void func(void);
};
int a::*ptr;

void a::func(void)
{
ptr = NULL;
}

void main(void)
{
}
//----------------------------
0079デフォルトの名無しさんNGNG
>>78
#include <cstdio>
class a{
static int *ptr;
static int *func(void);
};
int a::*ptr (a::func ());
int *a::func(void)
{
return NULL;
}
か
int a::*ptr (NULL);
0080デフォルトの名無しさんNGNG
int *a::ptr;
008179NGNG
いけね
-int a::*ptr (a::func ());
+int *a::ptr (a::func ());

-int a::*ptr (NULL);
+int *a::ptr (NULL);
0082デフォルトの名無しさんNGNG
最近Cを勉強して見ようと思い、簡単なサンプルコードなどをコンパイルしていますが
拾ったものをコピペすればきちんと実行されるが、
自分で全く同じものを書いてもエラーがでてしまいます。
わけがわかりません。例えば、
#include <stadio.h>
int main()
{
printf("Hello World\n");
return 0;
}
で、インクルードファイルをオープンできない
  プロトタイプ宣言のない関数printfのよびだし
とでてコンパイルできません。初心者以下の質問のような気がしますが、
どうかどなたか何が悪いのか教えてください。
コンパイラはBCCです。
0083デフォルトの名無しさんNGNG
>82
#include <stadio.h>
よく嫁
0084デフォルトの名無しさんNGNG
#include <stdio.h>
#include <stdio.h>
#include <stdio.h>
(゜∀゜)
008582NGNG
本当に申し訳ないorz
みなさんどうもありがとうございました。
0086デフォルトの名無しさんNGNG
>>85
どんまい。
0087デフォルトの名無しさんNGNG
#include <studio.h>ならまだ気持ちは理解できたかも。
008878NGNG
>>79,81
レスが遅くなりました。
int *a::ptr (a::func ())
はつまり、func の戻り値を入れているということですよね?
確かに、試してみたらうまくいきました。

が、なぜfunc関数内でptrに直接入れられないのでしょうか?
ともあれ、もう少しいろいろいじってみます。
教えてくださってありがとうございました。
0089デフォルトの名無しさんNGNG
>>88
class a { static int *ptr; };
int a::*ptr;
これら二つの変数が別物だということは理解できていますか?
009078NGNG
>>89
えーと、いろいろ調べてみたのですが、
int a::*ptr;
は、つまりメンバポインタというやつでしょうか?

78のソースの
int a::*ptr;
を、
int *a::ptr;
に変えただけで上手くビルドできたので、
普通のポインタを宣言するところを、間違ってメンバポインタを宣言してしまっていた
という解釈でいいんでしょうか?

うーむ、なんかトンチンカンなことをいっている気がします。
まだまだ修行が足りませんね。
0091デフォルトの名無しさんNGNG
C++専用のヘッダファイルの拡張子は*.h(ほとんど), *.hpp(それなりに), *.hxx(みたことがない)
とかがありますけど、「好きに選べ」以外の選択材料はありますか?
0092デフォルトの名無しさんNGNG
>90
概ねあってますが、この場合、宣言というよりも定義という方が正しいと思います。
0093デフォルトの名無しさんNGNG
>>90
int *a::ptr;はint*型でclass aのメンバptr。
int a::*ptr;はint型のclass aのメンバへのポインタptr。

【その他】
・こういう時はint* a::ptr;と書いた方が分かりやすい。
・宣言と定義はきちんと使い分けること。
・C++で関数の引数がないときに普通voidは書かない。(void func()で十分)
・void main()は規格にない。int main()にすること。
009478NGNG
>>92,93
大変勉強になりました。
ありがとうございました。
0095デフォルトの名無しさんNGNG
>・C++で関数の引数がないときに普通voidは書かない。(void func()で十分)
どこの普通よ
0096デフォルトの名無しさんNGNG
>>95
はCとC++の区別のつかない低脳ぶり
0097デフォルトの名無しさんNGNG
>>91
c  ⇔h
cpp⇔hpp
cxx⇔hxx
0098デフォルトの名無しさんNGNG
コピーコンストラクタについて質問です。

class Hoge{
priavte:
 int hage;
public:
 Hoge(){ hage = 0; }
 Hoge( const Hoge &src ){ this->hage = src.GetHage(); }
 ~Hoge(){}

 int GetHage(){ return hage; }
};

大抵のHPで書かれている方法が、上記のようなことなのですが
error C2662: 'Hoge::GetHage' : 'const Hoge' から 'Hoge &' へ 'this' ポインタを変換できません。
とエラーが出てしまいます。const を外せばエラーは消えますが…
環境はVC7ですが、VC7の仕様で他のコンパイラでは正常なのでしょうか?
また、仕様であれば、現在はどのような方法が主流なのでしょうか?
ご教授お願いします。
0099デフォルトの名無しさんNGNG
って、書いた後猫でもわかるHPのconstオブジェクトにて解決しました^^;
スレ汚しすみませんでした
0100デフォルトの名無しさんNGNG
>>88
>なぜfunc関数内でptrに直接入れられないのでしょうか?
入れれないことはないです
ちゃんとa::funcを呼び出せばOK
#include <cstdio>
class a{
public:
static int *ptr;
static void func(void);
};
int *a::ptr;
void a::func(void) {ptr = NULL;}
int main(void) {
a::func ();
return 0;
}
0101デフォルトの名無しさんNGNG
ちょいと疑問に思ったんで。愚痴(?)聞いてください。
ふつーWindowsならshift_jis, Unix系ならeuc-jpでソースを書く
やないですか。

 cout << "Hello, 世界";

文字列リテラルにマルチバイト文字含みますわね。

FDIS召還したらば:

  string-literal とは
    s-char-sequence を "" または L"" で囲ったもの

  s-char-sequence とは
    s-char または
    s-char-sequense s-char (←つまり s-charの並び)

  s-char とは
    任意の source character set (" \ 改行 を除く) または
    escape-sequence または
    universal-character-name (← \u... \U... のことらしい)

となってます。source character set はいわゆる ASCII文字。

とすると、文字列リテラルの中に(いわゆる)'漢字'をじか書き
してはイケナイってことなんでしょか? 漢字を文字列リテラル内に
埋め込みたいなら excape-sequence 使わにゃならんのでしょうかホントは
0102デフォルトの名無しさんNGNG
神様は仰っしゃいました。
自分が正しいと思うことをやりなさい。
0103デフォルトの名無しさんNGNG
ちょっとお聞きしたいのですが、
ファイルの中が 00 00 00 01 をfreadでintに読み込むと
printfで"%#x"を表示させたとき0x1000000になるんですが
こうなるのが普通なんでしょうか?0x1になると思ってたんですが…
どういう理屈なんでしょう?fwriteで0x1を書き込んでも01 00 00 00になるし

環境はMinGW gcc3.2.3でやってます。
0104デフォルトの名無しさんNGNG
>>103
タマゴを割る時、太い方と細い方のどっちで割る?
おれっちは細い方から割るかな。
0105デフォルトの名無しさんNGNG
>>103
リトルエンディアン ビッグエンディアン
で検索汁
0106デフォルトの名無しさんNGNG
>>104、105
即レスどうもです。

CPUによって違いがあるのですね。
勉強になりました。ありがとうございました。
0107104NGNG
あ、ぽこたんまで礼言われちゃったお
0108デフォルトの名無しさんNGNG
>>106
ネットワークに流すデータの場合はリトルエンディアンのCPUであっても
ビッグエンディアンに変換してから送出しないといけない場合があるよ
0109デフォルトの名無しさんNGNG
次から次へとバグが出てくる
疲れました
さようなら…
0110デフォルトの名無しさんNGNG
化けて出るなよ、R.I.P.
0111デフォルトの名無しさんNGNG
>>109
設計か君の頭にバグがあるからだと思う
0112デフォルトの名無しさんNGNG
>>101
翻訳フェーズのはじめあたりで、 basic source character set 以外の文字をすべて
universal-character-name に置き換える処理が入ることになっている。
この置き換え方法は処理系定義とされていて、
さらに同じ結果が得られるなら独自の変換を使用してもよい事になっている。
ttp://www.kuzbass.ru/docs/isocpp/lex.html#lex.phases

あまり初心者歓迎スレでやる話じゃないな。
0113デフォルトの名無しさんNGNG
exeファイルを逆アセンブルすれば
どこらへんまでプログラムを解析できるんでしょうか?
ソースくらいまでわかってしまうんでしょうか?
0114デフォルトの名無しさんNGNG
>>113
ソースはどうやっても無理。情報が残ってないから。
同じようなソースを復元するのなら、スキル・想像力・忍耐力・時間があれば可能だろうが…
0115デフォルトの名無しさんNGNG
>113
元の変数名はわからないから用途も不明。
定数なんかも即値で埋め込まれるからマジックナンバーだらけ。
条件文やループ文もJUMP命令の嵐。
そんな汚いソースでよければ解析してくれたまい。
0116デフォルトの名無しさんNGNG
構造体も消滅しちゃうしな。
0117デフォルトの名無しさんNGNG
exeを解析すると元のソースがC++だったとかJavaだったとかは分かるのかなぁ
0118デフォルトの名無しさんNGNG
>>115
俺が最初に就職した会社で最初に振られた仕事がモロにそれだった
objファイルとexeファイルだけ渡されて、ソースの復元を(構造体も含めて)しろって
ソース読む能力を付けさせるための仕事だったんだろうとは思うが、泣きそうになりながら
復元した記憶がある
0119デフォルトの名無しさんNGNG
>>117
分かるよ
0120デフォルトの名無しさんNGNG
>>118
それ、いわゆる新人イジメだと思う。
0121デフォルトの名無しさんNGNG
C99に対応してるコンパイラってある?
0122デフォルトの名無しさんNGNG
部分対応とかばっかりじゃないかな
0123デフォルトの名無しさんNGNG
>>121
意外なことにVCの適合率がかなり高い
でもオススメはやっぱgcc
0124デフォルトの名無しさんNGNG
C++BuilderX にC99準拠コンパイラのプレビュー版とかあるみたい
0125デフォルトの名無しさんNGNG
友人にC勉強中はgccで-Wall -Werror -g付けておけと言われたのですが外しても良いですか?
0126デフォルトの名無しさんNGNG
dame
0127デフォルトの名無しさんNGNG
変数のスコープでどうしてもわからないところがあるのですが
forやif分で宣言した変数はそのブロック内に限られると書籍には書いてあったのですがVC++6.0で試してもどうもそうはないってないと思うのです。
下のソースをコンパイルしたときにスコープ外での使用でエラーが出るはずだと思うのですがエラーにならないのはなぜなのでしょうか?
#include <iostream>
using namespace std;
void loop()
{
    for(int i=0; i<10; i++){cout << "ループ" << i+1 << "回目です。\n";}
    cout << i << endl;//forブロックの外でiを使用。ここでエラーが出るはずなのでは??
}
int main()
{
    loop();
    return 0;
}
0128デフォルトの名無しさんNGNG
VCがクソだから
VC 2005でも未だに直ってない
嫌ならオプションで消せるが…
0129デフォルトの名無しさんNGNG
>>127
かつてARMと呼ばれる書籍でそのように決められていたから。
現在では規格で君が言ったように決められているから、コンパイラの
挙動が間違っている。コードの移植性が下がるから、自分で規格通りに
なるように気を付けよ。
0130デフォルトの名無しさんNGNG
>>127
マクロ無かったっけ?
#define for(arg) if (false); else for (arg)
こんな感じでforのスコープを規格通りにさせるやつ
0131デフォルトの名無しさんNGNG
>>130
そんなマクロ最悪
0132デフォルトの名無しさんNGNG
>>131
VC使ってないので記憶が曖昧なんだけど
結構そのたくましさに感心したんだけどな
最悪な理由を解説よろしく
0133デフォルトの名無しさんNGNG
>>128
オプションで直せるんですか?
VC++6.0でも直せればぜひぜひ方法をば・・
0134デフォルトの名無しさんNGNG
>>133
ってかC++使いたいんならVC6なんか使うなよ
.NETに移行すれ
0135デフォルトの名無しさんNGNG
>>133
C/C++→カスタマイズ→Microsoft言語拡張機能を無効にする
にチェック。
でもMFCとか使えなくなるんじゃないかな。
0136130NGNG
な〜んだ直せるのか
0137デフォルトの名無しさんNGNG
>>135
MFCが使えなくなる・・・さりげなく厄介ですね。
コンソールで動くプログラム限定で使用が望ましい気配。。。
0138デフォルトの名無しさんNGNG
いや、正確な所は確認してね
最近はVC++使ってないからシラネ
0139137NGNG
なんかエラーが出なかったコードまでエラーが出るようになった。。
VC++6.0がすでに時代遅れなのか。。やっぱり.netを検討するべきか。。。
0140デフォルトの名無しさんNGNG
VC++Toolkit2003タダだし使えば?
0141デフォルトの名無しさんNGNG
MFCじゃなくてwindows.hまで使えなくなる。

あと、例のマクロは
#define for if(0);else for
だな
0142デフォルトの名無しさんNGNG
C++で、クラス定義をヘッダファイルに書いて、メソッドをcppファイルに
分けて書くのって何故ですか?
1つのファイルに書いた方が分かりやすいように思うんですが。
0143デフォルトの名無しさんNGNG
>>142
分割コンパイルのため。
0144デフォルトの名無しさんNGNG
>>142
クラスを使うだけの人にクラスの内部処理の詳細を見せないため。
0145デフォルトの名無しさんNGNG
>>142
一度コンパイルすれば修正するまでコンパイルし直さなくて済む。
0146デフォルトの名無しさんNGNG
単に技術的問題。
当時はJavaみたいに一つのファイルから
定義だけを抜き出す方法を作れなかった。
0147デフォルトの名無しさんNGNG
>>145
分けても修正すればコンパイル必要じゃん。
0148デフォルトの名無しさんNGNG
printf()のような、可変長引数を取る関数にパラメータを渡したいのです。
下のような例の場合はどうすればよいのでしょうか?

void foo (const char *format, ...) { /* xxx */ }
/* void vfoo (const char *format, va_list ap) { } */

void bar(int numargs, char *argv[]) /*ここは自分で変えられない*/
{
    /*foo()かvfoo()を呼びたい*/
    /*vfoo(args[0], args[1:]); のようなことがしたい。*/
    /*つまりfoo(args[0], args[1]、args[2], args[3], ...args[numargs -1]); のようなことがしたい。*/
}

numargsとargsからva_listを作ることはできますか?
0149デフォルトの名無しさんNGNG
>>148
va_listそのものを作ることは出来ない。

ただし処理系に依存しても良い(移植を考えない)のなら、
適当にスタックに積んでから関数を呼べば実現出来る。
0150デフォルトの名無しさんNGNG
プログラマーの人って一日何行くらいプログラム書いてるんですか?
0151デフォルトの名無しさんNGNG
if (a==0)
{
  if(b==0)
  {
   .......
  }
}
これを
if (c==0)
{
  if (a==0)
  {
    if(b==0)
    {
     .......
    }
  }
}
という風に新たにc==0の条件文を外側につけた時に
プログラムを見やすくするためにa==0とb==0の条件文を右に
ずらさなければならないのですが
この例だとたった数行分をずらすだけでいいのですが
もっと入れ子になった条件分をかたっぱしから右にずらすのは
骨が折れます
一度に複数行を右に平行移動させることはできないのでしょうか?
0152デフォルトの名無しさんNGNG
エディタの使い方を勉強してくれ。
0153vimNGNG
>>
0154デフォルトの名無しさんNGNG
>>151
ずらしたい行を選択してTAB。左にずらすときはShift+TAB。
0155デフォルトの名無しさんNGNG
>>152
>>154
お返事ありがとうございます
うまいこといきました
0156デフォルトの名無しさんNGNG
if(〜){
}else{
}

みたいに最初の { を if() の右側に書いてしまうのは
エディタのことを考えると良くない書き方なんでしょうか?
0157デフォルトの名無しさんNGNG
>>156
if文はいつもそんな感じで書きますが。
0158デフォルトの名無しさんNGNG
class c
{
};

f()
{
}

if (x) {
}
else {
}

try {
} catch (a) {
} catch (...) {
}

これ以外は認めない。
0159デフォルトの名無しさんNGNG
if( x )
{
}
else
{
}


try
{
}
catch( a )
{
}
catch(...)
{
}

だな、俺は。
0160デフォルトの名無しさんNGNG
>>147
だから修正するまでと書いただろう。読めないのか?
0161デフォルトの名無しさんNGNG
ifstreamのある位置からある位置までのバイナリデータを
ofstreamへコピーしたいのですが簡単に書く方法はありますでしょうか?

// ifsの[offset, pos)をofsへコピーしたい
size_t offset, pos;
ifstream ifs;
ofstream ofs;
.....
ifs.seekg(offset);
// ofs << ifs.rdbuf(); <-ifsを最後まで読むだけならこれで良いんですが・・・

大きなデータなのでバッファをちゃんと扱わないとマズイです。よろしくお願いします。
0162161NGNG
自己解決しました。すいません。
0163デフォルトの名無しさんNGNG
>>162
どう解決したのか教えてください。
0164161NGNG
istreambuf_iterator<char> iit(ifs);
ostreambuf_iterator<char> oit(ofs);
for(size_t i = 0; i < pos - offset; ++i, ++iit, ++oit){
*oit = *iit;
}

か,もしくは

int meta;
streambuf *isb = ifs.rdbuf();
streambuf *osb = ofs.rdbuf();
meta = isb->sgetc();
osb->sputc((char)meta);
for(size_t i = 0; i < pos - offset - 1; ++i){
meta = isb->snextc();
osb->sputc((char)meta);
}

としました.問題があるとか,もっと良い方法があるとかあったら指摘お願いします.
0165デフォルトの名無しさんNGNG
>>164
俺もいろいろ考えたけど、たぶんその前者が最適解でしょうな
0166デフォルトの名無しさんNGNG
>>161
std::copy使えよ
0167デフォルトの名無しさんNGNG
>>166
どうやるの?
0168デフォルトの名無しさんNGNG
istreambuf_iterator end = iit;
advance(iit, pos - offset);
copy(iit, end, oit);

かな
0169デフォルトの名無しさんNGNG
>>168
それ動く?
0170デフォルトの名無しさんNGNG
さあ。
動かないならcopy_n関数テンプレート作ればいいし
0171デフォルトの名無しさんNGNG
>>164
iit は終了チェックしなくていいの?
0172デフォルトの名無しさんNGNG
>>168は動かない。

ISO/IEC 14882:1998
24.5.3 Template class istreambuf_iterator
-3
Note that in the input iterators, ++ operators are not equality preserving,
that is, i == j does not guarantee at all that ++i == ++j. Every time ++ is
evaluated a new value is used.

24.5.3.5 istreambuf_iterator::equal
-1
Returns: true if and only if both iterators are at endofstream, or neither is
at endofstream, regardless of what streambuf object they use.
0173デフォルトの名無しさんNGNG
バッファを使いまわして
readとwriteで繰り返して操作した方が効率がいい。
0174164NGNG
アドバイスありがとうございます.

>168
istreambuf_iteratorはInputIteratorで入力を一度しかトラバースできないので
advanceは使えないかと思います.

>170
実は作ってたんですが171さんの言うように終了判定を考えると
copy_nの利用は危なそうだなと思ってやめました.

>171
省略してました.実際やるとしたら
for(size_t i = 0; i < pos - offset && iit != istreambuf_iterator<char>(); ++i, ++iit, ++oit){
...
な感じでしょうか?

>173
試してみます.
0175デフォルトの名無しさんNGNG
プログラミングを初めて、いろいろな本を読んだのですが、どうしても分からないので聞きます。
完全な独学で勉強したのでかなりトンチンカンなことを言っているかも知れませんが、自分なりに努力をしたのでお願いします。

前にシューティングアルゴリズムマニアックスという本を買ったのですが、

http://www.amazon.co.jp/exec/obidos/ASIN/4797327316/249-0856311-3939535

この本についてくるプログラムソースは弾、自機、背景、などを違う.cppファイルに記述しています。
しかし、コンパイルすると一つのゲームとしてビルドされます。
ヘッダーファイルであればincludeの記述を行うことでインクルードされることは分かるのですが、cppファイル同士、それも種類ごとに分けて記述したcppファイルを一つにするにはどのようにすれば良いのでしょうか?
一つのファイルに記述されたプログラムを順番に分割するのであれば、分かるのですが、このようにプログラムを並べたのでは同時にプログラムが処理されてしまうのではないのでしょうか?

多分かなりとんちんかんのことを言っていると思います。
どうしても一つのプログラムをいくつものファイルに分割して記述する方法が分かりません。
0176デフォルトの名無しさんNGNG
>>175
まず、ソースファイルは必ずしも分割して書く必要はない。しかしながら、あまりにも
1つ1つのソースファイルが大きくなると、コンパイルに時間がかかるし、少し変更した
だけでも全体をコンパイルしなおさなければならなくなる。それに、大きなファイルの
内容を管理するにしても、人間の頭にも限界があるし、普通は1人ですべてのコードを
書くわけでもない。だから、ソースを分けるという考え方が出てくる。さて、当然複数の
ソースをコンパイルすると複数のオブジェクトファイルが出来るわけだが、これらは
そのまま実行されるのではなく、リンカという別のプログラムに通され、結合される。
すると、ここでやっと1つのプログラムファイルが出来上がる訳だが、複数のオブジェクト
ファイルに対して複数の同時実行が行われるわけではない。たとえば、a.objという
オブジェクトファイルにfoo()という関数があり、これをb.objの中から呼び出していると
する。複数のオブジェクトファイルがあるから当然直接呼び出せない。これを解決する
役割を担うのがリンカ。こういう複数のオブジェクトファイル間の関数等の呼び出しを
解決するのが仕事。すると、結果的にファイルは1つになる(ダイナミックリンクは除く)
でしょう?
0177デフォルトの名無しさんNGNG
というか、色々な本を読むのはいいが、
いきなりゲーム開発の本なぞ読まずに
まずC/C++の入門書をきっちり仕上げろよ。
それをやってれば>>175の質問は出てこない。

ルールもろくに覚えてないうちに定石集買って
読んでも、そら分からんだろう。
0178デフォルトの名無しさんNGNG
Ruby最強!
0179デフォルトの名無しさんNGNG
全く初歩的なことだけど…
GUI環境って何のこと?ネタじゃないよ。。
0180デフォルトの名無しさんNGNG
ぐらふぃかるゆーざーいんたーふぇいすかんきょう
0181Ruby!!!!!!!!NGNG
READ THE FUCKING ARTICLE, YOU LAZY MOTHER FUCKER.
0182デフォルトの名無しさんNGNG
>>180
で、GUI環境はどこが重要なの??
0183デフォルトの名無しさんNGNG
>>182
鼠が画面上で動き回ることが出来る。
0184デフォルトの名無しさんNGNG
>>183
無かったら、動き回れない…っていうこと?
0185175NGNG
どこか、リンカについて分かりやすく解説してあるサイトはないですか?
家にある本ではさらりとしか解説されてなくよく分からないです。
MSDNも見ましたが余計にさっぱり分かりません。
0186デフォルトの名無しさんNGNG
スレ違いですけど聞きたいんでよろしくネ。(´◕ω◕`)
>>172の
>Every time ++ is evaluated a new value is used.
この文ってTYPOですか?
おれっちの脳内じゃ
Every time ++ evaluated, a new value is used.
こちらの方が正しいような気がするんだけど。どう?
0187デフォルトの名無しさんNGNG
>>182
エロDVDが見れる。ヌケル。そして、彼女要らず。
0188デフォルトの名無しさんNGNG
javaのパスの設定が上手くいきません……
j2sdk-1_4_1-windowsi586をインストールし、パスの設定を行った後に、サンプルアプリを動かそうとしたのですが、ダメでした……
「%SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\Program Files\ATI Technologies\ATI Control Panel;C:\Program Files\pcdNavi\bin;C:\Program Files\Fujitsu\sa\dll;;C:\Program Files\Sonic\MyDVD」
がパスの変数値の最初の設定でした。
この末尾に「C:\j2sdk1.4.0_01\bin」と付け足したのですが、サンプルは動かないんです……
0189188NGNG
誤爆です……
0190デフォルトの名無しさんNGNG
>>186
evaluateするのは誰?
0191186NGNG
>>190
もち、++です。
0192186NGNG
>>191
あ゛。まちがった。
streambufの使用者。かな?
0193デフォルトの名無しさんNGNG
>>175
リンカについては知らんけど、>>177が言うように、C/C++の入門書で、基本をきっちりしたほうがいいよ。
俺も完全独学で、最初いきなりDirectXから入って、参考書のサンプルいじくって一応は動いてたど、
やっぱ不安なので猫さんのとこで基本勉強したら解るようになった。

いや、俺も昔分割コンパイルに疑問持ってたから、人事に思えなくてw
0194デフォルトの名無しさんNGNG
>>186
Every time ++ is evaluated, a new value is used.
のコンマが省略されたんだと思われ。
0195186NGNG
>>194
うん。その方が自然ですね。
分詞構文にもっていって副詞句として扱うのは無理がありましたね。
どうもありがとうございました。
0196デフォルトの名無しさんNGNG
void文を書いたのですが、「型の前に";"がありません」とエラーが出てしまいます、

//行列の表示
#include <stdio.h>
void show(int s[][3],int row);
void main(){
int a[][3]={10,20,30,40,50,60};
int i,j,row;
show(a,2);
void show(int s[][3],int row);
for(i=0;i<row;i++){
printf("| ");
for(j=0;j<3;j++){
printf("%d ",a[i][j]);}
printf("|\n");}}

色々試したのですができませんでした、原因をお教えいただけませんか。
0197デフォルトの名無しさんNGNG
>>196
void文って何?
一見めちゃくちゃなコードに見えるけどvoid文が何なのかわからないのでうかつにつっ込めない・・・。
0198デフォルトの名無しさんNGNG
int文とかprintf文とか
0199196NGNG
voidは値をreturnで返さない関数の文?
とかって聞いたのですが。

・・・滅茶苦茶なのかorz
0200デフォルトの名無しさんNGNG
>>196
もうむちゃくちゃすぎ。
想像で補って書いてみたが、
こういうことをしたかったのか?

#include <stdio.h>

void show(int s[][3],int row)
{
 for(int i=0; i<row; i++)
 {
  printf("| ");
  for(int j=0; j<3; j++)
   printf("%d ", s[i][j]);
  printf("|\n");
 }
}

int main(void)
{
 int a[][3] = {10,20,30,40,50,60};
 show(a, 2);

 return 0;
}
0201デフォルトの名無しさんNGNG
動かすだけなら↓でいいが。
関数をラベルのように定義するその書き方は何かのコンパイラの拡張?
#include <stdio.h>
void show(int s[][3],int row);
void main()
{
int a[][3]={10,20,30,40,50,60};
show(a,2);
}
void show(int s[][3],int row)
{
int i,j;
for(i=0;i<row;i++)
{
printf("| ");
for(j=0;j<3;j++)
{
printf("%d ",s[i][j]);
}
printf("|\n");
}
}

void文って、
void()
のこと?
0202デフォルトの名無しさんNGNG
>>196
ヒント:以下はごく自然なCのコード。

$include <stdio.h>

void show_string (const char *str);

int main (int argc, char *argv[]) {
  show_string("hello.");
  return 0;
}

void show_string (const char *str) {
  puts(str);
}
0203デフォルトの名無しさんNGNG
>>196
そういうエラーって{}がちゃんとなってなかったりしても出る
ガンガレ!
0204デフォルトの名無しさんNGNG
>>203
どうみても>>196はそれ以前の問題だろ
0205デフォルトの名無しさんNGNG
そういや,Metaware の High-C っていうコンパイラは
関数内関数を使えてたね。
# あと,よくわかんない反復子の仕組みもあったし。
# 今で言う「イテレータ」とはなんかちょっと違う概念だった気もするけど。
0206デフォルトの名無しさんNGNG
>>202
> $include <stdio.h>

(´ι_`)

あげあしでスマソ。
マジでこれで悩む初心者とかいたらいけないので念のため指摘。
0207デフォルトの名無しさんNGNG
>>205
関数内関数ってPASCALみたいな感じ?
0208デフォルトの名無しさんNGNG
>199
「文」という言葉の使い方が変。
式と文と関数はそれぞれ別の概念だ。
「戻り値 void の関数を書いたのですが」あたりじゃないかと思われ。
で、関数の定義の仕方が滅茶苦茶。
・関数の中で関数の定義はできない(独自拡張で可能な処理系もあるが)。
・2回目の void show(int s[][3],int row); ←のセミコロンは何よ?
0209デフォルトの名無しさんNGNG
>>206
自分でやっといてワラタ
っていうかもう寝ようw

>>207
うん。細かい仕様は忘れたけど,便利だった。
High-C は C コンパイラのくせに,C++ みたいに変数をどこででも
宣言できたりしてた。
0210196NGNG
voidの使い方自体が間違ってた?と言う事でしょうか。
ありがとうございます、もう一度一からやってみます。
0211デフォルトの名無しさんNGNG
voidの使い方は合ってるが・・・。
ほかのところが間違いまくってる。
0212デフォルトの名無しさんNGNG
>>210
引数なんかC99風の最新規格を使っときながら
なんでそんなに滅茶苦茶で異常なコードを書いてしまうのかわからん。
0213デフォルトの名無しさんNGNG
プログラムとか全然知らないんだけど
EXEの設定を弄くることは出来ますか?
例えばあるEXEが起動するとき「開始します」とかの表示を「開始するぞゴルァ」
みたいなのは出来るんですか?
またEXEを弄くるソフトは何ですか?
0214デフォルトの名無しさんNGNG
Windowsのマウスカーソルってどのプログラム(モジュール?)が制御してるんでしょうか?
0215デフォルトの名無しさんNGNG
とりあえず普通に丁寧に書いたら>>200みたいになる。
0216デフォルトの名無しさんNGNG
>>213
板違い。
そういうソフトを作りたいのならこの板でかまわんけど。
0217デフォルトの名無しさんNGNG
>>213
文字列がリソースとして定義されているならResource Hackerかな。
でなけりゃ資料を見ながらバイナリエディタで書き換えるかOllyDBGとかのデバッガつかうか。
しかし素人にはオススメできない。
0218デフォルトの名無しさんNGNG
Resource Hackerとバイナリエディタを検索してみて色々やってみたいと思います
ありがとうございました
0219196NGNG
>200
実行してみたら、やりたい通りになってました、ありがとうございます
>201
voidを使って行列を書いてみる、というのが課題でして・・・
voidの使い方とか、webで調べたんですが、何か勘違いしたヨウで・・・
>202
charというのはまだちょっと分らないので、あとで調べてみます
>208
セミコロンは間違えて付けてしまったものです、すいません
0220デフォルトの名無しさんNGNG
new delete について質問です。

new で確保したメモリ領域は、delete で開放しろと、
いろいろな解説ページで見たのですが、
開放しないままプログラムが終了すると、どうなるのでしょうか?

簡単なプログラムを作って試してみたところ、
プログラムが終了した時点で、メモリは開放されているようなのですが、
プログラム終了時にわざわざ delete でメモリを開放する処理を入れる必要はあるのでしょうか?
0221デフォルトの名無しさんNGNG
>>220
開放しないと、メモリリークが起こる。
そうなるとフリーズしたり、いろいろ障害がでる、と聞いてる。

newだけがメモリを確保するのではなく、グローバル変数などもメモリを確保している。
プログラムが終了したときに開放されたのは、そういった変数だと思う。
って、俺もちょっと曖昧なので他の人、修正・補足お願い。
0222デフォルトの名無しさんNGNG
>220
「malloc()して(プログラム終了時に)free()しない」、なら、百歩譲って許せなくもないが、
deleteはメモリの開放だけでなく、デストラクタの実行も担っているから、
絶対に省略はあり得ない。
0223デフォルトの名無しさんNGNG
まあ (常識的な OS なら) メモリくらいはプログラム終了時に
自動で解放してくれるけどね。

でもいちいち
「このオブジェクトは delete しなきゃいけない。
 このオブジェクトはただのメモリの塊だから delete しない。
 こっちのは……どうだっけ?」
とか考えるの('A`)マンドクセ
0224233NGNG
おっと、誤解されそうな予感。
要するに、delete が必要か不要かを考えたり
あまつさえ省略しようと企んだりするのは
激しく徒な遠回りだよって事。
0225223=224NGNG
あーもう。漏れ>233じゃねーし。
つーか盛れが抱えてる問題が解決しねーし。イラつく。もう寝ようっと。
0226デフォルトの名無しさんNGNG
>>220
デストラクタの実行を無視すれば、
小規模なプログラムなら終了時にまとめてメモリ解放
でもなんとかなると思うが、ある程度の規模になると
いらないデータがメモリを占有しつづけるのは非効率的
になってくる。

GCが信頼できる環境でないかぎりは解放するのが無難。
普通のプログラマなら「開けたら閉める」
ってのは普通の感性じゃないかなぁ。
0227デフォルトの名無しさんNGNG
>>219
>voidを使って行列を書いてみる、というのが課題

行列(を格納した配列)をvoidポインタで渡すようにして
ルーチンを汎用化するって意味ではないかと思った。
だとすると >>196 はまったく的外れ。
行列の幅を固定しちゃってるし。

おそらく課題はC言語で書くことだと思うけど、
念のため補足しておくとCとC++では作法が結構違う。
C++ならそれの実現のためにvoidポインタを使うべきではない。
0228220NGNG
>>221 222 223 226
なるほど、やはりDeleteした方が、
無難…、というかDeleteするのが常識かもしれませんね。
ご返答ありがとうございました。
0229デフォルトの名無しさんNGNG
ったくど素人が何いってんだか...

終了時のdeleteなんか時間のムダ

もし省略するとシステムにダメージを与えるような
処理をデストラクタ内で行なっているならば、それは設計ミス

そういうたぐいの後始末は専用の関数かなんかにして
シグナルハンドラで呼び出すのが正しい

だから必要なdeleteなどなく、何も考えずに終われって事だ

0230デフォルトの名無しさんNGNG
フレーム論争やりたいならnewsにでも逝け
0231デフォルトの名無しさんNGNG
floatの定数を、バイナリーデータとしてそのままint型に代入したいのですが、どうしたらよいでしょうか。

float a = 1.23456f;
int b;
b = *((int*)&a);

みたいなことを、変数aを使わずに b = ... のように行いたいのです。
int は float とデータサイズは同じと考えていただいて結構です。
0232デフォルトの名無しさんNGNG
*(float*)&b=1.23456f
0233186NGNG
>>231
union {
float f;
int n;
}fton;
0234186NGNG
やべっ。
186そのままだった。はずかしいーーー。
0235231NGNG
>>232-233
ありがとうございます。

すみませんが、もう一つ質問がありまして、

struct {
int type;
union {
int idata;
float fdata;
} data;
} tdata;

tdata sample_data[] = {
{ 1, 20 },
{ 2, 3.456f },
{ 1, 123 },
:
};

のように初期化したいのです。
メンバ"type"は、メンバ"data" の型を表し( 1ならint、2ならfloat など)、
メンバ"data"には int あるいは float の値が入ります。

union を使用すると、初期化時には最初の型(この場合、idataの型=int)で初期化せねばならないようで、
上のリストのように初期化することができず、また、>>232 のような方法でも書くことができません。

どうしたらよいのでしょうか。
0236デフォルトの名無しさんNGNG
全部整数として書け
値は int i; *(float*)&i=,3.456f; printf("%d",i) ってやって調べろ
0237デフォルトの名無しさんNGNG
文字列の分割をしたいのですが、strtokの挙動が今ひとつよく分かりません。

#include <stdio.h>
#include <string.h>
int main(){
    char str[]="信長<><>2004/10/18 12:42:45<><>はじめまして<><>カッコイイHPですね。\nこれからちょくちょく遊びに来ますんで。\nよろしく。";
    char sp[]="<><>";
    char *r=NULL;
    r=strtok(str,sp);
    while(r != NULL){
        printf(">>%s\n",r);
        r=strtok(NULL,sp);
    }
    return 0;
}

char sp[]="<><>"の部分を
char sp[]="<>"にしても、char sp[]="k<>"にしても、同じ結果になります。
どうしてでしょうか?
0238デフォルトの名無しさんNGNG
excel形式でファイルを出力したいんですがどうしたらよいでしょうか
0239235NGNG
>>236
やはりそうするしかないですかねー。そういうマクロでもあれば良いんですけど…。

あるいは、逆に全部 float で書いて、使うときに int にキャストとか。
(辻褄はあうけど、明らかに曲がったやり方だと思う)

printfするにはデータ量が膨大なので、とりあえず、前処理するツールを作って
それを通して吐き出させようかと思います。
(といっても、ホントに *.*f を 0x???????? に書き換えるだけなので、
そのために一段階増えるなんてもったいない気がしてなりませんが)

なにか他に方法があれば教えてください。

0240デフォルトの名無しさんNGNG
>>237
char sp[]="<><>\n";
こーゆーこと?
0241デフォルトの名無しさんNGNG
>>237
manなりhelpなりでstrtokをちゃんと調べれー
第二引数は「デリミタ文字群」だ
0242デフォルトの名無しさんNGNG
>>239
リダレクト使えば
0243デフォルトの名無しさんNGNG
char str[]の文字列の中にkが無いから
0244デフォルトの名無しさんNGNG
プログラムの量が多くなってくるとデバッグが大変だね
バグを単離して同定することすら難しくなってきた
デバッグするときのこつを教えてください

再現性のあるバグなら予想はつくんだけど
なかなか再現性が見いだせないバグはやっかいだね…
0245デフォルトの名無しさんNGNG
VC++5.0 WindowsNTWS4.0でWin32 dllのプログラムを
作成していますが、その内部で、

printf("%I64d\n", i64);

が表示できず、そのままI64dと表示されます。
i64は「__int64」で定義しています。
これを64bit値で正しく表示するにはどうすればいいですか?

あと、演算結果を__int64の型の変数に入れたにもかかわらず、
2の31乗を越えた値がマイナスになります。これはどうしてですか?
0246デフォルトの名無しさんNGNG
std::auto_ptr<int> p(new int);
std::auto_ptr<int> p2(p);
std::auto_ptr<int> p3(new int);
std::auto_ptr<int> p4(p3.release());

VC6付属のSTLではp2, p4に所有権が移動するだけでポインタ値は残るのですが
STLPortではp, p3のポインタ値が空になります。
どちらの振る舞いが正しいのでしょうか…
0247デフォルトの名無しさんNGNG
>>245
>あと、演算結果を__int64の型の変数に入れたにもかかわらず、
>2の31乗を越えた値がマイナスになります。これはどうしてですか?

intで計算してるんだろ。__int64に格上げしてやれ。
0248デフォルトの名無しさんNGNG
>>246
auto_ptrの仕様でもよみな。
ちなみVC6のC++の挙動を正しいと思わんことだ。
0249246NGNG
どうやらVCの方の振る舞いは古い仕様のようです。
ttp://www.hey-to.net/ML-archive/vcppML/2000/msg07069.html
0250デフォルトの名無しさんNGNG
仕様に規定されてる?
0251245NGNG
>>247
明確に(__int64)でキャストは行っているのですが・・・。

おそらく__int64で定義されているにもかかわらず、32bit
という扱いにされていると思うのですが・・・。
0252デフォルトの名無しさんNGNG
環境疑う前にソース晒せ
I64の所も含めて、小細工せずにコピペで
0253デフォルトの名無しさんNGNG
Visual C++ .Netで開発しています。
可変引数を持つ関数hoge(char * szBuf, ...)があります。
hoge内からさらに可変引数を持つサブルーチンhogehoge(int iCnt, ...)をコールします。
hogeに渡された可変引数すべてをそのままhogehogeに渡すにはどのように記述すれば
よいのでしょうか?
ちなみにhoge内では可変引数の個数や型などはわかりません。hogehoge内で判明します。

hoge内でva_list型としてva_arg()で値を取得すればいいかと思い以下のように記述
してみましたが、可変引数の個数が複数になると2個目以上が取得できませんでした。

hoge(char * szBuf, ...)
{
va_listargs, args2;
va_start( args, szBuf );
args2 = (va_list)va_arg( args, va_list );
//中略
hogehoge( iCnt, args2 );
va_end();
}
0254デフォルトの名無しさんNGNG
>>253
hogehoge(int iCnt, va_list); を作る
しか思いつかないなぁ。
つかhogeで可変引数の詳細がわからないと
hogehogeにどれだけ引数を積めばいいかわからないと思うんだけど。
0255デフォルトの名無しさんNGNG
>>239
union初期化でintが必要でfloatは使えないと言うなら、
別にfloatの配列を置いてそこから引っぺがしたら?
こんな感じかな?
static const float sF[] = {3.456f, 3.2f};
struct {
int t;
union {
int i;
float f;
} u;
} sS[] = {
{1, 20},
{2, *(int *) & sF[0]},
{1, 123},
};
0256245NGNG
>>252
こんな感じになります。

CUR_SP = (__int64)hlen + rlen * (RecNo - 1);
#ifdef DBG
wsprintf(DBG_BUF, "(%I64d)\n", CUR_SP);
DbaDebugWrite(DBG_BUF);
#endif

CUR_SP自体が2の31乗を越えた場合には、
CUR_SPを31bit右シフトした結果を表示させたら
-1になりました。
0257デフォルトの名無しさんNGNG
>>256
rlenとRecNoがintというオチだと予想
0258デフォルトの名無しさんNGNG
wsprintfはI64対応してんのか?
0259237NGNG
ありがとうございます。

>>240
えっと、すいません、よく分かりません。

>>241
tp://www.linux.or.jp/JM/html/LDP_man-pages/man3/strtok.3.html
tp://www.shibu.jp/cppreference/stdstring_details.html#strtok
を参考にしてみたのですが、"デリミタ"というのがよく分かりません。

>>243
kがないのになぜ分割されるのでしょうか?
0260デフォルトの名無しさんNGNG
>>259
辞書引け: delimiter

第二引数で指定した「文字列」で分割するのではなく、
第二引数で指定した「文字のいずれか」で分割する。
つまり char sp[]="k<>" なら 'k' か '<' か '>' で分割。
0261デフォルトの名無しさんNGNG
とりあえず
char * section = new char[strlen(str)];
unsigned position;
sscanf(str, "%[^<>]%n", section, & position);
とでもしとけ。
0262デフォルトの名無しさんNGNG
>>237
('A`)マンドクセ
boostのsplitでも使っとけよ。
0263デフォルトの名無しさんNGNG
>>262
はなし飛びすぎYO!!
0264デフォルトの名無しさんNGNG
条件分岐の入れ子が多すぎて流れが理解できないようになってきました
こんな場合はどうすればわかりやすくなるんでしょうか?
0265デフォルトの名無しさんNGNG
Ruby!!!!!!!
0266デフォルトの名無しさんNGNG
>>264
そのコードを捨てる。
↓
2ch に問題をうpする。
↓
暇人が美しいコードに変換してくれる
↓
ウマー!
0267デフォルトの名無しさんNGNG
>>264
swich文を使う
0268デフォルトの名無しさんNGNG
>>264
状態遷移テーブルを作る。
0269デフォルトの名無しさんNGNG
>>266
それはちょっとできないですw
>>267
いままでifとforしか使ったことなかったので
swich文も使ってみます
>>268
難し用語ですね
検索してみましたけどなかなかわかりやすく解説してくれてるところがないみたいです

アドバイスありがとうございました
0270デフォルトの名無しさんNGNG
>>269
条件を洗い出すと、単純な表に書ける場合がある。
その場合はその表を配列として実装すれば複雑な条件を緩和できるかもしれない。
0271デフォルトの名無しさんNGNG
bit を反転させる関数って標準でないですか?
0272デフォルトの名無しさんNGNG
>>271
演算子じゃダメなの?
0273デフォルトの名無しさんNGNG
ちぇきちゃとこへ10時の爆撃行ったーーーーーーーーーーー!!ksk
0274デフォルトの名無しさんNGNG
>>272
左右反転なんですが
0275デフォルトの名無しさんNGNG
>>258
正解。wsprintfはI64非対応。245はsprintf(か_stprintf)にしろ。
0276デフォルトの名無しさんNGNG
>>271
はよそういえや。で、標準関数にはそんなもんない。
0277デフォルトの名無しさんNGNG
>>274
久々にカルノーマップかいてたら吐き気がしてきた。
スパッとできるトリッキーなコードとかありそうなんだけどなぁ
0278デフォルトの名無しさんNGNG
>>277
そんなの、表引きでええやん。
0279デフォルトの名無しさんNGNG
>>278
1バイトとは限らないぞ32ビットだったりした日には…
0280デフォルトの名無しさんNGNG
>>279
4回に分ければいいだろ。
0281279NGNG
>>280
そりゃそうだ。スマソ
0282デフォルトの名無しさんNGNG
テンポラリを使わずswapするコードってどうやんだっけ?
xor使ったと思ったんだけど。
0283デフォルトの名無しさんNGNG
>>282
swap( int *a, int *b )
{
*a ^= *b;
*b ^= *a;
*a ^= *b;
}
0284デフォルトの名無しさんNGNG
要素数0の配列をnewしたときの振る舞いについて教えてください。
例えばこんな感じ

int* p = new int[0];

VC6SP6ではNULL以外の値が返ってきましたが
本当に正しいのかどうか…
0285デフォルトの名無しさんNGNG
>>284
A zero-sized array is legal only when the array is the last field in a struct or union
0286デフォルトの名無しさんNGNG
>>284
5.3.4 - New
-7- When the value of the expression in a direct-new-declarator is zero,
the allocation function is called to allocate an array with no elements.
The pointer returned by the new-expression is non-null.
[Note: If the library allocation function is called, the pointer returned is distinct from the pointer to any other object. ]
0287237NGNG
ありがとうございます。

>>260
それでやっとstrtokの結果が理解できました。
その中のどれかの文字と一致するということは、
Perlでの正規表現だと、

   [k<>]

みたいな感じですよね。
Perlでいうsplitのような処理をするにはどうプログラムを組んだらいいのでしょうか?
splitのような処理をしようとして検索していたらstrtokにたどり着いたのですが。

>>261
strtokの処理の代わりにそれを入れてみましたが、何も表示されませんでした。

>>262
boostを検索してみたのですが何かダウンロードしなきゃいけないみたいですね。
boostのをダウンロードしてやるのが一般的なんでしょうか。
0288デフォルトの名無しさんNGNG
boost使いたくないんなら、strstr()とか使って自前でやったら?
0289284NGNG
>>285
それは
struct A
{
char hoge;
int hage[0];
};
とかそんな状況の事じゃないでしょうか?

>>286
「library allocation function」が何を指しているのかわかりませんが大丈夫そうですね。
ありがとうございました。
0290デフォルトの名無しさんNGNG
>>284
More Exceptional C++ Item 29に載ってるぞ。
0291デフォルトの名無しさんNGNG
More Exceptional C++ っていつになったら訳本が出るんだろうね
0292262NGNG
>>287
どちらかというとジョークっぽいニュアンスの発言ですた。
boostを使うのはちょっと大げさすぎる。
やっつけ仕事としてならsplitを使うのもアリだと思うけど、
普通は >>288 の言うように strstr でループさせる。
0293284NGNG
>>290
それ持ってません…3500円もするんですね…
0294デフォルトの名無しさんNGNG
本代なんかケチんなよ
自分への投資を惜しむな
0295デフォルトの名無しさんNGNG
\3,500でビビってたら技術書、専門書は買えない
0296デフォルトの名無しさんNGNG
ネットで見つからなくて本でのみ見つかる情報で元が取れるとは思わない。
0297デフォルトの名無しさんNGNG
なら買うな、それで終了
0298( _ 。。) _ バタ。 ◆eJlUd9keO2 NGNG
C(cc) + OCI8を利用してストアドプロシージャを呼び出す上で
OCIBindByNameを利用して
OUT引数から文字列の結果を受け取ろうとしているのですが
SP側でそのOUTの変数がNULLの状態になっていると
OCIExecuteに失敗してしまいます。
(もちろん、何かしらの値を代入すれば正しい結果を取得できています)

それと確認を取っていないのですが
オールスペースの文字列がORACLEではNULL扱いになるとかならないとか
(これはココじゃなくて ORACLEかDB関係のスレを探すべきかな)

C言語からのOCI関係の参考書・参考ページを1週間程探してみたのですが
ヴァージョンが低かったり、本家PDFのコピペだったりと目的の情報にあたりません。
上記、どなたかお力添え願います。
0299デフォルトの名無しさんNGNG
#defineの値をコンパイル時に与えることはできますか?
0300デフォルトの名無しさんNGNG
>>299 はい、できますよ。
0301デフォルトの名無しさんNGNG
なんでそういう回答しかしないの?
それで>>299が分かる人だったら
こんな質問しないでしょ?
もうちょっと考えろよ
0302デフォルトの名無しさんNGNG
なんでそういう回答しかしないの?
それで>>877が分かる人だったら
こんな質問しないでしょ?
もうちょっと考えろよ
0303デフォルトの名無しさんNGNG
>>299
大抵のコンパイラはDオプションで指定できる。
0304デフォルトの名無しさんNGNG
なんでそういう質問しかしないの?
それで>>300が分かる人だったら
こんな回答しないでしょ?
もうちょっと考えろよ
0305デフォルトの名無しさんNGNG
つか、妙な回答だと思えば自分が答えればいいだけなんだが。
0306デフォルトの名無しさんNGNG
質問です。

クラス CSuper を親クラスに持つ2つのクラス CChildA, CChildB があったとして、
イメージとしては、以下

CSuper* array[2];
array[0] = new(CChildA);
array[1] = new(CChildB);

のように、同じ基本クラスを持つ複数の型の要素を持つ配列を作成したいのですが、
もちろんこれでは、CChildA のメソッド m を
array[0]->m のように呼び出すことはできませんし、
環境によるとコンパイルエラーになるかもしれません。

このような構造を実現できる方法はないでしょうか?
0307デフォルトの名無しさんNGNG
それがAとBで共通のメソッドなら、CSuperでインターフェースを定義しとく。
AだけでBには持たせたくないのなら、諦めてdynamic_cast。

でなきゃboostにそんな構造があったような。
0308237NGNG
ありがとうございます。

>>288,>>292
それをヒントに頑張ってみます。
0309デフォルトの名無しさんNGNG
operator = で入れちゃえば?
0310デフォルトの名無しさんNGNG
>>307
ありがとうございます。
boost って言葉が初耳でしたので調べてみます。
もし無理なら諦めてキャスト……。
0311235NGNG
>>255
それだと、floatデータ一つにつきsizeof(int*)バイト分のデータが増えることになってしまいますよねー。

理想としては、一つの配列を、先頭からバイナリーで別ファイルにしたいので、
配列内にポインタが含まれたり、別の配列が必要になったりすることは避けたいのです。

結局 >>239 の方法でやってますが、やっぱり面倒…。
0312デフォルトの名無しさんNGNG
テキストファイルの任意の行を編集したいのですが
サンプルってありませんでしょうか。
0313デフォルトの名無しさんNGNG
>>312
何がしたいのか具体的に書かないと誰もまともに応えられないよ。
編集処理のプログラムのサンプルなら、探せばあると思う。
0314デフォルトの名無しさんNGNG
fgets関数を使った後にstdinをクリアしなさいといわれ、
fflush関数を使ったのですが、fflus関数はダメと言われました。

他にstdinをクリアする方法を教えてください。
0315デフォルトの名無しさんNGNG
何も考えずに言われた通りにするな!
断れ!
0316デフォルトの名無しさんNGNG
>>314
読めなくなるまで空読み。
0317デフォルトの名無しさんNGNG
いわゆる 空気読め! って奴ですね
0318デフォルトの名無しさんNGNG
    _、_
  ヽ( ,_ノ`)ノ 残念 おいなりさんだ
 へノ   /
  ω ノ
     >
0319245NGNG
>>257-258
>>275
ありがとうございます。確かにsprintfに変更したら成功しました。
あと、64bit型の変数に入れる場合の演算は、変数ごとにキャストを
かけないとダメってことですかね?
通常のようにあとからまとめてキャストというのは失敗するようで。
0320デフォルトの名無しさんNGNG
>>319
コード書け。
言ってる意味がわからん
0321デフォルトの名無しさんNGNG
>>319
>CUR_SP = (__int64)hlen + rlen * (RecNo - 1);
RecNo, rlen, hlenがintだとすると
演算の優先順位の関係で rlen * (RecNo - 1) はint同士の減算・乗算が行われ
hlen との加算で初めて__int64に格上げされる。
全部__int64で計算したければ
CUR_SP = hlen + rlen * ((__int64)RecNo - 1);
とする。
0322デフォルトの名無しさんNGNG
C++についてちょっと質問です。

 class A   //継承元
 {
   (略)
 };
 class B:A  //継承先
 {
   (略)
 };
という関係のクラスがあるとします。
また、これとは別に
 void Function(A *a);
といったような、Aクラスを引数にする関数があります。

このとき、Aから派生したBクラスのオブジェクトを
Function関数に渡す方法はありませんでしょうか?
#チラっと見た限りでは、Javaではできるっぽい

とりあえず、ちょっぴぃ脳みそで考えてみたところ、
 ・Bクラスの中にAを含める(継承ではなく)
 ・Function関数をAクラスのメンバ関数にする
くらいかなぁ?と。
諸先輩方、何かアドバイス等あればお願いします。
0323デフォルトの名無しさんNGNG
class B: public A
{
};
0324デフォルトの名無しさんNGNG
>このとき、Aから派生したBクラスのオブジェクトを
>Function関数に渡す方法はありませんでしょうか?
これが普通に出来なきゃ大惨事だろうが
0325デフォルトの名無しさんNGNG
質問なのですが
d3dxof.lib
というリンクライブラリは何処でダウンロードできますか?
d3dxof.libを検索にかけて探してみたのですが
見つかりませんでした。
0326デフォルトの名無しさんNGNG
d3dって事はDirectXじゃないの?
DirectX SDKではないか
0327325NGNG
DirectX SDK ですね。
ありがとうございました。
さっそくダウンロードしてみます。
0328デフォルトの名無しさんNGNG
>>327
自分で何を作ってるのか把握できてるのか…?
0329デフォルトの名無しさんNGNG
沢山データクラスを作って
管理クラスでそれらをvectorで管理しようと思ってるんですが
管理の仕方ってポインタをvecterで管理するのと
実態で管理するのとどっちがカッコいいの?

あと、メンバ変数でクラスを持ちたいときも
ポインタで持ってるのと
実態で持っているのどっちがカッコいいの?

C++な人おせーて

0330デフォルトの名無しさんNGNG
上段については、データクラス←→管理クラスが継承の関係なら、
ポインタでやるしかないんでは?
貴方の「カッコいい」の基準が分からないのでなんとも。
ポインタだとdeleteとかの手間があれこれあるから、
auto_ptr、スマートポインタ使うとか。
0331デフォルトの名無しさんNGNG
>>330
管理クラスって言い方が悪かった(´Д`;)

データクラスをvecterで持つ場合、ポインタがいいのか実態がいいのか?
って事です

どっちがカッコイイ?←C++で一般的にはどっち?
0332デフォルトの名無しさんNGNG
インスタンスの作成、コピーにかかるコストがでかいなら別だが、
vector内のポインタにnewして追加時もnewして要素取り除く時はdeleteして…
って手間を考えればインスタンスを突っ込んどく。
0333デフォルトの名無しさんNGNG
>>332
作成時に new は仕方ないけど、
vector が消えたときに自動的に delete してくれるような方法ってないの?
0334デフォルトの名無しさんNGNG
>>330
0335デフォルトの名無しさんNGNG
auto_ptrは使えないぞ
0336デフォルトの名無しさんNGNG
適当なスマートポインタ使え
0337デフォルトの名無しさんNGNG
↓boost::shared_ptrは遅いという話
0338デフォルトの名無しさんNGNG
素直に実体持たせとけ。
0339322NGNG
>>323
簡潔かつ的確なアドバイスありがとうございます。

>>324
ごもっともです。


…今まで、継承するときに何で識別子つけるのか良く分かってなかったです。
0340デフォルトの名無しさんNGNG
メンバでクラスを持っておきたいときも実体のほうがいい?
それともコンストラクタでnewしてポインタ持つほうがいいかね?

どっちがカッコいい?C++な人おせーて
0341デフォルトの名無しさんNGNG
同じ事だ、目的・状況で使い分けろ。
0342デフォルトの名無しさんNGNG
>>341
使い分けはどのように?

ってかどのように使い分けてます?
0343デフォルトの名無しさんNGNG
普段は要らないが必要になった時にだけnewしたいとかか。
デメリット思い付かないなら全部実体で持ってろ。
0344デフォルトの名無しさんNGNG
漏れはJavaな人が使ったクラスを使うときと必要ないときに実体持ちたくないクラスを使うときくらいだな。
0345デフォルトの名無しさんNGNG
あと、ポインタなら前方宣言するだけで使えるからヘッダの依存性を軽減するのにも使える。
0346デフォルトの名無しさんNGNG
eVC++3.0での開発で質問があります。
テキストファイルを更新する関数を作りたいと思います。
この関数は、3行目という数値と、更新文字列を引数としてを与えると、
オープンしたテキストファイルの3行目を更新文字列で置換え=更新する
という仕組みです。

この時、fopen(),fgets(),fputs()を使用して上記の処理を行うとして、
3行目を更新するという時には、"r+"モードでファイルをオープンし、
3行目までfgetsで読み込んでから、fputs()でおもむろに更新するという
手法でよろしいのでしょうか?

任意の行を更新するという手法がいまひとつ理解できません。
よろしければ教えていただきたいのです。すみません。
0347デフォルトの名無しさんNGNG
Turbo C++4でDOSプログラムを組んでいるんですが
ビットマップのロードの仕方がわかりません
何か良い方法は無いでしょうか?
0348デフォルトの名無しさんNGNG
ポインタなら共有できる。実体だと複製になっちゃう。
0349デフォルトの名無しさんNGNG
>>346
置き換え後もサイズが変わらないのならそれでいいと思うけど。
0350デフォルトの名無しさんNGNG
>>347 どこにロードする方法がしりたいのですか?
0351347NGNG
>>350
メモリ上にです。
0352デフォルトの名無しさんNGNG
>>351
ファイル開く→ファイルサイズ分のメモリ確保→ファイルサイズ分読み込む→ファイル閉じる
0353デフォルトの名無しさんNGNG
メモリといってもいろいろあるけど
0354デフォルトの名無しさんNGNG
BMPといってもいろんな種類があるよな
0355デフォルトの名無しさんNGNG
ロードといってもいろいろあるし
0356デフォルトの名無しさんNGNG
コーディングだっていろいろあるよね
0357デフォルトの名無しさん NGNG
ttp://www.stat.phys.kyushu-u.ac.jp/~ryokawa/cbegin2_3/html4/cbegin_c1_s4.html#s_calculate
の一番したのをやっているのですが、ビルドするとファイルを開けませんと出てしまいます。
どうすればいいのでしょうか?
ソフトはVisual C++.net2003です。
初歩的ですみませんorz
0358デフォルトの名無しさんNGNG
>>357
>#include <iostream.h>
#include <iostream>に変更
0359デフォルトの名無しさんNGNG
ついか
using namespace std;
をmain関数の中に入れるかグローバル空間に記入しといて。
0360デフォルトの名無しさんNGNG
>>349
大嘘を書くな、大嘘を。
0361デフォルトの名無しさんNGNG
>>360
根拠は?
0362デフォルトの名無しさんNGNG
32Bitコンパイラで「int 10h」
のシステムコールを使うとバグるんですが
32bitコンパイラでDOSのビデオモードの
変更とかどうやってやるんですか?
教えてください、お願いします。
0363デフォルトの名無しさんNGNG
>>361
>346をよく読め。3行目までを読み込んでから3行目を書けるわけが無いだろう。
0364デフォルトの名無しさんNGNG
クラスのオブジェクトを配列で宣言したとき、
構造体のような初期設定リストによる初期化は出来ないと聞きました。
このような場合、どのように初期化するのがスマートでしょうか。

クラスとは別に代入用テーブルを作って、for文なり何なりで1個ずつ代入?
0365デフォルトの名無しさんNGNG
確かにできません。こんな方法はどうでしょう?
【std::vector<>を使って1つずつ追加していく。】
std::vector<foo> bar;
for(int i = 0; i < N; ++i) bar.push_back(foo(hoge(i)));
とか。
0366デフォルトの名無しさんNGNG
#define INT 10

main()
{
printf("INT");
}

結果は10でなくINTになってしまいます。

このように、""で囲まれたマクロを展開する方法を教えてください。
0367デフォルトの名無しさんNGNG
>>366
""で囲まれた部分は文字列リテラルなのでマクロ展開の対象になりません。
0368364NGNG
実はC++の標準ライブラリってよくわかってなかったり(こそこそ)

* * * 「猫でもわかる」を読んでいます。しばらくお待ちください * * *

なるほど。
引数に対応した番号の、foo型のオブジェクトを返す(正確にはキャストですが)
関数hogeをどこかで用意しておいて、
それをvectorで順番に格納していくってことでしょうか。

どちらにせよ、別に用意しておいて代入するのが初心者には一番分かりやすそうです。
ありがとうございました。

#のちのちのことを考えると、ソースに直接書かないで
#外部テキストファイルでも読み込もうかしら…?
0369364NGNG
>>366
sprintfとかで地道に展開してはいかがでしょうか。

最初から文字列って分かってるなら
#define HOGE "foo"
でも良さそうですが。
0370デフォルトの名無しさんNGNG
>>366
""で囲まれたマクロを展開する方法は無いです。
ですが、マクロ展開の結果を""で囲むことはできます。
0371デフォルトの名無しさんNGNG
>>367
不可能ということですね。
わかりました。
ありがとうございました。
0372デフォルトの名無しさんNGNG
>>366
#define STR2(x)    #x
#define STR(x)    STR2(x)
#define INT    10

main()
{
    printf(STR(INT));
}

一応、これで代用できるけどスマートじゃない気がする。
0373デフォルトの名無しさんNGNG
>>369,370,372
printfのフォーマット指定をするところに数字を使いたかったのですが、
どうも数字を直接書くよりはマクロで定義していつでも簡単に直せるようにしたほうがいい、
というのを見かけたもので、そうしたかっただけです。
わざわざありがとうございました。
0374365NGNG
>>368
意図したところはそれとは少し違ったんだけれども、その方がスマートかな。

そっちが書いた通りのコードは
foo hoge(int); // foo型のオブジェクトを返す関数hoge
…
std::vector<foo> bar;
for(int i = 0; i < N; ++i) bar.push_back(hoge(i));

ちなみにfoo(hoge(i))はキャストとは違う。同じように見えるかもしれないけれども、
これはiに対応してhogeが返した何かをコンストラクタ引数にして構築したfooの
一時オブジェクト。
0375デフォルトの名無しさんNGNG
>>367
こういうことがしたいんじゃないのか?

#define INT 10
略
printf("hogehogeINTfugafuga");
↓
printf("hogehoge"INT"fugafuga");
0376デフォルトの名無しさんNGNG
>>375
こういうことがしたいです。
int i = 100;
printf("%10d\n", i); → printf("%INTd\n", i);
0377デフォルトの名無しさんNGNG
VisualStudio.netでConsoleプロジェクトを立ち上げ、最初から付いてくるstdafxファイルを削除するとEOFのエラーが出てコンパイル出来なくなりますよね?
これを消したい場合どこの設定を弄ればstdafxファイルなしでコンパイル出来るようになるのでしょうか?
0378デフォルトの名無しさんNGNG
>>376
printf("%*d\n", INT, i);
だったか?たしか。
0379デフォルトの名無しさんNGNG
>>377
プロジェクトのプロパティ→C/C++→プリコンパイル済みヘッダー
→プリコンパイル済みヘッダーの作成/使用 : プリコンパイル済みヘッダーを使用しない
0380デフォルトの名無しさんNGNG
>>378
できました。
ありがとうございました。
0381364NGNG
>>374
ああ、再度なるほどです。
なんとなくではありますが(多分)理解しました。
でもコンストラクタの引数の数が増えると、hoge関数も比例して……(汗)
0382デフォルトの名無しさんNGNG
>>381
何を心配してるのか知らないけど、この際hogeはまったく関係ない。
# 単に説明をややこしくしてるだけ
0383377NGNG
有り難うございます。分かりました。
ところで、プログラムの最後でプリコンパイル済みヘッダーがあるとgetch()などをはさまない限り一瞬でプログラムが終了してしまいます。
プリコンパイル済みヘッダーがなれば、そんなことはないのですが。なぜなのでしょうか?
0384デフォルトの名無しさんNGNG
>>383
んなこたーない。プリコンパイル済みヘッダが無くても終わるときは終わる。
0385377NGNG
猫さんのページの
http://www.kumei.ne.jp/c_lang/intro/no_24.htm
をコンパイルしたところプリコンパイル済みヘッダをありでプロジェクトを作ると、「もうお金がありません! それではやめましょう」のところがほとんど表示されずに表示されてしまったのでそう思ったのですが。
どう弄ればプリコンパイル済みヘッダありでも最後に止まってくれるのでしょう?
0386デフォルトの名無しさんNGNG
>>385
大丈夫、プリコンパイル済みヘッダありでもなしでも普通は止まらない。
0387デフォルトの名無しさんNGNG
>>385
止まるかどうかは、デバッグ付き実行(F5)してるかデバッグ無し実行(Ctrl+F5)してるかの違い。
0388235NGNG
#defineマクロ中に改行コードを埋め込むことはできますか?

例えば、
#define HOGE(name)
というマクロを、

#define name (__LINE__)
int line_ ##name = (__LINE__)+1;

という2行分に定義したいのです。
0389デフォルトの名無しさんNGNG
1行目とそれ以降の繋がりがよくわからん漏れはイッテヨシ?
0390デフォルトの名無しさんNGNG
漏れもサパーリ

#define name (__LINE__)\
int line_ ##name = (__LINE__)+1;

こういうこと???
0391388NGNG
すみません、たとえが悪かったです。

ようするに、#define によるシンボル定義と、それ以外の処理(なんでもいいです)を、
マクロ一つで済ませたいのです。

int now_line[] = {
#define FOO1 __LINE__
FOO1,
#define FOO2 __LINE__
FOO2,
#define FOO3 __LINE__
FOO3,
:
};

というようなこととかを、マクロでやりたいなと。
0392デフォルトの名無しさんNGNG
つまり#defineの中に#defineを書けるか、ということか?
0393388NGNG
>>392
調べたところ #define の中で #define は無理みたいですね…。
別の方法を考えます。
0394デフォルトの名無しさんNGNG
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=126

うえのリンク先のプログラムはL x M 行列 A と M x N 行列 B の積 C(Cは L x N 行列)
を求めるプログラムですが、これを
「行列Bを、行列Bの転置行列DとしてAとDの積を求める」プログラムにするには
どうしたらいいいか回答をお願いします。
0395デフォルトの名無しさんNGNG
宿題丸投げはそれ専用スレへ
0396デフォルトの名無しさんNGNG
c++ について質問です。

class ClassA
{
 ClassB b;
};

class ClassB
{
 ClassA a;
};

のように、2つのクラスが互いに相手クラスのインスタンスを持つとき、
この場合だと class A の定義の前に class B の存在を知らせる必要がありますが、
記述方法を忘れてしまいました。
調べようと思っても検索ワードが思いつかず……。ご指導お願いします。
0397デフォルトの名無しさんNGNG
class ClassB;
0398デフォルトの名無しさんNGNG
つーか無理
0399デフォルトの名無しさんNGNG
なんで?
って、ポインタじゃなくインスタンスか
またまた釣られちゃったぜー
0400デフォルトの名無しさんNGNG
>>397
ありがとうございます。

その定義を入れると、ClassB b; の行で
Error: field 'b' has incomplete type
と言われました。

あれ……
0401396=400NGNG
……無理?(;´Д`)
0402396=400NGNG
……当たり前だということに気づきました。ご迷惑をおかけしました……。
0403デフォルトの名無しさんNGNG
まずAの中にはBがあって
そのBの中にはAがあって
更にAの中にはBがあって(無限再帰)

C++は良く分からないけど、無理だと思う、流石に。


ただ、Aの中にBそのものを入れないで、Bを示すポインタを含めるとかだけなら
特に矛盾は起きないと思う。
0404デフォルトの名無しさんNGNG
質問テンプレ】
[1] 授業単元:C言語
[2] 問題文(含コード&リンク):
[3] 環境
 [3.1] OS:winXP
 [3.2] コンパイラ(バージョン):
 [3.3] 言語:C
[4] 期限:今日中
[5] その他の制限:特に無し

C言語初心者です。課題で迷っています。
strcmp関数(文字列の比較する関数)と同じ働きをする関数αを作りたいですがどのように作れば良いのか分かりません。教えて下さい。
ちなみに関数の作り方の構文は知っています。
0405デフォルトの名無しさんNGNG
>>404
こぴぺがはげしいな。
int scmp(const char* l, const char* r)
{
 if(*l==*r){
  return *l=='\0' ? 0 : scmp(++l, ++r);
 }else{
  return *l - *r ? 1 : -1;
 }
}
0406デフォルトの名無しさんNGNG
宿題スレで回答されてるがな、嫌がらせ?
0407デフォルトの名無しさんNGNG
>>405
return (*l - *r)>0 ? 1 : -1;
こうか
0408デフォルトの名無しさんNGNG
if (条件文A)
{
}
みたいな文で条件文Aがすごく長い時に2行にわたって条件文Aを書きたい時はどうすればいいのでしょうか?
0409デフォルトの名無しさんNGNG
>>408
改行すればいい

if(ab==cd&&
ef!=gh){
ijk;
}
0410デフォルトの名無しさんNGNG
>>409
即レスありがとうございます
0411デフォルトの名無しさんNGNG
>>408
何度も似たような条件文が出てくるなら
条件文を切り出して関数化しておくのも手だぞ。
(マクロでもいいけどその場合は副作用に注意。)
0412デフォルトの名無しさんNGNG
バッファ(*buff←ポインタ)に入っている文字列の最後に改行コードがあるのですが
改行コードだけを削除する方法がありましたらお教え願います。
0413デフォルトの名無しさんNGNG
終端ならNULL(0x0)に置き換えたら?
0414デフォルトの名無しさんNGNG
buff[strlen(buff) - 1] = '\0'
0415デフォルトの名無しさんNGNG
改行コードがCrLfやLfCrだったらどうすんだ
0416デフォルトの名無しさんNGNG
'\r' か '\n'
0417デフォルトの名無しさんNGNG
fgetsで読み込め。
0418デフォルトの名無しさんNGNG
int a
a=1
で
error C2501: 'a' : 識別名を宣言するのに、型が指定されていません。

というエラーがでるんですけどなんでですか?
0419デフォルトの名無しさんNGNG
;
0420418NGNG
>>419
訂正
nt a;
a=1;
で
error C2501: 'a' : 識別名を宣言するのに、型が指定されていません。
というエラーがでるんですけどなんでですか?

と質問したかったんです、すいません
0421デフォルトの名無しさんNGNG
i
0422デフォルトの名無しさんNGNG
期待通りの展開にワロタ
0423デフォルトの名無しさんNGNG
int a;
a=1;
でしょ。他の部分で間違ってるんじゃ無い?
0424418NGNG
上の行で”{”が抜けていたからでした
解決しました
0425418NGNG
>>419
>>421
>>423
レスありがとうございました
0426デフォルトの名無しさんNGNG
使えそうなクラスができたのでライブラリを作ってみたんですが
ライブラリの使い方がわかりません。(win32 static library プロジェクト)
ヘッダファイルにクラス定義、ソースファイルにメンバ関数を分けて書きました。
使うときに必要なのはどのファイルで、どこに置けばよいですか?
コンソールアプリしか作りません。環境はMS-Visual C++6.0です。
0427デフォルトの名無しさんNGNG
教えてください
DELETEDIRでフォルダの中にある全てのファイルを削除したいのですが
その中のファイルが読み取り専用のファイルがあると削除できないようです

これに対応するためにディレクトリの中にあるファイルの
全てのファイルを一度に属性をクリアさせてから実行したいのですが
フォルダ内のファイルを取得(リスト化)してまわすやり方がいまいちよくわかりません、どうすればいいのでしょうか?
すいませんが教えてください
0428デフォルトの名無しさんNGNG
>>427
環境は?
0429デフォルトの名無しさんNGNG
CかC++です
0430デフォルトの名無しさんNGNG
>>428
C++です
0431デフォルトの名無しさんNGNG
じゃなきゃスレ違いだ罠
で、何を聞かれてるのかわからないか?

と思ったら釣りか?
0432デフォルトの名無しさんNGNG
>>431
わかりません
教えてください
0433デフォルトの名無しさんNGNG
>>426
必要なのは、libファイルとヘッダーファイル。
libはプロジェクトと同じ位置が無難かな。
ヘッダーは普通にincludeすればいい。
後は#pragma commentでlib追加してやる。
こんなカンジかな。

0434デフォルトの名無しさんNGNG
vc++でプログラミングしています。
インタプリタっぽいのを作っていて
その言語内で例えば
str test[3]="asfd","fdsa","qwer";(strは文字列変数のことをさす)
のような宣言をされたときに
void* value=new char*[3];
のようにして
(char**)value[0]=new char[4+1];strcpy((char**)value[0],"asdf");
(char**)value[1]=new char[4+1];strcpy((char**)value[0],"fdsa");
(char**)value[2]=new char[4+1];strcpy((char**)value[0],"qwer");
みたいなことをやっています。
ここまではうまく行くのですが
・このあとどれかを削除してそこに新しい文字列を追加する
という作業を行うとアサーションとかいうダイアログがでてきてしまいます。
Debugモードでは駄目でReleaseモードだと難なく動くのです。
手順は
例えば真ん中の"fdsa"を削除して新しく"zxcv"という文字列を追加する場合は
delete [] value[1];
(char**)value[1] = new char[4+1];strcpy((char**)value[0],"zxcv");
という具合に最初とまったく同じなのですが駄目みたいなんです。
このアサーションというのはどういうものなのでしょうか?
他の変数を壊している可能性があるのでしょうか?
0435デフォルトの名無しさんNGNG
>>434
書き間違いの可能性が高いけど、ダメダメじゃん。
どれもみんなvalue[0]にコピーしている。
それから、アサーションはDebugビルドのみ有効でReleaseビルドでは起きない。
つまり、Debugビルドでアサーションを起こさないように充分デバッグしてからリリースしろと言うこと。
で、value[1]をdeleteしているのが恐らくアサーションの原因。
void *じゃなくてはじめからchar **にしておいたら?
0436デフォルトの名無しさんNGNG
FitzHugh-Nagumo方程式の解軌跡を求めるプログラムを書き、興奮性を示すx,yの初期値を一組探しグラフで結果を示せ。ただし、a=0.7,b=0.8,c=20.0,z=1.0を初期値とし、これらの値を変更しても構わない。
dx/dt=c(x-x?/3+y+z)
dy/dt=(a-x-by)/c

よくわからないんです><
0437デフォルトの名無しさんNGNG
>>436
式の意味がよくわからんが t を少しずつ変化させながら、(x,y)を求めて
書いていけばいいんじゃまいか
興奮性ってのは良くわからんのでパス
0438426NGNG
>>433
ありがとうございます。これだとソースを書くたびに
数行追加することになると思うのですが
標準ライブラリのように、#include<hoge.h>だけで
済むような方法はないのでしょうか?あればご教授ください。

たとえば猫Cではこのようにmainを書いているようですが・・・。
ttp://www.kumei.ne.jp/c_lang/intro/no_54.htm
0439デフォルトの名無しさんNGNG
質問です。
簡単のため、インスタンスは全て public とします。
また、クラス定義の順番がバラバラでコンパイルエラーが出るのは、ここでは気にしないとします。

class CParent
{
 CChildA a;
 CChildB b;
 void func() { a.func(this); }
};

CChildA
{
 void func(CParent* p) { p->b.hoge=3 }
};

CChildB
{
 int hoge;
};

のように記述すると、a が b のインスタンスにアクセスすることが出来ますが、
これはオブジェクト指向の概念からはずれてる気がします。
goto 文を避けるのが暗黙の了解になっているように、このような記述も避けるべきでしょうか?
それとも、このような記述は普通に行なわれているのでしょうか?
0440デフォルトの名無しさんNGNG
ならpublicにするなよ
自分で公開して何言ってんだ
0441デフォルトの名無しさんNGNG
>>439
そのような記述はできません
0442デフォルトの名無しさんNGNG
>>438
プロジェクト>設定>リンクタブを開く
カテゴリ「一般」>オブジェクト/ライブラリモジュール内に、使用するlibファイルを追加。
0443cNGNG
char型に数字が格納されているのですが
char型同士で足したり引いたりできるでしょうか?
また方法がありましたらお教えください。
0444デフォルトの名無しさんNGNG
>>443
普通にできる。
無論表現できる値の範囲は小さいけど。
0445デフォルトの名無しさんNGNG
>>439
鮮やかな矛盾っぷりに藁田
0446デフォルトの名無しさんNGNG
a[1]=b[1];

で調べると
a[1]の値が−83634454
b[1]の値が999
みたいな感じだったんですけど
なんで右辺と左辺の値が違うんですか?
0447デフォルトの名無しさんNGNG
>>446
もう少し詳しく
0448デフォルトの名無しさんNGNG
>>446
printf()か何かで表示させたのだろうが、その行も書いてみろ。
0449デフォルトの名無しさんNGNG
知らん
0450デフォルトの名無しさんNGNG
a[1]=b[1];
HDC hdc;
TCHAR szBuf[32];
hdc = GetDC(hWnd);
sprintf(szBuf, "%d", a[1]);
TextOut(hdc, 10, 10, szBuf, lstrlen(szBuf));
ReleaseDC(hWnd , hdc);
みたいな感じです
0451デフォルトの名無しさんNGNG
いや、全然わからん
0452デフォルトの名無しさんNGNG
>>450
そのプログラムでは>>446のようになるわけがない。
0453デフォルトの名無しさんNGNG
for (i=0;i<9;i++)
b[1]=999
a[i]=b[i];
HDC hdc;
TCHAR szBuf[32];
hdc = GetDC(hWnd);
sprintf(szBuf, "%d", a[1]);
TextOut(hdc, 10, 10, szBuf, lstrlen(szBuf));
sprintf(szBuf, "%d", b[1]);
TextOut(hdc, 20, 20, szBuf, lstrlen(szBuf));
ReleaseDC(hWnd , hdc);

もっと詳しく書くとこんなかんじです
0454デフォルトの名無しさんNGNG
> for (i=0;i<9;i++)
> b[1]=999
> a[i]=b[i];

999の後にセミコロンがないんで、コピペミスってるとしても、
b[1]な時点でアホチン
0455デフォルトの名無しさんNGNG
>>453
a[], b[]の定義部分はどうなってる?
それからCHAR_BITとSCHAR_MAXとUCHAR_MAXの値は?
0456デフォルトの名無しさんNGNG
>>454
b[1]=999;
ですすいません
0457デフォルトの名無しさんNGNG
>>456
じゃなく、forループでひたすらb[ 1 ]に代入してどうするのと。
0458デフォルトの名無しさんNGNG
int b[20];
hoge(b);
struct z hoge(int b[])
{
int a[20];
for (i=0;i<9;i++)
b[1]=999;
a[i]=b[i];
}
こんな感じです

あと
nt b[20];
hoge(b);
struct z hoge(int b[])
{
int a[20];
for (i=0;i<9;i++)
b[1]=999;
a[1]=b[1];
}
にすると両方とも999になりました
0459デフォルトの名無しさんNGNG
for (i=0;i<9;i++)
b[1]=999;
a[i]=b[i];
}

↓

for (i=0;i<9;i++)
b[i]=999;     // b[1]→b[i]にしる
a[i]=b[i];
}

これで満足?
0460デフォルトの名無しさんNGNG
>>457
プログラムを簡略化して書くとこうなっちゃったんです
0461デフォルトの名無しさんNGNG
>>458
あー、>>443と同じ人かと勘違いしていたよ。
原因はもうわかったろう?
0462デフォルトの名無しさんNGNG
>>459
for (i=0;i<9;i++)
b[i]=999;     
a[i]=b[i];
HDC hdc;
TCHAR szBuf[32];
hdc = GetDC(hWnd);
sprintf(szBuf, "%d", a[1]);
TextOut(hdc, 10, 10, szBuf, lstrlen(szBuf));
sprintf(szBuf, "%d", b[1]);
TextOut(hdc, 20, 20, szBuf, lstrlen(szBuf));
ReleaseDC(hWnd , hdc);

にしても
a[1]とb[1]の値が違います
0463デフォルトの名無しさんNGNG
>>461
すいません、まだわかりません
0464デフォルトの名無しさんNGNG
>462
かっこつけろ
0465デフォルトの名無しさんNGNG
>>463

for (i=0;i<9;i++) {
 b[i]=999;     
 a[i]=b[i];
}

これでやってみろ。
0466デフォルトの名無しさんNGNG
for (i=0;i<9;i++)
{
b[i]=999;     
a[i]=b[i];
}
HDC hdc;
TCHAR szBuf[32];
hdc = GetDC(hWnd);
sprintf(szBuf, "%d", a[1]);
TextOut(hdc, 10, 10, szBuf, lstrlen(szBuf));
sprintf(szBuf, "%d", b[1]);
TextOut(hdc, 20, 20, szBuf, lstrlen(szBuf));
ReleaseDC(hWnd , hdc);

こうですね
なんか焦って書き間違いが多くてすいません
0467デフォルトの名無しさんNGNG
ttp://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/lounge/index.html
↑ここに最低限症状が再現するソースを貼り付けてくれ。わけわからん
0468デフォルトの名無しさんNGNG
yuoiukiu
0469デフォルトの名無しさんNGNG
>>467
再現できるような例ができないのでいったん諦めます

みなさんレスありがとうございました
0470デフォルトの名無しさんNGNG
周りを振り回した挙句勝手にあきらめてさってくやつが一番迷惑。
他人を巻き込んだんだから最後まで責任持ってがんがれ。
0471デフォルトの名無しさんNGNG
お前も変な奴だな、forループから外れてたから、
b[1]とa[9]、b[9]以外は値が代入されていない。
0472デフォルトの名無しさんNGNG
あ、うそだ
b[9]も代入されてない、当然a[9]も
0473デフォルトの名無しさんNGNG
これからC言語勉強しようと思ってるんですが
どういうのを使えば勉強できますか?

今のところ、Borland C++ Compiler 5.5を使おうと思ってるんですがどうですか?
0474デフォルトの名無しさんNGNG
どうだろうね?
0475473NGNG
ダメ?
0476デフォルトの名無しさんNGNG
>>473
うん
0477デフォルトの名無しさんNGNG
ダメではないけれど、Windowsでは有料の環境でないと、いろいろ不便ですよ。
もし、プログラミングを勉強するのであればVisualStudioなどを買うか、
Linuxでのフリーソフトウェアずくしの環境にするか、
どちらかでしょうね。
Linuxは慣れるとわりと便利な環境で、しかも無料で本格的な環境をそろえる
事ができますので、学生さんでしたら移行をお薦めします。
お金が有ればいろいろパッケージを買って環境をそろえるのも良いかもしれませんが。
0478473NGNG
これからC言語が学校の勉強で取り入れられるので
作業が遅い自分は家で先に予習した方がいいのかな?と思ったんです。
で、家でC言語を勉強するにはどうすればいいのかさっぱりだったんで質問してみました。

基本的にパソコンさっぱりの学生なんで、設定とか複雑なのは頭混乱するんですが
超ド級初心者が一番手を出しやすいのはVisualStudioなんですか?

C++も後から手を出すと思うんですが、やっぱりC言語をやるなら
C→C++の順に勉強したほうがいいのでしょうか?
0479デフォルトの名無しさんNGNG
>>478
学生なら安く買えるよ。
ttp://www.microsoft.com/japan/msdn/student/premium/default.aspx
0480デフォルトの名無しさんNGNG
Cは構文理解程度
さっさとC++へ移行した方が無難

まぁ授業があるのなら,
平行でC++(というよりオブジェクト指向)の概念を学ぶのがベストかな
0481デフォルトの名無しさんNGNG
パソコンさっぱりわからんつってるやつにVSなんか渡すなよ・・・
0482デフォルトの名無しさんNGNG
Win環境で,CまたはC++を使い
「NetMeetingのようなものを作る」
というのが最終課題なのですが

画像と音声を扱うなら,どういう勉強をすればいいでしょう?
資料などお勧めがありましたら教えてください.
(ググってはみましたが,いまいち要領を得なくて)
現在,チャット程度のものができている状態です.
0483デフォルトの名無しさんNGNG
確かに

プログラム組むなら最低限のPCの知識を得てからだ罠
ある程度自分でトラブルシュートできるようになってからじゃないと
先生にこうしろといわれたからこういうソース書いた
とか言うPGが出てきそうだ
0484デフォルトの名無しさんNGNG
勉強はBCCで十分だと思うが。
ちなみにこういうのもある。
ttp://www.microsoft.com/japan/msdn/vstudio/2005/express/visualc/
0485デフォルトの名無しさんNGNG
実は(それなりの知識があるなら)Cygwinが一番楽だと思うけどね。
Linuxと違ってシームレスに扱えるのが魅力。
#インストールも楽だし。
0486デフォルトの名無しさんNGNG
makeファイル万度草

とはいえ覚えておきたいのでどっか紹介ヨロ
0487デフォルトの名無しさんNGNG
>>486
Autoconf/Automakeで作ればいいやん
0488デフォルトの名無しさんNGNG
Makefileを直書きする人の方がまれだし。
0489デフォルトの名無しさんNGNG
激安で買えるVisual Stdio.NET theSpoke Disc.8 4850円
http://pc5.2ch.net/test/read.cgi/tech/1095325802/
0490デフォルトの名無しさんNGNG
>486
漏れこれ読んだ
http://www.ecoop.net/coop/translated/GNUMake3.77/make_toc.jp.html

もれのmingwにはAutoconfとかAutomakeとかなくてよ。
makeを憶えとくのは無駄にはなんねー。
つかglutとかSDLとか何だとか、有名どころのライブラリすら
makefileをちょっといじらないと、コンパイルやリンクが通らない場合もあるしよ。
# つーかもれglut使用アプリのリンクが通らなくて悪戦苦闘しててよorz
0491デフォルトの名無しさんNGNG
>439
「デメテルの法則」かな。
ここで CChildA::func メソッドがアクセスしていいのは
CParent のメンバだけ。
"b.hoge = 3;" の部分で、CParent を超えて
CChildB のメンバにアクセスしている事になるが、
これがデメテルの法則を破っている。

って事でいいのかなあ?
あの法則を最初に知った時、要するに「触れるものは
何でも触っていいぞ」としか読めなくて難儀した(;´Д`)
つか今もよく分かってないし(;´Д`)
0492デフォルトの名無しさんNGNG
>>490
SDLってGTK+に比べたら特殊だと思うけれどね…
0493デフォルトの名無しさんNGNG
#include <stdio.h>

int main(void)
{
int i;

for(i=0; i<9; i++){
printf("error\n");
}

printf("予想は i=9\n");
printf("i=%d\n", i);

return 0;
}

上記のプログラムをコンパイルすると
jikken.c:11:16: warning: unknown escape sequence: '\221'
と出て

予想はi=9
と出るべきところが
卵zはi=9
と出てしまいます。

予想 という漢字は使えないのでしょうか?

コンパイル環境は
gcc version 3.3.1 (cygming special)
cygwinのバージョンは分かりませんでした。
0494デフォルトの名無しさんNGNG
>>493
文字コードがCygwinと君のエディタの出力が違うため。
0495デフォルトの名無しさんNGNG
>493
「予想」の文字コードの並びが 0x97 0x5c 0x91 0x7a だ。
コンパイラは 0x5c を見つけると、特別なモノに置き換えるか、無視をする。
この場合は無視されて、0x97 0x91 0x7a と解釈される。
0x97 0x91 は「卵」だ。0x7a は "z" だ。

解決するには、「予\想」とする。
0496デフォルトの名無しさんNGNG
char *str
に16進数の文字列が入っていて、それを10進数のint型に
変換するにはどうすれば出来ますか?
0497デフォルトの名無しさんNGNG
>>496
>10進数のint型

詳細キボン
0498デフォルトの名無しさんNGNG
>>497
例えば、char *strに003Aが入っているとすると、int iに58を
代入したいということです。
0499デフォルトの名無しさんNGNG
int i に 0x3A を代入では駄目なのか?
0500デフォルトの名無しさんNGNG
>>499
毎回違う16進数を変換したいのです。
0501デフォルトの名無しさんNGNG
>>499
よく見ろ
>>498は char * だから文字列 "003A" のことを言ってるに違いない!
0502デフォルトの名無しさんNGNG
strtolとか。
あとintに入るのは値であって、10進とか16進は関係ない。
*進数は値を文字で表現する手段の一つに過ぎない。
0503デフォルトの名無しさんNGNG
strtolですか。
ちょっとやってみます。
0504デフォルトの名無しさんNGNG
int Ret_hex(char *pBuff){
int retNum=0, last=strlen(pBuff)-1;
for(i=last; i>=0; i++){
retNum += pBuff[i]*pow(10,last-i);
}
return retNum;
}
0505デフォルトの名無しさんNGNG
ぐはぁ。まちがいた。
retNum += pBuff[i]*(16,last-i)
0506デフォルトの名無しさんNGNG
こんな感じでできました。ありがとうございます。
#include<stdio.h>
#include<stdlib.h>
main(){
int a[10],i,j;char *str,*tep;
for(j=0;j<10;j++){
sprintf(str,"%p",&a[j]);
printf("%s\n",str);
i=strtol(str,&tep,16);
printf("%d\n",i);
}
}
0507デフォルトの名無しさんNGNG
>>504-505
どうもです。
見てみます。
0508デフォルトの名無しさんNGNG
>>495さん
ありがとうございます。
\ を足していきたいと思います。
0509504NGNG
int Ret_ChrHex(char theChr){
int chr=toupper(theChr);
if('A' <= chr && chr <= 'F') return chr-'A'+10;
else if('0' <= chr && chr <= '9') return chr-'0';
return 0;
}
int Ret_hex(char *pBuff){
int i,retNum=0, last=strlen(pBuff)-1;

for(i=last; i>=0; i--){
retNum += Ret_ChrHex(pBuff[i])*pow(16,last-i);
}
return retNum;
}
コンパイルせずに書いたから間違えまくり。激しくゴメン。
0510デフォルトの名無しさんNGNG
今でも多いのかな、エスケープ文字と日本語がぶつかるコンパイラ。
0511デフォルトの名無しさんNGNG
>>506
ダメダメじゃん。
0512デフォルトの名無しさんNGNG
配列初期化してないし。
0513デフォルトの名無しさんNGNG
初心者のぶしつけな質問でもうしわけないのがですが、
bccを使った場合ソースのコンパイルはどのように行えばよろしいのでしょうか?
0514デフォルトの名無しさんNGNG
つttp://www.google.com/search?q=bcc+%E3%82%B3%E3%83%B3%E3%83%91%E3%82%A4%E3%83%AB&btnG=Google+%E6%A4%9C%E7%B4%A2&hl=ja&safe=off

後,複数のソースにまたがるなら
「分割コンパイル」「makefile」がキーワード
0515デフォルトの名無しさんNGNG
あー後>>2からbcc専用の方へ行った方がいいかもな
0516デフォルトの名無しさんNGNG
>>514-515
時間的にもこんなに早くレスをもらえるとは思いませんでした。
参考させていただきます。ありがとうございます。
0517デフォルトの名無しさんNGNG
なるべくグローバル変数にしないほうがいいと聞いたので
いちいち関数に引数として渡したり戻り値として返したりしながら
変数をたらい回しにしてるのですが
複数の関数間にまたがる変数はグローバル変数にしたほうがいいような
気がするんですが
グローバル変数にする時のおおまかな基準とか教えてください
0518デフォルトの名無しさんNGNG
>>517
基本的になにもグローバル変数にはしません。
関数間をたらいまわしにするのが正しいです。
もしそれが不自然に感じるのなら、関数の設計やたらいまわしの仕方がおかしいです。

structやclassで関連性の強い変数をまとめるなどしてみるとすっきりするかもしれません。
0519デフォルトの名無しさんNGNG
>>518
structでまとめれそうなのがたくさんあるのでまとめてみます
グローバル変数化しないでがんばろうと思います

アドバイスありがとうございました
0520デフォルトの名無しさんNGNG
グローバル変数にしたほうがいいような
0521デフォルトの名無しさんNGNG
↑定年間近のPG,もしくは昨日今日プログラム覚えたど素人
0522デフォルトの名無しさんNGNG
>>521
まあまあ
>>520
なんでそう思うの?
0523デフォルトの名無しさんNGNG
>>521
必死だなw
0524デフォルトの名無しさんNGNG
>なるべくグローバル変数にしないほうがいいと聞いたので
そうです。グローバル変数だと名前の衝突が起こりやすくなるので
たくさんあると使いにくくなります。しかし、プログラムが
どういうモードで動いているかとか、全体のエラーの個数などは
グローバル変数の方が良いかもしれません。
0525デフォルトの名無しさんNGNG
>グローバル変数にする時のおおまかな基準とか教えてください
漢かどうか
0526デフォルトの名無しさんNGNG
グローバルにしたらどの変数がどこで使われてるか把握しにくくなるじゃない。
1000行程度の個人で作るプログラムならまだしも。
0527デフォルトの名無しさんNGNG
別のところで一度質問をしたのですが、
こちらのスレの方が私の質問のレベルにあってそうなので
改めて質問させていただきます。

文字列の変数a,b,cにSeven,Six,Fiveの文字列をscanf文を用いて読み込み、
Seven
Six
Five
というように表示せよ。

とあるのですが、どのようにプログラムを組めばいいのかわかりません。
よろしければ教えてください。
0528デフォルトの名無しさんNGNG
宿題丸投げだろ?

悪いがここも適当ではない
ttp://pc5.2ch.net/test/read.cgi/tech/1097592876/l50
0529デフォルトの名無しさんNGNG
文字列の変数a,b,cにSeven,Six,Fiveの文字列をscanf文を用いて読み込み、
Seven
Six
Five
というように表示すればいい。
0530デフォルトの名無しさんNGNG
昨日からずっとやっていてわからなくて・・・
できればヒントだけでもと思ったのですが。
0531デフォルトの名無しさんNGNG
宿題なら教科書見ろ。
0532デフォルトの名無しさんNGNG
黙って移動するやつに教える義理はない
0533デフォルトの名無しさんNGNG
>文字列の変数a,b,cに

本当にこのまま問題が出てるとしたらCだと解けない気がする。
0534デフォルトの名無しさんNGNG
全体の流れを制御するためにの変数はグローバル変数でもいいんだよね
0535デフォルトの名無しさんNGNG
>>534
機能ごとに構造体にまとめて、
その構造体のグローバル インスタンスを作るほうがよい。
0536デフォルトの名無しさんNGNG
グローバル変数を一個作ると考えただけでじんましんが出そうな漏れは逝って良しですか?
0537デフォルトの名無しさんNGNG
>>536
そこまでひどくはないですけど、私もそんな感じです。
でもグローバル変数をなくすことはできませんよね。
(なくそうと思えばなくせますけど、逆にプログラムの複雑度が上がる)
0538デフォルトの名無しさんNGNG
>>536
うん。
0539デフォルトの名無しさんNGNG
>>537
グローバル変数なんか無くても困らんと思うけど?
0540デフォルトの名無しさんNGNG
実験プログラムだったら何ら問題無いと思うけど。グローバル変数
0541デフォルトの名無しさんNGNG
すげぇ初心者な質問なんですが、
http://www.amazon.co.jp/exec/obidos/ASIN/4320026926/249-1209347-0897963
↑のP20の
#include<stdio.h>

main()
{
int c;

c = getchar();
while (c != EOF){
putchar(c);
c = getchar();
}
}
ってプログラムをやっても延々と続くんですが、EOFを打ち込めば終了ってワケじゃないんでしょうか?
ソフトはVC++使ってます、誰か教えて_| ̄|○
0542デフォルトの名無しさんNGNG
>>541
その本もってないから良く分かんないけど、おまいがちゃんと読んでないだけなんじゃないのか?
ってかその本訳にかなり問題があるみたいだな
0543デフォルトの名無しさんNGNG
K&Rかよorz・・・んな門窓から投げ捨てろ
0544デフォルトの名無しさんNGNG
>>541
ttp://www9.plala.or.jp/sgwr-t/c/sec08.html
をEOFで検索
0545デフォルトの名無しさんNGNG
Ctrl+Zを押して改行したら終了するよ。
K&Rの本って皆持ってるらしいけど、必要感じた事無い。。。
0546545NGNG
処理系依存だた。他の処理系は知らない。
0547デフォルトの名無しさんNGNG
>>545
お布施みたいなもんだからね
0548デフォルトの名無しさんNGNG
>>539
>グローバル変数なんか無くても困らんと思うけど?

そうすか?
ある程度大きなプログラムになるとどうしても必要になると思いますが、
どうやって グローバル変数をなくしてます?
0549デフォルトの名無しさんNGNG
大きなプログラムほどグローバル使わないと思うが。
グローバルを使わざるを得ないとしたら、むしろ設計に問題がある。
0550デフォルトの名無しさんNGNG
設計厨ハケーン
0551デフォルトの名無しさんNGNG
static const T = x;
もグローバル扱いですか?
0552デフォルトの名無しさんNGNG
>>548
Cだと関数毎にコンテキストを渡すのは面倒極まりないが、
C++だと上位オブジェクトが、自分で作る下位オブジェクトに自分を知らせれば自然に
葉から幹にさかのぼれるツリー構造が出来上がる。

もしどうしても面倒なら static 変数 + 取得・設定用関数を作ればいい。
グローバル変数を生で晒しとくよりは断然マシ。
0553デフォルトの名無しさんNGNG
グローバル変数を否定したがる香具師は
gotoを否定したがる香具師と同じようなもんだ

気にしないで使いたまえ!
0554デフォルトの名無しさんNGNG
プログラム実行中にずーっと保持する必要のある変数はやっぱグローバル変数ですよね?
グローバル変数化以外にずーっと保持できる方法ってあるんでしょうか?
0555デフォルトの名無しさんNGNG
554は以降放置
0556デフォルトの名無しさんNGNG
>>554
私はグローバル変数を使いたくないので寿命の長い値はファイルに格納していますよ。
0557デフォルトの名無しさんNGNG
所属を明確にする為にクラスのスタティックメンバにしてる。
でクラスのスタティックメンバがら取得する。
0558デフォルトの名無しさんNGNG
555は放置されてしまいました
0559デフォルトの名無しさんNGNG
>>552
>Cだと関数毎にコンテキストを渡すのは面倒極まりないが、
>C++だと上位オブジェクトが、自分で作る下位オブジェクトに自分を知らせれば自然に
>葉から幹にさかのぼれるツリー構造が出来上がる。

これだとクラス間の関連性が無用に増えてしまうのでは?
たとえば、Compiler クラスが Preprocessor クラスを所有している場合、
Preprocessor 単体で使えるにも関わらず Compiler との関係をもつということに
なりますよね?

> もしどうしても面倒なら static 変数 + 取得・設定用関数を作ればいい。
> グローバル変数を生で晒しとくよりは断然マシ。

これは分かります。
このような使い方も含めてグローバル変数といいたいわけですけど。。。
0560デフォルトの名無しさんNGNG
>>551
グローバル データはとりあえず議論から除外ということでお願いします。
0561デフォルトの名無しさんNGNG
>>559
Preprocessor が Compiler に依存しないなら、
Preprocessor が依存する情報だけを渡してやればいい。
もし Preprocessor が勝手に static 変数やグローバル変数を使ってしまうと
マルチスレッドで動かしたときなどに悲惨な結果になる。

それとグローバル変数と、static変数、さらに間に一枚関数を噛ますのでは弊害の次元が違う。
同列に扱う無かれ。
0562デフォルトの名無しさんNGNG
ある一連の操作をする関数群が一つのソースファイルにあるとして、その関数群に一度だけ渡せば
いいような種類のデータを受け渡すことを考えてみる。
・グローバル変数
実体を呼び出し側で持つか関数群側で持つかは兎も角、グローバル変数なら呼び出し側で書いておけばいい。
但し、値を設定し忘れて呼び出した場合のトラブルが予想されるし、仕様変更の影響を受けやすい。
・関数群内グローバル変数(静的変数)
関数群にinit()のような初期化関数を用意し、そのパラメータで必要なデータを渡してもいい。
その場合、初期化関数で静的変数に書けばいいのだが、やはり初期化忘れの影響は出る。
・パラメータ
毎回関数呼び出しごとにパラメータで渡しても共有できる。
しかし、毎回渡さなければならないので呼び出し側でそのデータを維持しておく必要が出てくる。
・クラス化
その関数群を一つのクラスのメンバ関数とし、必要なデータもメンバ変数として実装する。
そうすればコンストラクタのパラメータでデータを渡せる。

まぁ、既存のライブラリの実装を見れば、グローバル変数に頼っているものが殆どないと思うが。
#それでも例えばVCのファイルモード(バイナリ/アスキー)はグローバル変数だったりするが。
##突っ込まれ防止に補足すると、fopen()のパラメータでも渡せるからちょっと事情は違うね。
0563デフォルトの名無しさんNGNG
go to文使えばプログラムの量減らせるんだけどな…
go to使わないでしようとすると同じようなプログラムを何回も使わないといけない
量増えても使わない方がいいのでしょうか?
0564デフォルトの名無しさんNGNG
>>563
理解が足りていないようだが、必要なら使えばいい。
0565デフォルトの名無しさんNGNG
ソフト開発の際にライバル会社の実行ファイルを逆コンパイルして解析してプログラム技術を盗むって
普通に行われてるんですか?
0から開発するより手っ取り早いから絶対やってるよね
0566r ◆r/etvCKR2A NGNG
>>565
0から作った方がらくちん。保守しやすい。
ディスコンパイルして得られたコードなんて、
設計意図が全く存在しないから、保守できないと思われ。
0567デフォルトの名無しさんNGNG
さあ、どうかな。解析してまで欲しい技術があるのかどうか。
0568泣いてばかり子猫ちゃんNGNG
ああああ〜〜(泣)
誰か教えてくだせえ、お願いしまんこ。
環境については、今回は割愛させてください。
フローチャートや概念的なものだけを教えていただければ十分でございます。
XMLデータファイルを「つりひも」で取得したいのですが、
どのような手順にすればよいのでしょうか?
まず対象タグの属性値を、なんかの変数に取得して、
そこからプログラムでコントロールすれば包茎なのか?
0569泣いてばかり子猫ちゃんNGNG
下記のようなXMLデータが存在したとしますよね。
<root>
<list>
<li1>1</li>
<li2>2</li>
<li3>3</li>
<param ref=1>
<param ref=2>
</root>
ここで <param1 ref=1> ならば <list> の <li1> の値 1 が取得できる
というようなプログラムです。 どんなカンジのフローチャートなのよ、
あたしわかないよ〜
誰か助けてぇ〜〜!!!
0570泣いてばかり子猫ちゃんNGNG
すいません、XMLが少し見た目が悪いですね、訂正します。
<root>
   <list>
   <li1>1</li>
   <li2>2</li>
   <li3>3</li>
   </list>
   <param ref=1>
   </param>
   <param ref=2>
   </param>
</root>
0571泣いてばかり子猫ちゃんNGNG
ええっと、Iteratorで<root>を指して、それでなんとかしてparam ref=?の
値をゲットするようなコードを書く、おそらくX.compare("1") == 0なら
<list>の<li1>の値を取得する…こんなカンジのコードでいいのかな?
もうわけがわかんないよ・・・ううう、
当方、C++のドシロウトですよ、奥さん。
0572デフォルトの名無しさんNGNG
本物のXMLを処理したいならDOMとSAX勉強してから出直して来い

サンプルだけでいいならyaccとlexでがんがれ

↑上のが意味わかんなかったら scanfとループでがんがれ
0573デフォルトの名無しさんNGNG
go toで飛んで変数も渡したいんですけどどうすればいいのでしょうか?
0574泣いてばかり子猫ちゃんNGNG
あたし、明日の朝までこのエラーと対峙しますわ、誰かよかったら
お付き合いください、もし、協力をしていただけたのなら
協力者が幸せになれるように神社に行ってきてお祈りしてきますわ。

<上記の質問の続き>
vectorに取得したデータを入れたいなぁ…
そんで出力してと…はぁ・・・・デスマはつらいなぁ
0575デフォルトの名無しさんNGNG
定数をマクロで定義するのか、変数に値を代入しておくことで定義するのか
どっちがいいのでしょうか?
0576デフォルトの名無しさんNGNG
変わらない数はマクロで。

ただし、利用頻度が少なく翻訳単位に跨がる定数であれば、
静的な変数として持つことを考えても良いのでは。
0577デフォルトの名無しさんNGNG
当然後者
0578デフォルトの名無しさんNGNG
文からしてガキだと思ってたが
ただのセクハラおやじか…^^;
0579デフォルトの名無しさんNGNG
>>575

EffectiveC++によれば、
#define NUM 100
はコンパイラのエラーやデバッガで「NUM」と表示されず「100」という数字で表示されてしまうため、
その値が何を表しているか分からなくなってしまう可能性がある。そこで、
const int NUM=100;
としておけばデバッガでも「NUM」と確実に表示され、可読性が上がる。

という理由を挙げて変数での定義を推奨している。
0580デフォルトの名無しさんNGNG
>>579
const はグローバル変数が生成されてしまって
無駄ではありませんか?
マクロか enum にすべきでは?
0581デフォルトの名無しさんNGNG
>>580
enum ならいいが何でマクロなの?
理由は?
0582デフォルトの名無しさんNGNG
>>580
そんなもん心配すんな。
C++ならコンパイル時に消滅するし。
0583デフォルトの名無しさんNGNG
俺もconst使う派だが、まぁ、名前空間とかいろいろあるからだけど、
実際使うときは#defineしてもらったほうがうれしい。
const だと定義されてなかったときと合ったときで処理を分けることが出来ない。
結構困ることがある。
型定義もだけどさ。
言語ベースのifdefが欲しいよ。
0584デフォルトの名無しさんNGNG
>>582
C++ならっつ〜かコンパイラや最適化レベルによるけどな。
0585デフォルトの名無しさんNGNG
>>582
ほんとに消える〜?
VC6 とかでも?
0586デフォルトの名無しさんNGNG
>>584-585
C++では const int は定数扱い。消える。
最適化は関係ない。
0587デフォルトの名無しさんNGNG
>>585
そもそもVC6は論外。
0588デフォルトの名無しさんNGNG
気になるんだったらバイナリ見てみればいい
定数に置き換わってるから
0589デフォルトの名無しさんNGNG
--------------------------- main.cpp
extern const int xxx;

int main(void)
{
return xxx;
}
---------------------------

--------------------------- data.cpp
extern const int xxx = 100;
---------------------------

こうすると、次のようなコードが吐かれる。
VC6 の Release モードね。

.text:00401000 mov eax, ds:dword_4050A0
.text:00401005 retn
0590デフォルトの名無しさんNGNG
externかよ。
次は &xxx でアドレス取ったらとか言い出しそうだなw
0591デフォルトの名無しさんNGNG
プログラム書く時はコピペ多様して自分でタイピングすることが少ないんで
なかなか覚えられないんですけどはじめはこんなもんでいいんでしょうか?
0592デフォルトの名無しさんNGNG
超初歩的な質問ですみません

ttp://data.uploda.net/anonymous/etc2/dat6/upload21258.jpg

lcc-win32を使っているのですが、どんなプログラムを打っても
画像のようなillegal return typeという警告が出てしまいます
大学のPCで打ったときはなんともないんですが、自分のPCでは全部こうなります
なにか問題があるんでしょうか・・・?
0593デフォルトの名無しさんNGNG
>591
はじめは ね。
0594デフォルトの名無しさんNGNG
クラスの包含を行うときの話で、包含されるクラスが単体でインスタンスを生成できないように
するにはどのようにしたらよいのでしょうか?
クラスを継承するときならば、継承される側のクラス(基底クラス)が単体でインスタンスを生成できないように
したければ抽象クラスにすればよいと思っているのですが、包含の時はどうなのでしょう?

初心者な質問ですみませんが、もしお答えいただければ助かります m(_ _)m
0595デフォルトの名無しさんNGNG
>>594 できないんじゃね?
0596デフォルトの名無しさんNGNG
>>592
あなたのコードに問題があります
0597デフォルトの名無しさんNGNG
>>594
コンストラクタをprotectedとかprivateにして
包含されるクラスに対するfriendでfactoryを作りそれを使って生成する
0598デフォルトの名無しさんNGNG
>>594
基底クラスを抽象クラスにした上で
その派生クラスを包含するクラス内で定義する。
class hoge { /*インターフェースを純粋仮想関数として定義*/ };
class owner {
 class conclete_hoge : public hoge { /*実装*/ };
 conclete_hoge my_hoge;
};
0599592NGNG
>>59
教本どおりにタイプしたんですが・・・

ttp://data.uploda.net/anonymous/etc2/dat6/upload21266.jpg
0600592NGNG
>>596さんへの間違いです
0601594NGNG
>>597-598
お答えありがとうございます。そうですね、こうすればできるようでした。本当にありがとうございます

もしよろしければ、どちらの書き方がより一般的に使われるのかも教えていただけないでしょうか?
それともこのような形で包含を使おうとすること自体あまり一般的ではなく、するべきではないのでしょうか?

たびたびすみませんがよろしくお願いします
0602泣いてばかり子猫ちゃんNGNG
vectorにString型の値を10個入れるのって、どう書くのかな?
どうか教えてください
0603デフォルトの名無しさんNGNG
>>601
包含されることはできるが単体ではインスタンス化できないクラスとは、
すなわち包含しているクラスが一緒に持っているメンバが必須と言うことではないか?
そうなら、そいつらまとめて一つのクラスにすればよし。

そうでないなら、インスタンス化を禁止することでどんな利点があるのか教えてください。
0604デフォルトの名無しさんNGNG
>>602 std::vector<String> v(10);
0605泣いてばかり子猫ちゃんNGNG
>>604
サンクス!!
0606デフォルトの名無しさんNGNG
#include <stdio.h>
int main(void)
{
〜〜〜〜〜〜〜
〜〜〜〜〜〜〜
〜〜〜〜〜〜〜
〜〜〜〜〜〜〜
printf("tesu=%d\n, a+b);
return 0;
]

>>592
これでやってみ
\nは\nと同じ意味だから。
0607601NGNG
>>603
全くそのとおりで、最初から一つのクラスにすれば問題はないのです。
ただ、そうやってまとめていくと一つのクラスが大きくなりすぎて見にくくなりそうだったので何か別の方法はないかと思って
質問させてもらったのですが、こんなやり方は間違っているようですね
皆様ありがとうございました
0608デフォルトの名無しさんNGNG
>>607
間違ってないと思うが。
クラスを極力小さくしたいと思うのは正しい。
解決策はすでに出てるし。
0609601NGNG
>>608
そういってもらえるとうれしいです。でもあまり一般的手法ではないのですよね?(w
とりあえず今回は上に出た方法で乗り切って、次回からはクラス構造をもう少し考えて作るようにします。
0610592NGNG
>>606
成功しました!ありがとうございます
明日大学のPCでやりくらべてみます
0611デフォルトの名無しさんNGNG
>>609
単にクラスを大きくしたくないというだけで
>>597-598みたいな事をするのはどうかと思うが、
インターフェースは共通だが実装はそのインスタンスを
保有するクラスごとに異なる&隠蔽されているなんて
ケースは別に珍しくはない。
0612デフォルトの名無しさんNGNG
暗号化の参考にしたいのですが簡単な暗号化プログラムのサンプルが乗っているページってないでしょうか。

すぐに解読できてもいいのです・・・。
0613デフォルトの名無しさんNGNG
>>612
http://pc5.2ch.net/test/read.cgi/tech/1097034002/758
この辺とか
0614デフォルトの名無しさんNGNG
unsigned char code;
fread(&code, 1, 1, fp_read);
code ^= 0xff;
fwrite(&code, 1, 1, fp_write);
とか
int len;
unsigned int buf = 0;
do {
for (counter = 0; counter < 4; counter++){
len = fread(&code, 1, 1, fp_read);
buf |= (code << (8 * counter));
}
fwrite(&buf, 4, 1, fp_write);
} while (len != 0);
とか。
0615泣いてばかり子猫ちゃんNGNG
スレ違いのような気もしますがどなたかご教授くださいませ。

XMLで属性値の取得ってのは可能なのかな。
<Vallist>
  <val1>10</val>
  <val2>20</val>
</Vallist>
 <data countid=1 ref=1>
 </data countid=1 ref=1>
 <data countid=2 ref=2>
 </data countid=2 ref=2>


これで「つりひも」の操作を行うために
<data countid=1 ref=1> の 「 ref=1 」 をDOMを介して取得したいのだが
(なんとかNode…とかっていうコードを書けばいいんだよね?)
それでref=1なら<Vallist>の<Val1>のタグの値10をゲットする…
そんなプログラムを書いているんだけど、
タグの値ならともかく、タグの属性値の値なんて取得できるのかな〜
誰かご存知ですか、知っていたら教えてください。

0616デフォルトの名無しさんNGNG
>>615
前スレには移動する旨伝えてきたのか?
んで、まずそのめちゃくちゃなシンタックスエラーは無視するとして、XPathで一発でいける。
もっとも、val1/val2なんて気色の悪い書きかたしないで val id="1" とかにしろ。
0617デフォルトの名無しさんNGNG
>615
キミの書いてるそれはXMLじゃない
0618ぼるじょあ ◆yBEncckFOU NGNG
>>615
(・3・)アルェー 閉じタグはタグ名だけでいいYo
0619デフォルトの名無しさんNGNG
<Vallist>
  <val id=1>10</val>
  <val id=2>20</val>
</Vallist>
 <data countid=1 ref=1/>
 <data countid=2 ref=2/>
0620デフォルトの名無しさんNGNG
Microsoft Visual C++ .NET
MySQL 5.0.0

SQLデータベースから次のようにレコードを取得しようとすると
CRecordset::Open(CRecordset::snapshot, command , CRecordset::none);

条件にあうレコードが0件だと
Openを読んだ時点でエラーが起きるのですがこれを回避する方法はどんなものでしょうか?
0621デフォルトの名無しさんNGNG
SQLは知らんが、0件でOpenできないのなら先に件数を取得して分岐すればいいのでは?
0622デフォルトの名無しさんNGNG
class A{

const static int a = 5;
};

は、できますが

class A{

const static int a[2] = {0, 1};
};

は、エラーがでます

配列は初期化できないのですか
0623デフォルトの名無しさんNGNG
>>620
どんなエラーだよ、発行してるSQLはどんなだよ
0624デフォルトの名無しさんNGNG
>>622
メンバ変数である配列は初期化できない。
但し、ローカルな配列は初期化できるのでこういうことはできる。
class A {
// 厳密に言えばポインタを返す
const int * a() {
static const int b[] = {4, 5, 6,};
return b;
}
typedef int ta[3];
// こちらは配列への参照を返す
const ta & aa() {
static const int b[] = {4, 5, 6,};
return b;
}
};
0625デフォルトの名無しさんNGNG
利用例書くの忘れたよ。
class A {
public:
void print() {std::cout << a()[1] << ' ' << aa()[2] << std::endl;}
};
但し、最適化してもconst intと違って実体があることに注意。
0626デフォルトの名無しさんNGNG
テキスト形式の行を一行読み込んだバッファ分だけのメモリを確保したいのですが
方法ありますでしょうか
0627デフォルトの名無しさんNGNG
>>626
効率無視していいなら、最初に read() で読んで改行コードが出てきたら
行頭に seek() して 、一行分 read() でいいでしょう。
0628622NGNG
ありがとうございます
利用例のおかけで理解できました

static const int でもよいみたいですね
0629620NGNG
SQLコマンドは select column1-comlumn2,... from テーブル where ....
というような複雑なやつです。
sqlクライアントのほうから直接実行してみるとちゃんと期待通りの結果が得られます。

Open時のエラーではありませんでした。
IsBOF()かIsEOF()を呼ぼうとすると
Debug Assertion Failedがでます。

IsBOF()IsEOF()が実行できない条件なんてあるんでしょうか?
0630デフォルトの名無しさんNGNG
0.54e-10  (eは自然対数の底)
のような式を読み込んで数式の計算をしたいのですが
どうすればいいですか?
0631デフォルトの名無しさんNGNG
>>630
構文解析とか、lex とか yacc とか (flex, bison) そういう用語で調べるといいよ。
0632デフォルトの名無しさんNGNG
>>629
Openの戻り値は?
0633デフォルトの名無しさんNGNG
char型の配列い256文字以上の文字列を格納したいのですが
できますでしょうか?

char test[256]←256を1000にしたいのです。
0634デフォルトの名無しさんNGNG
>>633
コンパイラ依存だと思うが、
VC とか BCB とかならできると思うぞ。
0635デフォルトの名無しさんNGNG
やってみればいいじゃない
0636デフォルトの名無しさんNGNG
char test[1000]
0637デフォルトの名無しさんNGNG
>>630
c++ならistringstreamとかboost::lexical_castでできる
#include <iostream>
#include <boost/lexical_cast.hpp>
#include <sstream>
using namespace std;
int main () {
string s0 ("0.54e-10");
istringstream iss (s0);
double d0; iss >> d0;
double d1 (boost::lexical_cast <double> (s0));
cout << d0 << " " << d1 << endl;
return 0;
}
0638デフォルトの名無しさんNGNG
>>637
その解釈は0.54掛ける10の-10乗だが、>630を読む限り、0.54掛けるeの-10乗だ。
0639デフォルトの名無しさんNGNG
ねぇ、ものすごく初歩的なことを聞いても怒らない・・・?
0640637NGNG
>>638
あっ本当だ
これは失礼
0641デフォルトの名無しさんNGNG
>>639
怒らないが、必ずしも答えるとは限らない。
0642620NGNG
Openの戻り値は0x00407af0とかです
0643デフォルトの名無しさんNGNG
>>638
いや、0.54掛けるe引く10に読めるが。
0644デフォルトの名無しさんNGNG
>>641
答えなくてもいいから優しくしてね・・・。
C++でクラスをソースファイルとヘッダーファイルに分けるにはどうすればいいのでしょうか?
かれこれ一週間ほど悩んでいます。
馬鹿でごめんね、あはは・・・。
0645sageNGNG
>>644
「C++」じゃなくて環境書いた方がいいよ
0646デフォルトの名無しさんNGNG
>>644
ヘッダ CHoge.h:
#pragma once //VC用

class CHoge {
public:
  CHoge();
  ~CHoge();

  int foo(int f);
private:
  ...
};

ソース CHoge.cpp:
#include "CHoge.h"

CHoge::CHoge()
{
  ほげ
}

CHoge::~CHoge()
{
  禿
}

int CHoge::foo(int f)
{
  ( ´_ゝ`)
}
0647デフォルトの名無しさんNGNG
>>643
むぅ、そうかもしれん。

>>644
概ねこんな感じに、宣言と定義を分ければいいのでは?

<< foo.h >>
class foo {
int member;
public:
foo(); // ディフォルトコンストラクタ
int getMember() {return member;} // こんなのは中に書いてしまってもいいかと
void setMember(int bar); // こっちは敢えて外に書くので宣言のみ
};

<< foo.cpp >>
#include "foo.h"
foo::foo()
{
// ディフォルトコンストラクタは要らなきゃ省略で
}

// 宣言と定義を分けた例
void foo::setMember(int bar)
{
member = bar;
}
0648デフォルトの名無しさんNGNG
皆優しいね・・・。
ありがとう。
これで少し賢くなれそうです。
0649630NGNG
0.54e-10は
0.54かけるeひく10です
0650デフォルトの名無しさんNGNG
class str{
char str[256];
public:
void set(char *s){
strcpy(str, s);
}
};

print(char *s){
cout << s;
}

int main(){
class str moziretu;
moziretu.set("文字列");
print(moziretu); // *
}

みたいなのを作りたいんですけど
print関数の第1引数にstrクラスを指定したときにstrクラス内のstrのポインタを渡す方法はないでしょうか?
operatorでいけるかなと思い試してみたのですがわかりませんでした・・・やっぱりclass strを渡したとしか認識しないのでしょうか

0651デフォルトの名無しさんNGNG
>>650
class strに
const char* get() const { return str; }
を作って、print関数を
print(const char *s)
にする。
0652デフォルトの名無しさんNGNG
>>650
どうしても、言うに言われぬ理由でそのまま使いたいなら
print(const char *s) にした上で
strクラスに
operator const char*() const { return str; }

を追加する。おすすめはしない。
普通は >>651 のようにやるべき
0653デフォルトの名無しさんNGNG
>>651-652
お返事ありがとうございます
652さんので自分のしたいことができました
0654デフォルトの名無しさんNGNG
>>653
おいおい、判ってる?
0655デフォルトの名無しさんNGNG
explicit も付けろよな
0656デフォルトの名無しさんNGNG
C++でoperatorにexplicit使えたっけか
0657デフォルトの名無しさんNGNG
>>656
使えない。
なんで用意されていないのか不思議。
あると便利だよね。
0658デフォルトの名無しさんNGNG
禿がoperatorはimplicitであるべきだと考えたのかな。
キャストを明示するぐらいならアクセッサを書け、と。。
0659デフォルトの名無しさんNGNG
operator const char*() const { return str; }
               ~~~~~
このconstってどうゆう意味ですか?
0660デフォルトの名無しさんNGNG
mutableのような例外をのぞき、そのメンバ内でオブジェクトを変更しないという事。
cnost参照やらでも呼び出せる。
0661デフォルトの名無しさんNGNG
Visual C++でdoubleでも有効桁が足りないときや固定小数点を使いたいときはどうすればいいのでしょうか?
.NETやJAVAだとdecimal型等があるようなのですが・・
自分で作るしか無いのでしょうか?
0662デフォルトの名無しさんNGNG
ごめんなさい
661はlong doubleでもの間違いです
0663659NGNG
>>660
ありがとう、なんとなくわかった
0664デフォルトの名無しさんNGNG
>>661
自作するかライブラリを探すのがよいかと。
C/C++ の言語や標準ライブラリでは用意されていないからね。
0665デフォルトの名無しさんNGNG
>>664
ありがとうございます
0666デフォルトの名無しさんNGNG
>>660
mutableってなんですか?
0667デフォルトの名無しさんNGNG
>>666
constメンバ関数からはメンバ変数の変更ができないが、例外として変更できるようにするキーワード。

mutable int num_;

void set(int n) const {
  num_ = n; //変更できる
}

あとstaticな変数もconstメンバ関数から変更可能
0668デフォルトの名無しさんNGNG
>>667
サンクス!!
0669デフォルトの名無しさんNGNG
プログラム実行中に
hoge.exe の 0x0044d409 で初回の例外が発生しました : 0xC00000FD: Stack overflow
hoge.exe の 0x0044d409 でハンドルされていない例外が発生しました : 0xC00000FD: Stack overflow。
というエラーが出て
   void func(void)
→ {
   ・・・・・・・・・
   }
func関数の”{”しかない行に黄色い矢印が現れます
何が原因なのでしょうか?
VC.netです
0670デフォルトの名無しさんNGNG
>>669
スタックがオーバーフローしたからです。
0671デフォルトの名無しさんNGNG
>>669 原因はいくつか考えられるけど、ソース見るほうが早いから見せて。
0672デフォルトの名無しさんNGNG
でかい配列でもローカルに定義してるのかな。
0673デフォルトの名無しさんNGNG
>>670
オーバーフローの原因がわかりません…
>>671
ソースは多すぎて無理だと思います、すいません
いくつか考えられる原因を教えてください
0674デフォルトの名無しさんNGNG
>>673
その関数だけでいいよ。
それも巨大なら最初のほうだけでいい。
0675デフォルトの名無しさんNGNG
>>672
黄色い矢印が指している関数内にa[30]くらいの配列があります
0676デフォルトの名無しさんNGNG
再帰呼び出しが止まらないとか
0677デフォルトの名無しさんNGNG
データ型は?独自の構造体で確保しているならメンバを確かめてみてね。
0678デフォルトの名無しさんNGNG
void swap(int &a,int &b) {
a = b - a;
b -= a;
a += b;
}
この関数、VC++6.0でコンパイル通るんですが、
gcc&bccだと
parse error before '&' token.
となり、何回も見直してもさっぱり原因がつかめません。
原因分かる方いませんか?
0679デフォルトの名無しさんNGNG
>>678
gccじゃなくg++を使え
0680678NGNG
>>679
解決しました。有難うございます!
0681デフォルトの名無しさんNGNG
>>674
最初の方は100個くらいの変数宣言と値の代入が占めてます
見せるのは無理そうですすいません
>>676
bという関数からbを含むような関数を呼び出してるんですけど
再帰呼び出しってそれのことなんですか?
>>677
int型です
0682デフォルトの名無しさんNGNG
>>681
bという関数が自分自身(b関数)を呼び出しているならその通り。
bからbを呼び出している関数を呼びだした場合も問題は起こりうる。
0683デフォルトの名無しさんNGNG
>>681
100個もねー。そりゃやっぱその関数でスタックオーバーでしょうね。

コードの質がよくわからんから失礼なアドバイスかもしれないけど、
ローカルにしなくてよい変数はグローバルとか static とかにしてる?
速度が重要でないならローカル変数じゃなくてヒープ上にメモリを確保するといい。
その関数はちゃんんと再帰が終了するようになってる?
無限に再帰したりしてちゃだめだよ。
0684デフォルトの名無しさんNGNG
>>682
再帰呼び出しが起こらない条件で実行するとエラーが起きなくなったみたいです
もう一回再帰呼び出しを見直してみます
再帰呼び出しが有限回数で終わるようにすればいいんですよね?
0685デフォルトの名無しさんNGNG
再帰周辺が原因だなこりゃ。
再帰周辺の汗晒せ。そしたら大体分かる。
0686デフォルトの名無しさんNGNG
>>683
アドバイスもらえるだけでもありがたいです
無限に再帰してないか調べてみます

お返事くださった方々ありがとうございました
0687デフォルトの名無しさんNGNG
>>685
晒すのは勘弁してください、すいません
0688デフォルトの名無しさんNGNG
>>661
gmpおすすめ
0689デフォルトの名無しさんNGNG
>>683
正しそうで微妙に間違ってるなぁ。
0690592NGNG
lcc-win32を使っていて、同じソースを打っても、
関数を途中で付け足したりするとエラーが出るのですが、最初から書きなおすと
大丈夫だったりします

途中でintの後に関数を付け足すとまずいんでしょうか?



あと、.cのプログラムに日本語を挿入することは出来ますか?
0691デフォルトの名無しさんNGNG
>>690
言っていることがまったく理解不能だが

> 途中でintの後に関数を付け足すとまずいんでしょうか?

まぁ常識的に考えてまずいだろうなぁ。
0692デフォルトの名無しさんNGNG
>>688
VC+でgmpって問題あるのでは?
0693592NGNG
>>691
すみません、初心者なので上手く説明できなくて・・・


{}の中に

int a,b;

と関数を入れて、そのあと10行ほど関数cを含んだソースを書いているうちに、
cを定義していないことに気づいて

int a,b,c;

と書きなおしたんですが、コンパイルするとよくわからないエラーが出ました
一から書きなおすと大丈夫でした
0694デフォルトの名無しさんNGNG
>>693
 まずは>>592の誤りについて指摘します。
 main関数の戻り値の型はintが処理系共通であり、その他の形式の
main関数は処理系に依存すると定義されています。可搬性がなくなる
ので、できるだけ使わないようにしましょう。
(ISO/IEC 9899:1999 5.1.2.2.1 Program startupより)
 また、戻り値がint型のmain関数のreturnを省略した場合、return 0;が
末尾に書かれているのと同等であることが決められています。
(ISO/IEC 9899:1999 5.1.2.2.3 Program termination -1より)
よってこの場合、戻り値の型と(暗黙のうちに返された)戻り値0の型が
一致せず、エラーが起きているのです。

 次に、「.cのプログラムに日本語を挿入することは出来るか」との疑問
ですが、これは処理系が対応しているかどうかによりますので、lcc-win32
ならばその解説を読むしかありません。残念ながらこちらにはありません
ので、確認できません。
0695694NGNG
>>693
調べてみましたら、ソースファイルを、Weditではなく例えばメモ帳などで編集
するようにすれば、日本語も入力できるとの事です。
(ttp://www.forest.impress.co.jp/article/1999/11/16/lcc_win32.htmlによる)
ただ、外国製のソフトでローカライゼーションを行っていない以上、おそらく
エスケープシーケンスとの衝突は避けられないでしょう。C初心者との事です
のでこれについてはそのうち文字が化けるなどの問題として悩むことになる
でしょうから、「エスケープシーケンス(またはエスケープ文字)」という言葉を
キーワードとして覚えておいていただくとよろしいかと思います。
0696デフォルトの名無しさんNGNG
>>694
すみません、戻り値の型というのはよくわかりませんが
void main(void)
よりも
int main(void)
のほうが汎用性があるということでしょうか
>>606さんに教えてもらった通りに書くと成功しましたが、教本はvoid main(void)で最初統一してあったので・・・


>>695
はい、たしかにlcc-winで入力すると文字化けが出ます
日本語入力は当面避けておきます





回答くださった方、ありがとうございました
0697デフォルトの名無しさんNGNG
>>695
間違った用語を使わないように。エスケープ文字はエスケープシーケンスとは言わない。
0698デフォルトの名無しさんNGNG
>>696
本当にプログラミングを始めたばかりの人のようですが
たぶん、その教本ではまだ引数や戻り値について説明してないため void main(void) にしてあったのでしょう
もう少しその教本を読みすすめましょう
どんなに初心者向けの本でも最初の方10分の1も読めば書いてある内容です
0699デフォルトの名無しさんNGNG
>>696
main()の戻り値の型は、intが正しいのであって汎用性云々は関係ない。
今ではその教本が間違いと言うことになる。
0700694NGNG
>>696
 その教本の中でvoid main(void)になっているのは、著者がきちんと規格を確認して
いないからでしょう。C言語にはANSI(もしくはISO)の規格というものがあって、その
中でC言語に関するすべてのことが決められているのです。「(ISO/IEC 9899:1999
5.1.2.2.1 Program startupより)」などと書いてあるのは、その規格のどこに定められて
いるかの根拠を示したものです。申し訳ありませんが、その著者はこれを調べることを
「サボって」いるわけですから、あまりいい本とは言い難いですね。
 今の時点では「汎用性があるから」という理由で納得していただいてかまいませんが、
後々関数について詳しく勉強するときに「戻り値」の意義を確認し直してみてください。
これからはint main(void)を使うようにしてくださいね。
0701694NGNG
>>696-697
申し訳ありません。間違いました。「エスケープ文字」を意図しておりました。
0702デフォルトの名無しさんNGNG
>>700
>今の時点では「汎用性があるから」という理由で納得していただいてかまいませんが
全くよくない。
汎用性が問題なのではなく、正しいか正しくないかが問題。
つーか、この場合の汎用性とは何?
0703デフォルトの名無しさんNGNG
初心者用の方便にそんなにつっこまなくても。
初心者本のミッッションはいかにすばやく習得させるかであってさ、
正確さなんてのは二の次でいいじゃぁありませんか。
0704デフォルトの名無しさんNGNG
>>699-700
それ以前に696は戻り値という言葉の意味、返し方、宣言の仕方を知らないのだと思われ
0705デフォルトの名無しさんNGNG
>>703
まあそれを完璧に鵜呑みにされて
「動くからいいじゃないですか!」
と意地を張られた日にゃたまらないわけだが。
0706700NGNG
>>702
上に書いた通り、main関数の戻り値はintでなければ可搬性がなく、ほかは処理系依存であり、
規格上間違いとはいえない(5.1.2.2.1 Program startup -1の末尾にin some other
implementation-defined mannerという記述があることから)までも、可搬性の面からよいとは
言えず、避けるべきであると認識しております。なぜ戻り値が必要かという意味で、「プロセスの
終了状態をプロセス作成元に渡す」という意義を以て、「voidにするよりも」汎用性があると書いた
つもりでした。紛らわしくて申し訳ありません。
0707デフォルトの名無しさんNGNG
>>661
gmpライブラリを使ってなんかプログラムを組んで公開する場合には
ソースを全部さらす必要があるけど、
個人的に使う場合には全く問題にならんよ。

詳しくは GPL でぐぐってみるのがよろし。
と、visualスレでマルチするのやめれ
向こうになんか断りしてこい。
0708デフォルトの名無しさんNGNG
>>661
long longとか使えない?
0709592NGNG
>>698
大学の授業と平行してやっていますが、
本の最後のほうまで、 void main(void)がちょくちょく使われています

>>700
void main(void)が「ANSI Cに準拠した書き方」として紹介されているんですが、
これは間違いということでしょうか
関数の型や引数についてはまだ習っていないので、とりあえずintに直しておきます



0710デフォルトの名無しさんNGNG
>>709
確かANSI-Cではmainの返却値はintでなければならない と明記されていた気がするが
0711デフォルトの名無しさんNGNG
初心者のためのポイント学習C言語
http://www9.plala.or.jp/sgwr-t/index.html

>>709
お前さんの持っている本よりこっちの方がやくにたつ
0712700NGNG
>>709
 ANSI Cは、普通C89と言って1989年に定められた規格を指します。実際には
もっと新しいC99と呼ばれる規格があるのですが、完全にこの規格にある機能を
実装したコンパイラが少ないので、未だC89が用いられることが多いのが現状です。
ところが何故か私の手元にはC99(ISO/IEC 9899:1999)しかないので、それから説明
します。5.1.2.2.1 Program startup -1には、main関数の形式は、int main(void)、
int main(int argc, char *argv[])またはこれと同等のもの、または処理系定義の
形式のいずれかとされています。処理系定義とは、「処理系(≒開発環境)が勝手に
決めた形式」のことで、この場合void main(void)はこれに該当すると考えられます。
だから、規格上間違いと言い切ることはできません。
 しかし、処理系が勝手に決めていると言うことは、他の環境では動かない可能性が
高いと言うことです。それでは役に立ちませんし、規格の意味もありませんので、
普通はint main(void)とint main(int argc, char *argv[])またはこれと同等のもの以外は
使わないのが(事実上)正しいとするわけです。

【原文】ISO/IEC 9899:1999 5.1.2.2.1 Program startup -1
The function called at program startup is named main. The implementation declares
no prototype for this function. It shall be defined with a return type of int and with
no parameters: int main(void) { /* ... */ } or with two parameters (referred to here as
argc and argv, though any names may be used, as they are local to the function
in which they are declared): int main(int argc, char *argv[]) { /* ... */ } or equivalent;
or in some other implementation-defined manner.
0713デフォルトの名無しさんNGNG
ちと出遅れたレスだけど。

普通に頭のいい著者なら入門書では
戻値の解説の前は戻値を省略して、
ただ main()と書いてるものだが。
0714デフォルトの名無しさんNGNG
>>713
それって C99 でも許されるんだっけ?
0715デフォルトの名無しさんNGNG
.net2003を使っています。
http://wisdom.sakura.ne.jp/system/winapi/win32/index.html
を一通り読んだぐらいのレベルです。

Bitmap表示をするときに、
WM_PAINT内に全て記述せず
関数で表示しようとするときは

HDC hdc;
HBITMAP hBitmap1, hBitmap2, hBitmap3;
switch (message)
{
case WM_CREATE:
hBitmap1 = LoadBitmap(hInst, (LPCTSTR)IDB_BITMAP1);
hBitmap2 = LoadBitmap(hInst, (LPCTSTR)IDB_BITMAP2);
hBitmap3 = LoadBitmap(hInst, (LPCTSTR)IDB_BITMAP3);

case WM_PAINT:
 hdc = BeginPaint(hWnd, &ps);
 Hoge.Show(hInst, hdc, hBitmap1, hBitmap2, hBitmap3);   ← ここ
 EndPaint(hWnd, &ps);
 break;
}

のように、引数にインスタンス、デバイスコンテキストハンドル、ビットマップと
ずらずら渡していくしかないのでしょうか。
0716デフォルトの名無しさんNGNG
>>715
Hogeが何らかのクラスのインスタンスなら、
そのクラスにBITMAPを読み込むLoadを定義しておくと良いんじゃないでしょうか…?

case WM_CREATE:
Hoge.Load((LPCTSTR)IDB_BITMAP1);
Hoge.Load((LPCTSTR)IDB_BITMAP2);
Hoge.Load((LPCTSTR)IDB_BITMAP3);
break;

case WM_PAINT:
hdc = BeginPaint(hWnd, &ps);
Hoge.Show(hdc);
EndPaint(hWnd, &ps);
break;

質問の主旨にそぐわなかったらスマソ
0717デフォルトの名無しさんNGNG
ウィンドウズプログラミングがしたいのですが言語はどれがいいでしようか
大学ではCをやってるのですが、++も入門書は一読しました。
VBが手っ取り早いと聞きますが。Cでプログラムするのとそんなに差があるんでしょうか。

作ってみたいツールがありまして…
0718デフォルトの名無しさんNGNG
class A:public B{
…
};
staticな変数を持つ基底クラスBを継承し、
}コンストラクタで、
ZeroMemory(this,sizeof(this));
すると、Bのもつstatic変数も0クリアしてしまいます。
イメージ的に、
ZeroMemory(this,sizeof(this) - sizeof(B) );
みたいなことをしたいのですが、何か方法はありますか?
やっぱりAのメンバを一つ一つ初期化するしかないのでしょうか…。
0719デフォルトの名無しさんNGNG
> ZeroMemory(this,sizeof(this)); 
(((( ;゚д゚)))アワワワワ

面倒ならデータメンバをクラスなり構造体にまとめてゼロクリアしたら?
0720620NGNG
まだ原因もわからない...
何かヒントというか考えられる可能性なんかはご存知ないでしょか
0721718NGNG
>>719
即レスありがとうございます。
ただ、すでに大量にコード書いて、コード修正する方がが時間かかりそうなので、
今回はメンバ一つ一つ初期化することにします。

お手数かけました。即レス、指摘ともども感謝です!
0722デフォルトの名無しさんNGNG
C++です。
int* fu(void){
 int intarray[30][30];
 int *p;
 (中略)
 p = &intarray[0][0];
 return p;
}
int main(void){
 int *pp;
 pp = fu();

 (ここでppを用いてfu()のintarrayの値を使いたい)
}

↑のような感じで。
関数の中で配列を宣言して、その配列の値を呼び出し元で使いたいのですよ。
もしかして宣言した関数が終わっちゃったら、配列の頭を覚えたポインタは何の役にも立たなくなっちゃいます?
0723デフォルトの名無しさんNGNG
そんなの基本ですよ
0724デフォルトの名無しさんNGNG
自動変数へのポインタは関数抜けると無効
やるならmalloc等でヒープに確保するか、static変数にするか
0725デフォルトの名無しさんNGNG
>722
関数内の自動変数はスタックに積まれますので、
その関数から出ると値は保障されません。
そういうことがやりたいのであれば、以下のようにします。
1.呼び出し元の関数で変数定義し、アドレスを引数で渡す
2.変数そのものを外部変数にする
3.呼び出し先の関数でstatic宣言する
0726デフォルトの名無しさんNGNG
>>722
関数内で定義した通常の自動変数は関数から抜ける時点で破棄される。
静的な変数はキープされるので、この例の場合はstatic int intarray[30][30]とすれば大丈夫。
後はこちらも参考に。
http://pc5.2ch.net/test/read.cgi/tech/1097416187/624-625
0727722NGNG
>723-725
ありがとうございます。
class変数一つ増やして対処しますわ。
0728デフォルトの名無しさんNGNG
お前等、レスする前にリロードしろよw
0729717NGNG
スレ違いすんませんでした
0730デフォルトの名無しさんNGNG
まあ全てオレなんだけどな。
0731デフォルトの名無しさんNGNG
カンマ区切りのデータを区切るのに
strtok()を使っています

1,2,4,5,6
のようなカンマ間にデータが入っていれば問題ないのですが

1,,,5,6
のようなデータだと、1、NULL、NULL、5、6と区切ってほしいのですが
実際に取得する値は1,5,6となってしまいます。

カンマが連続した場合、カンマ間の値をNULLとして取得してくれるいいアイデアはないでしょうか。
0732デフォルトの名無しさんNGNG
自前で作れ
空文字列じゃなくNULLポインターが欲しいのか
0733デフォルトの名無しさんNGNG
sscanf()で…と思ったがあれも空フィールド読めないな。
sscanf()で1フィールドずつ剥がしたらどうだろう。
#"%[^,]%n"かなんかで。
0734デフォルトの名無しさんNGNG
boost::regexで出来なかったっけか
0735688NGNG
>>692
私は試してないんだけど
ググったらVCで動かしてるひとはいるみたい
だから書いてみた
0736デフォルトの名無しさんNGNG
>>735
レスありがとうございます
こちらでも調べてみたのですが、問題が多そうでした。
>>707
マルチしてました。すみません
gmpに詳しいようなのでお聞きしたいのですが、ライセンス関係の話ではなく、VC++でビルトできるのかという意味で、
かなり問題が多そうなのですが、そちらの環境では使えているのでしょうか?

0737デフォルトの名無しさんNGNG
すみません。C++のソースをコンパイルすると
hoge.cpp:186: no matching function for call to 'class::hoge () const'
とでてコンパイルできません。
たしかに、このclass::hoge()メソッドは存在するんですが。
このエラーはどういうエラーなんでしょうか
0738デフォルトの名無しさんNGNG
hoge()にはちゃんとconst付いてっか?
0739デフォルトの名無しさんNGNG
#include<stdio.h>
int main(void)
{
int a = -1;
unsigned int b = 100;
int c = a > b;
printf("変数cの値は%dです。\n", c);
return 0;
}

実行すると、
変数cの値は1です。
と表示されます。
a > b はこの場合真になるのですか?
0740デフォルトの名無しさんNGNG
>>739
うん
0741739NGNG
>>740
異なる型の変数を関係演算子で
結んだ式はいつでも真ですか?
0742737NGNG
>>738
string class::hoge() const { ... }
とやってます。これでだいじょうぶですよね。
0743デフォルトの名無しさんNGNG
>>741
- int c = a > b;
+ int c = b > a;
するとどうなる?
0744デフォルトの名無しさんNGNG
そうではなくて、異なる型どうしは演算できないから、
int と unsigned int を演算しようとすると
int が unsigned int に変換される。

intでの-1はunsigned intでは4294967295になるから、
a > bが真になる。

試しにint a=10とunsigned int b=100で比較してみれ
0745デフォルトの名無しさんNGNG
>>742
そのメンバ関数を持っているクラスの名前はなんですか?
0746デフォルトの名無しさんNGNG
>>742
何をやりたいのか分からないほどにめちゃくちゃ
0747743NGNG
743取り消す
失敬
0748739NGNG
>>743
コンパイルできません。

>>744
明解な説明をありがとうございます。
0749デフォルトの名無しさんNGNG
classって名前のclassは作れません。
0750739NGNG
>>744
異なる型の値が関係演算子で結ばれるとき、
どちらかの型にそろえるかと思いますが、
型の選択に規則はありますか?
0751デフォルトの名無しさんNGNG
>>750
int < unsigned int < long int < unsigned long int < float < double < long double
の優先度で、サイズが大きい方に変換される。
int以下は全てintに変換される。
0752デフォルトの名無しさんNGNG
同じサイズのsigned vs unsignedがunsignedになるのはCの最大の汚点。
0753739NGNG
>>751
多謝。
>>752
なるほど。
0754デフォルトの名無しさんNGNG
質問させてください。

とあるヘッダで
#include <vector>
class CA {
int m_hoge;
};
typedef std::vector<CA> VA;
class CB {
private:
VA m_hoge2(10);
};

としようとすると、
VA m_hoge2(10);
の行で syntax error : 'constant'となります。
VA m_hoge2;
は通るのですが、動的配列の大きさを予め決めたいのです。
どのようにすれば通るか教えて下さい。VC++.Net2003が環境です。
0755デフォルトの名無しさんNGNG
>>754
無理です。CB : m_hoge2(10){}とでもするしかありません。
0756デフォルトの名無しさんNGNG
コロン演算子は何をしているのでしょうか、
CB : m_hoge2(10){}
とはどういう意味でしょうか。
なお、実際にはVA m_hoge2(10);の他にもメンバ変数・関数があります。

また、申し訳ありませんが、>754ができない理由をお教え頂ければ幸いです。
よくこういう形で大きさを決めているソースを読むのですが……。
宜しくお願いします。
0757デフォルトの名無しさんNGNG
>>756
ttp://www.nitoyon.com/vc/reference/cxx/init_value.htm
0758755NGNG
分かりました!
クラスのメンバの初期化ですか。引っかかっちゃったなぁ…… orz
なお、>>755 はコンストラクタでやってね、という発言ですよね。

ありがとうございました。STL(・∀・)ガンガル!
0759755NGNG
上記訂正、>>755は>>757です、すみません。
0760755NGNG
何を血迷ってるんだ……。>>755で合っていますね。
デスマ]λ... ワカッテルンダツカレテイルノハ...
0761デフォルトの名無しさんNGNG
スイマセン質問なのですがVC++を使って開発を始めたいと思っているのですが、
自分はCでAPIは何とか理解できてるのですがC++はサッパリです。
なのでC++から勉強を始めようと思うのですが良い本はありませんでしょうか?
なんだかCの本とは違ってどれも小難しそうで…
0762デフォルトの名無しさんNGNG
>>761
簡単な入門ならウェブで解説しているところがあるよ。
↓こことか。
http://wisdom.sakura.ne.jp/programming/cpp/index.html
0763デフォルトの名無しさんNGNG
>>761
あきらめたら?
0764デフォルトの名無しさんNGNG
762のサイトはやめておけ
0765デフォルトの名無しさんNGNG
>>764 どして?
0766デフォルトの名無しさんNGNG
○一○理での会話シミュレーターです。

#include <stdio.h>

int main(int argc, char** argv)
{
char buf[1000];
while (1) {
printf("You>");
fgets(buf, sizeof(buf), stdin);
printf("Genri>すごいね。\n");
}
return 0;
}
0767≠764NGNG
>>765
例えばこんなことが書いてある。
--
ただし、綺麗で保守的なプログラムを書きたいのであれば
適当な位置で変数を宣言するのではなく、ブロックの先頭でまとめて宣言するべきです
--
こんなアナクロニズムな…
0768デフォルトの名無しさんNGNG
保守しやすいんじゃなくて、まさに「保守的」なんだろうな。
C++やC99の記法は認めないと。
0769デフォルトの名無しさんNGNG
>>767
まぁ、それは好みの相違という気がしますし、
読者がそのとおりに習慣づけても悪いことないと思うけどな。
0770デフォルトの名無しさんNGNG
1つのサイトや本ではなく、色々な知識を得よ
と、後輩には口をすっぱく。
0771デフォルトの名無しさんNGNG
>>769
ブロックの先頭でまとめるくらいなら
適当な位置でブロックないし関数に分けたほうがまし。
0772デフォルトの名無しさんNGNG
>>771
まぁそれはそれでいいとして、
>>762 のページの問題点ってそんな些細なことなの?
その程度なら初心者に勧めてもいいのではないかな。
0773デフォルトの名無しさんNGNG
>>772
> C++とはオブジェクト指向型プログラミングのために生まれたC言語です
一行目からヤヴァイと思う
0774デフォルトの名無しさんNGNG
>>773
なぜそれがダメ?
0775デフォルトの名無しさんNGNG
>>769
例えばブロックの中間で決定される値を利用してオブジェクトを生成する場合、
先頭で定義する手法は使えない。
つまり、 先頭で定義したり中間で定義したりと統一性が失われることになる。

それよりもなによりも、必要なものは必要なときに準備する方が判り易いと思うが。
0776デフォルトの名無しさん NGNG
普通のChar型の文字列をバイナリに変換する(およびその逆も)には
どうしたらよいのでしょうか。
変換する便利な関数などはないのでしょうか?
0777デフォルトの名無しさんNGNG
>>776
そんなものいらない
0778デフォルトの名無しさんNGNG
Char型なんて知りません
0779デフォルトの名無しさんNGNG
>>776
char型配列はそのままバイナリだよ。
バイナリを文字列とみなせば文字列だってだけ。
0780デフォルトの名無しさんNGNG
>>776
中身はバイナリだけど…
0781デフォルトの名無しさんNGNG
>>776
二進のコンピュータ上で動いてる限りどんなデータもはじめからバイナリだと思います。
0782761NGNG
orz…
お騒がせしました…
自力で探します…
0783デフォルトの名無しさんNGNG
>>782=761
そもそもすれ違いかもねw
EffectiveC++でも読んだら?
0784デフォルトの名無しさんNGNG
宣言と定義と初期化を混同するなかれ
好みとポリシーを混同するなかれ
0785776NGNG
>>777-781
そうですよね…どうもすいません、ありがとうございました。
0786デフォルトの名無しさんNGNG
バッファ(cha buff[])に取得した日付などをファイル名にしたいのですが
バッファの中身をファイル名として落とす方法ってりますでしょうか。
0787デフォルトの名無しさんNGNG
while(fgets(buff,500,fl_rd) != NULL)
{
bunkatustr = strtok(buff, ",");
id=bunkatustr;


if(id == id_temp)
{
fputs(buff, fl_wr);

break;
}
}//while_end


あるカンマ区切りのデータについて読み込んでIDが一致したら
その行だけを書き込もうと思うのですが
fputs(buff, fl_wr)で一行ファイルに書き込む際、
一行全てではなくidの値しか書き込まれません。

対策でなにかいい方法がございましたらお教え願います。
0788デフォルトの名無しさんNGNG
>>787
strtok()は領域を破壊する。
切り出す手段として、sscanf()を"%[^,]s"で使うか別の領域にコピーしてからstrtok()を使う。
0789デフォルトの名無しさんNGNG
以下のコードはなぜコンパイルエラーなのでしょうか・・・。

struct Test{
  short x;
  short y;
};

vector<Test> structData;

1時間くらい嵌ってる・・・。
0790デフォルトの名無しさんNGNG
>>789
エラーメッセージは?
0791デフォルトの名無しさんNGNG
>>789
どんなエラーメッセージでしょうか
0792789NGNG
すみません。

vector-test.cpp: In function `int main ()':
vector-test.cpp:10: template-argument `main ()::Test' uses local type
`main ()::Test'
vector-test.cpp:10: template argument 1 is invalid
vector-test.cpp:10: template argument 2 is invalid
vector-test.cpp:10: ISO C++ forbids declaration of `structData' with no
type

こういうエラーメッセージです。
0793デフォルトの名無しさんNGNG
その前後のコード書けー
「uses local type `main ()::Test' 」って、
main関数内でTestを宣言しようとしてる?
0794デフォルトの名無しさんNGNG
>>792
mainの中でローカルクラスを定義してない?
0795デフォルトの名無しさんNGNG
MS-Visual C++6.0で単なる変数宣言なのに
ブレークポイントが設定できないということはありますか?
どうやらその行は実行すらされていないようなのですが
コンパイル、ビルドは通るんです。
もう何がなにやら・・・。わかる方お願いします。
0796789NGNG
情報が足りなくてすみません。

#include<vector>

int main(){
struct Test{
short x;
short y;
};

std::vector<Test> structData;

return 0;

}
という、ただ単に構造体のvectorを宣言しているだけです。
なぜローカルクラスを定義していけないのか、がわかりません。
0797デフォルトの名無しさんNGNG
ローカルクラスを定義してはいけないのではなく、
templateの引数に使えないだけだろー
0798デフォルトの名無しさんNGNG
>>796
std::vector<Test>のメンバ関数の中でインライン展開できない物が出たときにTestがローカルだと困るから、
C++ではテンプレートにはローカルの構造体・クラスを指定できない仕様になっている。
なのでmain()の外でtestを宣言しろ。
0799789NGNG
はぁ〜、なるほど、しっかり理由を説明していただけると
わかりやすいですね。

main()外でstructを定義したら、ちゃんとコンパイルできました。

以後、気をつけます。
ありがとうございました。
0800795NGNG
すまん、原因がわかりました。
0801795NGNG
自作クラスを単独で宣言しても問題ないのに
配列で宣言してaccess violationなのは
やっぱりクラスの中身が悪いんでしょうか?
0802デフォルトの名無しさんNGNG
面倒くさいからコード晒せ
0803デフォルトの名無しさんNGNG
うっさい黙れキチガイ
0804デフォルトの名無しさんNGNG
いや、ソースないと判断しようが無いと思うが
0805デフォルトの名無しさんNGNG
コンパイルの際に以下のエラーがでるのですが、これは
インクルードファイルが破損しているのでしょうか?
それともDirectX9.0 SDKのdsound.hがもとからおかしいのでしょうか?
どうしてこのようなエラーがでるのか分かりません。
教えてください。おねがいします

C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\dsound.h(305) : error C2146: 構文エラー : ';' が、識別子 'dwReserved1' の前に必要です。
C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\dsound.h(305) : error C2501: 'DWORD_PTR' : 識別名を宣言するのに、型が指定されていません。
C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\dsound.h(305) : error C2501: 'dwReserved1' : 識別名を宣言するのに、型が指定されていません。
C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\dsound.h(306) : error C2146: 構文エラー : ';' が、識別子 'dwReserved2' の前に必要です。
C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\dsound.h(306) : error C2501: 'DWORD_PTR' : 識別名を宣言するのに、型が指定されていません。
C:\Program Files\Microsoft DirectX 9.0 SDK (October 2004)\Include\dsound.h(306) : error C2501: 'dwReserved2' : 識別名を宣言するのに、型が指定されていません。
0806デフォルトの名無しさんNGNG
>>805
破損してるんなら自分で読めばわかるだろ?
0807デフォルトの名無しさんNGNG
このエラーメッセージみても理解出来ないお前の頭が破損してる
0808デフォルトの名無しさんNGNG
>>805
必要なファイルを先にincludeしてないんじゃないか?
0809デフォルトの名無しさんNGNG
305行目とその周辺を確認するのが手っ取り早いと思うが
0810デフォルトの名無しさんNGNG
>>799
ワロタ!!
0811805NGNG
typedef struct _DSEFFECTDESC
{
DWORD dwSize;
DWORD dwFlags;
GUID guidDSFXClass;
DWORD_PTR dwReserved1;  ←305行目
DWORD_PTR dwReserved2;
} DSEFFECTDESC, *LPDSEFFECTDESC;

これをみても私には何処が間違っているのか分かりません。
0812デフォルトの名無しさんNGNG
DWORD_PTRが定義されてないのかな
0813デフォルトの名無しさんNGNG
DWORD_PTR
という型はどのインクルードファイルを読み込めばよいのでしょうか?
そうすればOKですか?
0814デフォルトの名無しさんNGNG
ここまで分かってて何でそれすら自分で出来ないんだ?
0815デフォルトの名無しさんNGNG
困った初心者さんの条件
・調べない
・試さない
・情報を小出しにする
0816デフォルトの名無しさんNGNG
定義がないなら別のエラーになりそうだが
0817デフォルトの名無しさんNGNG
>>813
それぐらいgrepなりなんなりで検索しろよ…
basetsd.h
0818デフォルトの名無しさんNGNG
文句を言いつつも親切に回答するこのスレの中の人のやさしさに感動した。
0819デフォルトの名無しさんNGNG
>>818
追っ払うには質問に答えればいいからな
0820デフォルトの名無しさんNGNG
バグのために2〜3日まったく進まないことなんてあります?
もう疲れました
0821デフォルトの名無しさんNGNG
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| バグで2〜3日まったく進んでません。もう疲れました。
\
   ̄ ̄ ̄|/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ∧_∧       / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
  ( ・∀・)  ∧ ∧ < おめーのバグだろ、ゴルァ!!
 (  ⊃ )  (゚Д゚;)  \____________
 ̄ ̄ ̄ ̄ ̄ (つ_つ__
 ̄ ̄ ̄日∇ ̄\| BIBLO |\
       ̄   =======  \
0822デフォルトの名無しさんNGNG
>>819
その謙虚さがカッコいいな。
0823デフォルトの名無しさんNGNG
ただ悩んでいないで発想の転換も必要だ。
バグ回避とは逃げではなくて、賢い回り道だ。
0824デフォルトの名無しさんNGNG
バグから逃げないで立ち向かえ
0825デフォルトの名無しさんNGNG
自分自身のバグのために2〜3日まったく進まないことなんてあります?
もう疲れました
0826デフォルトの名無しさんNGNG
820 825
そんなにその質問の答えが聞きたいのか?
0827デフォルトの名無しさんNGNG
typedef struct _STest
{
std::string strTest;
int nTest;
} STest;

とういような構造体を定義しておいて、

STest sTest;
::memset(&sTest, 0, sizeof(STest));
sTest.strTest = "test";

のように、memsetで初期化した後に、strTestに入力を
行ってもいいんでしょうか?
個人的には、非常に気持ち悪いのですが、VC6では、
きちんと動作しているように見えます。

初期化だけが目的ならコンストラクタでやれと言われそうですが、
宜しくお願い致します。
0828デフォルトの名無しさんNGNG
memsetすること自体がヤバい。std::stringが自分のコンストラクタで初期化しているのを
壊している恐れがある。
0829●NGNG
正気の沙汰じゃないな
0830627NGNG
>>628
お返事ありがとうございます。

そう言われて見るとそうですね。やっぱり危険ですよね。
sTest.strTestがNULLなのに、入力できているので不思議です。
どうして、動いてるんでしょう?

STLに詳しくないため、std::stringが中でどういうことを
やってるのか分かりませんが、危険な感じはしますね。
0831デフォルトの名無しさんNGNG
Independent JPEG Group
http://www.ijg.org/
JPEGライブラリをインクルードして使いたいのですがライブラリの構築がうまくいきません。
configureってどうすればよいのですか?
0832●NGNG
./configure
0833デフォルトの名無しさんNGNG
memset や realloc や 可変引数は事故の元
C++ では使わない
0834デフォルトの名無しさんNGNG
Windowsのコマンドプロンプトで実行しようとすると

'configure' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

'./configure' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

ってなってしまうんですm(_ _)m
0835831=834NGNG
間違いました、./configureとすると

'.' は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチ ファイルとして認識されていません。

でしたm(_ _)m
0836デフォルトの名無しさんNGNG
>ってなってしまうんですm(_ _)m
>でしたm(_ _)m
だから何?

無能にも程がある
0837831=834NGNG
失礼しました。意味の無い書き込みでした。頭整理します。

スレ違いになってしまいそうですが、Windowsのコマンドプロンプトで
exe拡張子の無いこのconfigureを実行するにはどうしたらよいのでしょうか。
0838デフォルトの名無しさんNGNG
gcc

今後質問するときは環境とか小出しにしないように
というか、テンプレをよく読むように
0839デフォルトの名無しさんNGNG
自分の頭は自分で整理してくれ
0840デフォルトの名無しさんNGNG
>>837
Windowsでやりたいならどちらか選べ
(1) cygwin環境を入れてconfigure
(2) MSVC入れてmakefile.vc をnmake
0841838NGNG
スマソ素で間違えた
漏れが言いたかったのは>>840(1)の方ね
0842デフォルトの名無しさんNGNG
cygwin環境作るならjpgeも(ソース、バイナリとも)一緒にインストールできる罠。
0843デフォルトの名無しさんNGNG
0x000A0015って文字列をDWORDの値に直す簡単な方法ありますか?
0844デフォルトの名無しさんNGNG
DWORD a=(DWORD)0x000A0015
0845デフォルトの名無しさんNGNG
>>844
オイオイ。 >>843 は文字列って言ってるだろが。

DWORD a;
sfscanf("0x000A0015", "%i", a);
0846845NGNG
まちごた。
sscanfだた。
0847デフォルトの名無しさんNGNG
>>843
ちなみにWindowsでiniファイルとして扱える書式ならGetPrivateProfileIntでも読める
0848デフォルトの名無しさんNGNG
    /,,;,,,,,  ;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;  ,,,,,,,;:::丶
   / :::::::::;;,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,;:::::::::::::::ヽ
   i゙:::;:::::||::::::ii:::::::::::||::::::::::::::::::;:::::::::::::::::::::::::::゙i
  i゙::::|;;;;| |;;;;| |::::::::::| |:::::::::::::::::||:::::::::::::::::::::::::::::|
 . i゙::::::i     ''''''''''' '───' |;;;;;;;;;;::::::::::::::::::::|
  .|:::::::|,-====-´  ゙ヽ,,,,,,,,,,,,、    |:::::::::::::::::::|
  |;::::::::|,-----、    ~ニニ,,_`    |:::::::::::::::::::|  二次元配列は
  `ヽ、i (、i´ノ     ´い,, ノ '    |;;;::::::::::::::/   なんで、ポインタのポインタで渡せられへんの?
  .   i ^~~~ー==--  ー'-+、     / ゙-、;;;;/
     {      ヽゝ          '-'~ノ
    λ   ''゙゙゙'''-''---、       /-'^
     ヽ,    ^~^         (
     /  `丶 、     , -   /^l
     |   /( ノ `''''''´~  __, - '  ゙i、
0849デフォルトの名無しさんNGNG
             L -‐ '´  ̄ `ヽ- 、   〉
          /           ヽ\ /
        //  /  /      ヽヽ ヽ〈
        ヽ、レ! {  ム-t ハ li 、 i i  }ト、
         ハN | lヽ八l ヽjハVヽ、i j/ l !
         /ハ. l ヽk== , r= 、ノルl lL」
        ヽN、ハ l   ┌‐┐   ゙l ノl l
           ヽトjヽ、 ヽ_ノ   ノ//レ′
    r777777777tノ` ー r ´フ/′
   j´ニゝ        l|ヽ  _/`\
   〈 ‐ 知っているがlト、 /   〃ゝ、
   〈、ネ..         .lF V=="/ イl.
   ト |お前の態度がとニヽ二/  l
   ヽ.|l.        〈ー-   ! `ヽ.
      |l気に食わない lトニ、_ノ    ヾ、
      |l__________l|   \    ソ
0850デフォルトの名無しさんNGNG
再帰って流れを読むのが難しいね
bugの修正が困難だよ
どうしよう

なんかいい方法ないですか?
0851デフォルトの名無しさんNGNG
>>850
アルゴリズムを根本から見直す
0852848NGNG
切実な感じを出そう表そうとした結果、
ふざけた感じになってしまいました。
すいませんでした。

できたら教えていただけませんでしょうか
渡せるのですか?
0853デフォルトの名無しさんNGNG
渡せる
0854デフォルトの名無しさんNGNG
ライブラリを作るときって、デバッグどうやってます?
完全に別のプロジェクト立ち上げて、ためしに組んでから
別のライブラリ専用のプロジェクト立ち上げて作ってます?
どうも使う段階になってエラーが発覚したときの
ライブラリデバッグのスマートな方法がわかりません。
0855848NGNG
試してみてもやっぱりうまくいかないのですが・・・
なにか特別なことする必要があるんですか?
アフォなので詳しく教えてください!
0856デフォルトの名無しさんNGNG
>>850
再帰が深くならなくてすむような
再現データを食わせてみる。


都合のよい小さな再現環境がすぐに
作れなければ
再帰が深くなるたびにデータは狭まるか
答えに近づくかするはずだろうから
おかしくなるデータの範囲を
デバッガやログで絞り込む。

0857デフォルトの名無しさんNGNG
>>855
本読んで一から勉強したほうが早いっぽ。
0858デフォルトの名無しさんNGNG
>>854
好きなデータを突っ込める
テスト用のメインプログラムを作る。

絶対作れ。

特に
間違った呼び出し方をしたときに
ちゃんとエラーコードや例外を返せるかとかのテストは
本物の呼び出し元プログラムじゃ
すげー面倒っつーかほとんど不可能。

最近はJUnit VBUnit CppUnittとか便利なのがある。
0859デフォルトの名無しさんNGNG
質問です。
Rubyで言う、attr_accessor、つまりprivateのメンバ変数に対して
publicのset、get関数を作ってくれるようなシステムが
何かしらのテンプレートを介して使えたりするのでしょうか。
(標準ヘッダを使うではなく、プロジェクトの共通ヘッダとして手書き実装でも可です)
アクセッサを作るのが非常にマンドいんで、何とかしたいと思い
色々検索してみたのですが見つからず……。
宜しくお願いいたします。
0860デフォルトの名無しさんNGNG
>>859
BCCでいうところのこんなやつか?

class hoge {
public:
 __property int moge = { read=_moge, write=set_moge };
private:
 int _moge;
 void set_moge(int v){ _moge = v; }
};
0861デフォルトの名無しさんNGNG
使ってるエディタでマクロ組むのが良いんではないかね?
0862デフォルトの名無しさんNGNG
>>859
多少違うがこんな感じか?
template <typename T>
class value_with_accessor
{
    T value;
public:
    T operator()() const {return value;}
    void operator()(const T &t){value = t;}
};

class Test
{
public:
    value_with_accessor<int> m;
};

Test t;
t.m(4);
std::cout << t.m();
0863859NGNG
>>860
私の手元はC++BuilderでなくVC++なので……。
なお、VC++では__propertyを使うと変数をいじっているようで
実は関数を介しているっていう奴が実装できるらしいですね、
使った事ないんですが……。

諦めて地道に作れやって事なのかな…… orz
0864デフォルトの名無しさんNGNG
friendの意味って何?
publicだけじゃダメなの?
不用意に参照されないようにするため?
0865デフォルトの名無しさんNGNG
>>864
うん。
0866859NGNG
>>862
ありがとうございます。
さらに修正を加え(readonlyとか)、自分のものに使わせて頂きました。
激しく便利!
(・Д・)こ、これがテンプレートの力なのかっ……!
0867859NGNG
……と思ったんですが、上記の例でクラスないし構造体のような
ものに適用しようと思ったとき、そのメンバへのアクセスを指定したい時は
どのようにしたら良いでしょうか。
>>862ソースで言うところの
value_with_accessor<int> m;
のintがクラスや構造体の時、mのメンバへのアクセスということです。
そういう時専用のテンプレートを作る事は
止むを得ないとは思うんですが、さらのそのメンバのメンバとかになると
気が遠くなってきます。ダメなのかなぁ……。
0868デフォルトの名無しさんNGNG
>>867
>>862を改造してもread-onlyにはできない。
きめ細かなアクセス制限を施したいならアクセス関数を書けばいい。
setter/getterを用意するなら、メンバへのアクセスを制限する理由はないんじゃないか?
0869デフォルトの名無しさんNGNG
つーか、setter/getter作るのが億劫なら公開しちゃえばいいのに。
#私ゃエディタのマクロで作ってるけど。
0870859NGNG
そうですね、書き込み用の関数をなくすと、誰も書き込めなくなりますしね。
やはりエディタですか。WZにがんばってもらおう……。

デスマ]λ... ドウセオレハマケグミダ...

でもテンプレートたのすぃ事は判明しましたw
0871デフォルトの名無しさんNGNG
0872デフォルトの名無しさんNGNG
プログラムが進むにつれて
流れがつかみにくくなりバグフィックスも難しくなる
もう疲れました
たかだか1000行程度なのにバグばっか
この先もっとバグが増えていくとなると気が遠くなります

プログラマーのみなさんの大変さがわかりました
0873デフォルトの名無しさんNGNG
C++ではなくてCに関する試ソ問なのですが=A
関数の�狽ノついてどb、してもよく分bゥらない点があb閧ワす。

下の関数の引数の渡し方は、どう違うのでしょうか?

void funcTest( char* chrArg ) { ... };

void funcTest( char[] chrArg ) { ... };

0874デフォルトの名無しさんNGNG
>>872
細かい機能ごとなりの関数に分けるといいよ
>>873
配列とポインタの違い?それ以外何?
0875デフォルトの名無しさんNGNG
関数の中で chrArg を変更出来るか出来ないか
0876デフォルトの名無しさんNGNG
>>873
下の書き方はCでもC++でも許可されていません。
0877デフォルトの名無しさんNGNG
>>872
そら全体の設計が悪いんだよ。
C++を使ってるならオブジェクト指向や
デザパタの入門書を読んでごらん。
一度頭を打ってから読むと有難味が
よく判るよw
0878デフォルトの名無しさんNGNG
>>873
char[] chrArg なんて形は無いのでは?char chrArg[] ならあると思うけれど。
確か、関数の仮引数の最後のものだけはchrArg[]としてもポインタとして働くはず
だったので、引数が一つならどちらもポインタになると思うけれど、ポインタの方で
書くのが一般的だと思う。

>>875
本当ですか?
0879デフォルトの名無しさんNGNG
ごめんなさい、878間違っていたので自己レスです

>> 関数の仮引数の最後のものだけはchrArg[]としてもポインタとして働くはずだったので、
引数が一つならどちらもポインタになると思うけれど
上は全部間違いです

関数の仮引数としてのchrarg[]の最後の[]だけはポインタとして働くはずだったので、
[]が一つならどちらもポインタになると思うけれど
が正しいです

自分で読み返して何書いてるんだかって感じでした
0880デフォルトの名無しさんNGNG
http://www.kouno.jp/home/c_faq/c6.html
0881デフォルトの名無しさんNGNG
>>879
どっちにしろ間違いです
0882デフォルトの名無しさんNGNG
>>879
一から勉強しなおせ。
0883デフォルトの名無しさんNGNG
Java出身ですか?
0884デフォルトの名無しさんNGNG
ソートについて質問です
名前、国語の点数、。数学の点数、英語の点数が書いてあるテキストを読み込んで
点数を合計して トップ10を表示するプログラムを作りたいのですが
点数を読む方法が解りません お手数かけますがよろしくお願いします

[テキスト]
ななしさん  30 40 50
ななしさん2 20 50 60
:::
200人まで続きます
0885デフォルトの名無しさんNGNG
>>884
何が分からないのですか?
ファイルの読み込み?
0886デフォルトの名無しさんNGNG
>>884
宿題スレ行ったほうがいいぞ。
宿題ならscanfで充分だと思うけど、
ここだと小難しく考える連中が多いからな。
0887デフォルトの名無しさんNGNG
>>886
scanf()ですか……
小難しいも何も、阿呆につける薬はないな。
0888デフォルトの名無しさんNGNG
buffのreturnについてアドレスではなく、データを先頭だけでなくすべてのデータを戻り値として
戻すことはできないのでしょうか。
というのもperlでsystem関数でCのモジュールを呼んでいるのですが
その戻り値にバッファのデータを返したいのです。
現状では、アドレスが返ってしまっているようです。
0889デフォルトの名無しさんNGNG
標準出力やファイルに書き出して、それを読んだら?
0890デフォルトの名無しさんNGNG
>>858
ありがと。CppUnit挑戦してみます。
0891デフォルトの名無しさんNGNG
VC++7.0で開発しています。
ごくまれにTRACE()を使用すると、
atltracemodulemanager.hののCAtlTraceProcessクラスのModuleCount()という関数で例外が発生してしまいます。
再現方法もまだわかっていないのですが、とにかくTRACE()をやめることで回避できるようです。
しかしこれが原因でTRACE()で落ちる、という理由がわかりません。
どなたかご存じでしょうか?
0892デフォルトの名無しさんNGNG
perlにもパイプあったっしょ?
#awkにもあるんだからないとは思わないけど。
Cで標準出力に出させてそれをパイプで取得するか、>889の言うようにファイル経由か。
0893デフォルトの名無しさんNGNG
>>888
>データを先頭だけでなくすべてのデータを戻り値として

perlはよく知らないが、構造体を使えば出来なくはない。
でもperlのモジュールがそんなアホな仕様になってるわけがない。
もう一度よく仕様読んだほうがいいぞ。
0894デフォルトの名無しさんNGNG
system関数は外部プロセスを起動するもの
perlモジュールをCで書くXSじゃないよ
0895デフォルトの名無しさんNGNG
>>892
VC7はよくわからんが、TRACE()の文字上限こえたんじゃない?

0896デフォルトの名無しさんNGNG
C++で質問なんですが、
friend class
ってのは、

class A{
friend classB;
public:
・・・・・
private:
・・・・・
}
class B{
・・・・・
・・・・・
}
としたら、BからAのpublic, privateを問わずあらゆるメンバを使用可能になるのではないのですか?
GCCを使っているのですが、BのメンバからAの変数やら関数を使おうとしたのですが、
undefine 〜
とエラーが出ます。
なにかヒントになるようなサイトとか助言ありませんか?
0897デフォルトの名無しさんNGNG
>>896
BでAを触ってるとき
ちゃんとAのクラス定義はincludeしてる?
0898デフォルトの名無しさんNGNG
classとB;の間にスペースが空いていないぞ。
0899デフォルトの名無しさんNGNG
y-x>=0で点(0,0)と(1,1)を含まないという条件式は
(y-x>=0)&&((x!=0)&&(y!=0))&&((x!=1)&&(y!=1))
でいいんでしょうか?
0900デフォルトの名無しさんNGNG
>>899
反例 (1,2)

(y-x>=0) && !((x==0&&y==0)||(x==1&&y==1))
じゃね?
0901デフォルトの名無しさんNGNG
>>900
ありがとうがざいます
うまくいきました
0902892NGNG
>>895
はい? TRACE()が何か?
0903デフォルトの名無しさんNGNG
>>902
アンカーが1個ずれてると思割れ目
0904デフォルトの名無しさんNGNG
2ch専用ブラウザ厨にそういうミスをする人が多いね。
0905デフォルトの名無しさんNGNG
>897
はい、てかむしろ同じヘッダーファイルなのですが。
前方宣言?ってのをしてみても駄目でした・・・
いっそソース晒したほうがはやいですかね?
0906デフォルトの名無しさんNGNG
>>905
ttp://www.tcp-ip.or.jp/~ikken/cpp/txt/t12.C.txt
これと比較しる
0907デフォルトの名無しさんNGNG
くだ質ですが

ifstream::getline 用のバッファは
char* 型ではなく string 型で代用できないのでしょうか?

動的にメモリを確保する分では常に確保していなくてはいけないし、
確保できる上限も心もとないんです
他に、代用できる方法もあればその方法も伝授お願いします
0908デフォルトの名無しさんNGNG
std::getline使え
0909デフォルトの名無しさんNGNG
CPPファイルを機能単位に分割していたのですが
error LNK2005: "struct a b" (...............) は既に WinMain.obj で定義されています。
というエラーが出ました
struct a bの構造体宣言はWinMain.cppとgame.cppの両方でしています
その宣言は
struct a
{
int x,y;
}b;
です
どこがいけないのでしょうか?
0910909NGNG
game.cppの方の宣言を
extern struct a
{
int x,y;
}b;
にしたら解決しました
変数だけじゃなくて構造体にもexternをつけれるんですね
かいけつしました
0911デフォルトの名無しさんNGNG
>>909
そりゃ両方で定義したらまずいに決まってるだろ。
externしる。
0912911NGNG
一足遅かった orz
0913デフォルトの名無しさんNGNG
>>910
構造体でも変数には違いないからな
っていうかそんなのヘッダファイルに書けYo
0914デフォルトの名無しさんNGNG
>>908
解決しますた。�dxです
0915909NGNG
気がついたら9000行近いプログラム書いてた
俺って天才かも
0916デフォルトの名無しさんNGNG
お世話になります。
ラウンジに質問のソースを上げました。
http://do.sakura.ne.jp/~junkroom/cgi-bin/megabbs/readres.cgi?bo=lounge&vi=1060403548&res=129&fi=no

2次元配列の中身を表示する単純なプログラムを、少しややこしく書いたものです。
テストは2回行っており、1回目は for loop 内で、2回目はべた打ちで、
まったく同じコードを書いているつもりなのですが出力結果は異なります。
これらのどこに違いがあるのか、時間のあります方はどうかご教示願います。

環境は winXP、コンパイラは bcc5.5 と g++3.3.1(cygwin) で試しました。
宜しくお願い致します。
0917デフォルトの名無しさんNGNG
for (int i=0; i<N; i++) {
p[i].reset(new Tester<double*>(x[i], n));
の次に、
for(int j=0; j<=i; j++)
{
cout << "Tester[" << j << "]: ";
p[j]->disp();
}
を追加してみれば分かると思うよ
0918916NGNG
>>917
早速のご回答をありがとうございます。
なるほどおっしゃるコードで、どうやら Tester内の const参照が
for loop で初期化したときのみ、全インスタンスで共有されてしまって
いるという状況を知ることができました。

しかし未だに原因がわかりません。試しに示された j に関するループを、
元のコード同様べたべたに展開してみましたが、やはり結果が異なって
出力されます。この原因について、もう少しヒントを頂ければ幸いです。
0919916NGNG
連投すみません。
さらに試行錯誤したみたところ、以下の事実がわかりました。

元のコードのベタ打ち部分を、次のように書き換えます。
//----------------------------------
// テスター初期化(2回目)
do { // do loop は必ず1回のみ実行される
  int i=0;
  // if(i<N) break; // この文の有無により挙動が変化
  p[i].reset(new Tester<double*>(x[i], n));
  i++;
  p[i].reset(new Tester<double*>(x[i], n));
  i++;
  p[i].reset(new Tester<double*>(x[i], n));
} while (0);

すると、「この文の有無により」で示された行のコメントを外した瞬間、
for loop と同じ挙動を示しました。条件に用いている比較は常に偽です。
ますます訳がわかりません。ご存知の方はお助け頂けませんでしょうか。
0920916NGNG
ごめんなさいごめんなさい!
>>919 は当たり前でした!!本当にすみません。さっくり無視してください。
>>918 に対するご回答が頂ければ幸いです。
0921デフォルトの名無しさんNGNG
EnumWindowsでウィンドウハンドルを取得して、
そこからキャプションのリストを作りたいのですが、
キャプションを\nで区切ろうとすると改行にならずに「↑」みたいなものに文字化けします。

キャプションを取得してからの処理は、
リストとして確保したバッファにキャプションと「\0」を追加していくというやり方をしています。

文字化けを解決する方法をお教えください。
0922デフォルトの名無しさんNGNG
>>919
for (int i=0; i<N; i++) {
p[i].reset(new Tester<double*>(x[i], n));
と
for(int j=0; j<=i; j++)
{
cout << "Tester[" << j << "]: ";
p[j]->disp();
}

の間に、

switch(i)
{
case 0: p[i].reset(new Tester<double*>(x[i], n)); break;
case 1: p[i].reset(new Tester<double*>(x[i], n)); break;
case 2: p[i].reset(new Tester<double*>(x[i], n)); break;
}
を追加してみると多分分かるよ
0923916NGNG
>>922
ご回答ありがとうございます。
早速試してみました。
残念ながら私には、switch文の挿入にどのような意味があるのか
よくわかりませんでした。単に、
p[i].reset(new Tester<double*>(x[i], n));
をもう一度行っているだけに思われます。不勉強ですみません。

結果はやはり、for loop とべた展開とで異なりました。
重ね重ね申し訳ありませんが、もう少しお付き合いくださると嬉しいです。
0924921NGNG
すいません、なんとか解決致しました。
以降>>921はスルーよろしくお願いします。
0925デフォルトの名無しさんNGNG
引数がvoidでないコンストラクタを持つクラスはなぜ許されないんでしょうか?
厳密には現クラスでvoidでないコンストラクタのみでもいけるようですが,
そのクラスを継承した子クラスではエラーが出てますます意味不明です.

理不尽な制約のように思うのですが・・・
0926925NGNG
間違えました

> 引数がvoidでないコンストラクタ「のみ」を持つクラスはなぜ許されないんでしょうか?
0927デフォルトの名無しさんNGNG
>>926
具体的にどんなコードよ。簡単なのをはつけてみれ。
0928デフォルトの名無しさんNGNG
>>925
子クラスは親クラスのコンストラクタ引数を供給しなければならない。
struct Base
{
Base(int n){}
};

struct Derived : public Base
{
Derived(): Base(4){}
};
0929デフォルトの名無しさんNGNG
子クラスのコンストラクタで基底クラスのコンストラクタに引数を渡してないと予想。
class Base {
public:
 Base(int i) {}
};

class Derived {
public:
 Derived(void)
  : Base(0) /*←これ*/{
 }
};
を書いてないんじゃない?
もしそうならもう一度入門書読み直してまいれ。
0930929NGNG
: public Base忘れた。ハズカシイ……
さらに既に回答が来てて尚恥ずかしくて死ぬ。
0931デフォルトの名無しさんNGNG
>>905
エラーでもいいかも
>undefine 〜
だけじゃさすがにわからんです
0932925NGNG
>>927-928

なるほど!そういう構文があったんですね.
DelphiやらRubyやらはよく使ってるんですが,
C++はあまり深入りしてなかったので細かいしきたりを知りませんでした.
ありがとうございます.
C++本を読んで勉強しなきゃいけませんね.
0933デフォルトの名無しさんNGNG
構文って・・・
0934デフォルトの名無しさんNGNG
超初心者ですが、
atoi関数の逆(int形の整数を文字列に変換)の関数はありますか?
ないならこのような処理はどうすればいいですか?
0935デフォルトの名無しさんNGNG
snprintf
0936デフォルトの名無しさんNGNG
>>934
環境依存でいいなら_itoa
0937デフォルトの名無しさんNGNG
>>934
boost::lexical_cast<>(推奨)
std::stringstream
std::strstream(非推奨)
snprintf(C99では規格に入っている。C89・C++では規格外)
sprintf(規格内。ただしかなり慎重に使わないと危険)
0938デフォルトの名無しさんNGNG
>>934
Ruby!!!!!!!!!
0939934NGNG
>>935->>937

ありがとうございます。

>>937

boost::lexical_cast<>

というのはどこに文字列を入れるんですか?
0940デフォルトの名無しさんNGNG
boost::lexical_cast<string>(i)
0941Ruby >>>>>>>>>>> C++NGNG
int value = lexical_cast<int>(hogehoge);
0942デフォルトの名無しさんNGNG
ぎゃくだろおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおおお
0943デフォルトの名無しさんNGNG
>>941-942
自作自演乙
0944デフォルトの名無しさんNGNG
Ruby!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0945デフォルトの名無しさんNGNG
Ruby Ruby Ruby
0946デフォルトの名無しさんNGNG
C++ で realloc() 相当の構文がないのはどうしてでしょうか?
みなさん realloc() したいときはどうしてますか?
0947デフォルトの名無しさんNGNG
ruby
0948デフォルトの名無しさんNGNG
>>946
realloc つかう
0949デフォルトの名無しさんNGNG
>>946
realloc()とか言ってる時点でまだC++の初心者だって事がバレバレ。
コンテナ使えばいいし、そもそもデストラクタ処理が重すぎる。
0950デフォルトの名無しさんNGNG
>>946
std::vector
0951マイク ◆yrBrqfF1Ew NGNG
>>946
std::reallocを使いたいと思ったことは無いが
必要があればそれを使うだろう。
0952デフォルトの名無しさんNGNG
でも realloc() って new/delete と互換性がありませんよね。
そこが不便なんですよねぇ。

↓こんなことやったらあかんでしょ?
int* p = new kint[10];
p = realloc(p, sizeof(int) * 20); // 20 個分確保しているつもり
delete[] p;
0953デフォルトの名無しさんNGNG
そもそもmalloc/free/reallocの類はレガシー。
ポインタですらなるべく使わないでおこうというのが流行でしょ。
0954952NGNG
>>953
私の中ではリファレンスはできるだけ使わないという方針なんですが。。
C++ を「C をちょっと便利にしたもの」という程度でしか使いたくないんです。
0955デフォルトの名無しさんNGNG
そんなところにプライドを設定するなよ
0956デフォルトの名無しさんNGNG
>>954
可変長配列はstd::vector<>を使うのがセオリー。これを使うだけでも
十分にC++を使うだけの価値があると思うが。
0957デフォルトの名無しさんNGNG
>>955
プライドというか、C++ に溺れないための対策なんです。
0958デフォルトの名無しさんNGNG
>>954
それはつまり、なるべく発展的なことはしないということかな?
0959デフォルトの名無しさんNGNG
>>956
vector はよく使うんですが、それ以外にも方法はないものかと思って。
vector ってどうやって動的にメモリを変更しているんでしょうね。
やっぱり realloc() 使ってるんでしょうね。
0960デフォルトの名無しさんNGNG
>>957
C++に溺れると何か不都合でもあるの??
0961デフォルトの名無しさんNGNG
>>958
そんな感じです。
リファレンスやら const やら template は、限定的に使える限りは使いますが、
他のクラス設計に伝播的に影響を及ぼすと考えられる場合は、できるだけ使わないですね。
特にリファレンスは、関数の const & 引数でしか使わなくて、
クラス メンバに リファレンスをもたせたくはないです。
0962デフォルトの名無しさんNGNG
>>959
君ね、C云々C++云々言う前にCの勉強やってるの?
まずはmallocと同じ物を自分で実装してみたらどう?
0963デフォルトの名無しさんNGNG
>>961
もういいから二度とC++は使うな。
0964デフォルトの名無しさんNGNG
>>954
じゃnew/deleteじゃなくてmalloc/realloc/free使えば?
0965デフォルトの名無しさんNGNG
>>960
設計やコードの見通しが悪くなると思っています。
もちろん C++ を完璧に使いこなせる人がたくさんいれば問題ないですが、
現実にはそうではないですし。
シンプルな設計やコードがベストという意味で、「C 的 C++」にこだわりたいんです。
0966デフォルトの名無しさんNGNG
>>962
malloc/realloc/free の実装はやったことありますよ。
WinAPI の Heap*() API を使えばすぐできます。
0967デフォルトの名無しさんNGNG
>>946
newの配置構文使えばそれらしいことができる。

new(ポインタ変数名) クラス名;
0968デフォルトの名無しさんNGNG
>>963
何かまずいこといいましたか?
C++ の使い方として悪いポリシーでしょうか。
0969デフォルトの名無しさんNGNG
>>967
これはやったことがあるんですが、C++ 標準で用意されていないですよね。
オペレータを定義するしかないですよね。
その実装はやはり realloc() で、となるのか。。。
0970デフォルトの名無しさんNGNG
>>964
現在の私の使い方としては、クラスは new/delete で、
動的にサイズが変化するバッファの場合は malloc()/realloc()/free() で、
という使い方をしています。
やはり C++ から完全に malloc()/realloc()/free() を排除しないほうがよいかと。
0971デフォルトの名無しさんNGNG
>>968
newは解禁しておいてvectorは解禁しないそのポリシー
その基準は?
0972デフォルトの名無しさんNGNG
>>969
Bjarne Stroustrupのプログラミング言語C++ 第3版に書いてたが、
標準じゃないの?
0973デフォルトの名無しさんNGNG
>>959
vector含めSTLコンテナはデフォルトではstd::allocatorを使ってメモリ割り当てを行っている。
http://www.microsoft.com/japan/developer/library/vclang/memory_allocator.htm
(コンテナのテンプレート引数で指定するので自作のクラスで置き換えることもできる。)

そのstd::allocatorにもrealloc相当の物は(残念ながら)無い。
コンテナでは予めやや大きくバッファを取り、必要に応じてコンストラクタ・デストラクタを起動させ、
バッファの空きが無いときには新たに広いメモリを割り当てて、そこにコンストラクト済みのデータを移動させる、
なんてことをやっている。
0974デフォルトの名無しさんNGNG
>>971
つまり、動的バッファがほしいときは、常に vector を使え、それで十分だ、
ということですか?
0975デフォルトの名無しさんNGNG
>>972
あ、標準でしたか。
次のコードは VC6 ではとおらなくて、VC7.1 ではとおりました。

int main(void)
{
 int* p = new int[10];
 p = new(p) int[20];
 delete p;
 return 0;
}
0976デフォルトの名無しさんNGNG
教えないといけないことがたくさんありそうだ。
0977デフォルトの名無しさんNGNG
>>973
そうですね。VC6 の STL を見るとそんな実装になってる。
これは(ある程度)無駄ですね。
まぁ、realloc() の実装を考えてみると、同じようなことをやってると思うので、
たいしたオーバーヘッドではないのかな。
0978デフォルトの名無しさんNGNG
というわけで、realloc騒動はこれにて一件落着。
0979デフォルトの名無しさんNGNG
>>976
すいません、教えてください。 m(_ _)m
お願いします。
0980デフォルトの名無しさんNGNG
>> 975
あ、delete[] の間違いです。
これは知ってますんで。
0981デフォルトの名無しさんNGNG
まぁ、恐ろしくレベルの低い人間の集まった職場ってのは
なんの分野でもあるわけだ。


お払いしとこ。
南無阿弥陀仏南無阿弥陀仏。
0982デフォルトの名無しさんNGNG
>>975
何か使い方が間違ってる気がするんだけどなあ

コンパイルは通ったよ
0983デフォルトの名無しさんNGNG
delete[]でわ?
0984デフォルトの名無しさんNGNG
>>975
使い方がおかしい。
allocateがp = ::operator new(n * sizeof(T));
constructが::new((void*)p) T();
destroyがp->~T();
deallocateが::operator delete((void*)p);
0985916NGNG
どなたか >>916 にヘルプぷりーず
0986デフォルトの名無しさんNGNG
>>985
Tester<double[n]>
0987916NGNG
>>986 ご回答ありがとうございます。
それは一応試し済みでして、関数に配列を渡そうとすると実際には
ポインタが渡されるため、bcc5.5 で以下のエラーが得られました。
エラー E2285 main.cpp 32:
'Tester<double[20]>::Tester(double *,enum)'
に一致するものが見つからない(関数 main() )
0988デフォルトの名無しさんNGNG
>>987
const Container& mc;
を
const Container mc;
にしてみれ
0989916NGNG
(続きです、連投すみません)
g++ 3.3.1 (cygwin) ですとコンパイルできて、且つ期待する動作が
得られました。どちらのコンパイラの解釈が標準準拠なのでしょうか。
両方で同じように記述する書き方はないでしょうか。

そして、for loop にしないで直接展開したコードを書いた場合に
コンパイルできてしまうのは一体何故なのでしょうか。最適化による
バグとか……?

いずれにせよ、朝早くのご回答を有り難うございました。
引き続き、情報をお持ちの方は宜しくお願い致します。
0990916NGNG
>>988
ご回答ありがとうございます。
解決策の一つとして考えさせて頂きますが、その方法は、
(vectorなどを引数にした場合など)コンテナ全体のコピーを取ってしまうため
テスタークラスの振る舞いとパフォーマンスが大幅に変わることになります。

デフォルトコンストラクタにアクセスできないために無理やり auto_ptr
を用いている(直接 vector のテンプレート引数にしない) ことからも
わかるように、このテスタークラスは「なるべく変更を加えたくないクラス」
を想定しています。

しかし、貴重な意見に感謝いたします。
スレも残りわずかですが、さらに情報を頂ければ幸いです。
0991デフォルトの名無しさんNGNG
>>990
じゃ、言い出しっぺの法則で次スレ宜しく。切りもいいことだしね。
0992デフォルトの名無しさんNGNG
(a!=b)&&(c!=d)と!((a==b)&&(c==d))は同じなんでしょうか?
0993デフォルトの名無しさんNGNG
>>992
違う
0994デフォルトの名無しさんNGNG
>>992
どう違うんですか?
0995デフォルトの名無しさんNGNG
(a!=b)&&(c!=d)
a!=b かつ c!=d

!((a==b)&&(c==d))
(a==b かつ c==d) ではない
つまり a!=b または c!=d

さらにC++だと呼ばれる演算子がオーバーロードされてたりして・・・。
0996デフォルトの名無しさんNGNG
ドモルガンって今習わないの?
0997デフォルトの名無しさんNGNG
高校で習うよ
0998デフォルトの名無しさんNGNG
>>992
一番簡単な方法は真理値表を書く方法。
例外が一つでもあれば両式は等価とはいえない。
s := (a!=b)&&(c!=d)
s':= !((a==b)&&(c==d))
a b c d s s'
0 0 0 1 0 1
0 0 1 0 0 1
0 0 1 1 0 0
...

両式は等価ではない。
0999デフォルトの名無しさんNGNG
>>990
あなたのコードがやろうとしてることはこういうことじゃない?
#include <iostream>
using namespace std;
template<class Container>
class Tester {
const Container &mc;
Tester();
Tester(const Tester &p);
Tester &operator = (const Tester &p);
public:
Tester(const Container &c): mc(c) {}
void disp() {cout << mc << endl;}
};
void init (Tester <int> *&p) {
int tmp (10);
p = new Tester <int> (tmp);
}
int main () {
Tester <int> *tester;
init (tester);
tester->disp ();
return 0;
}
1000デフォルトの名無しさんNGNG
>>995
説明ありがとうございました
わかりました
>>996
ドモルガン勉強してみます
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。