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

C++相談室 part12

レス数が1000を超えています。これ以上書き込みはできません。
0001アフォルトの名無しさんNGNG
文法が汚くてもいいから、懐の広い言語を望むあなた。そんな
あなたにぴったりの言語、C++。
・・・いいやエレガントなソースを目指せゴルァ!!

(・∀・).。o(関連URLは >>2-3 辺り) アヒャ
0002アフォルトの名無しさんNGNG
■Documents■
C++ Final Draft International Standard
http://www.kuzbass.ru/docs/isocpp/
ISO/IEC 14882 International Standard
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf

■STL Libraries■
Boost http://www.boost.org/
STLport http://www.stlport.org/
Loki http://www.moderncppdesign.com/
Loki for VC7(LokiPort) http://www.geocities.com/rani_sharoni/LokiPort.html

■過去スレ■
Part1 http://piza.2ch.net/tech/kako/980/980175292.html
Part2 http://pc.2ch.net/tech/kako/996/996640937.html
Part3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
Part8 http://pc3.2ch.net/test/read.cgi/tech/1025010364/ (HTML 化待機中)
Part9 http://pc3.2ch.net/test/read.cgi/tech/1027347982/ (HTML 化待機中)
Part10 http://pc3.2ch.net/test/read.cgi/tech/1029315669/ (HTML 化待機中)
Part11 http://pc3.2ch.net/test/read.cgi/tech/1032345774/
0003アフォルトの名無しさんNGNG
■関連スレ■
VisualC++相談室 3  http://piza2.2ch.net/tech/kako/993/993186053.html
VisualC++相談室 4  http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
VisualC++相談室 5  http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
VisualC++相談室 6  http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
VisualC++相談室 【7】 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
VisualC相談室 【8】   http://pc.2ch.net/test/read.cgi/tech/1022499000/

C++Builder相談室    http://piza2.2ch.net/tech/kako/969/969458279.html
新C++Builder相談室  http://pc.2ch.net/tech/kako/997/997074601.html
C Builder相談室 Part3 http://pc3.2ch.net/test/read.cgi/tech/1016065855/

STLスレッド      http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
STLスレッド part2 http://pc3.2ch.net/test/read.cgi/tech/1026793823/l50
0004v(^・^)vNGNG
v(^・^)v
0005デフォルトの名無しさんNGNG
#if abc
#error (・∀・)
#endif

abcと同名のシンボルは無いはずだけど全ての処理系で通る(falseで)!
大ハケーン?
0006デフォルトの名無しさんNGNG
>>5
規格嫁
0007アフォルトの名無しさんNGNG
>>5
何度も書き込むな。
前スレのレスはちゃんと読んだのか?
http://pc3.2ch.net/test/read.cgi/tech/1032345774/945-949
第一そんな下らない事で得意になるな。
・・・ネタ?
0008デフォルトの名無しさんNGNG
>>1
Z
0009デフォルトの名無しさんNGNG
>>1-4
乙カレー
0010アフォルトの名無しさんNGNG
>>9
4 は違う。
0011デフォルトの名無しさんNGNG
関連スレ追加

【C++】Boost使い集まれ!
http://pc3.2ch.net/test/read.cgi/tech/1033830935/
0012デフォルトの名無しさんNGNG
関連スレ追加

Generic Programming with C++ Template
http://pc3.2ch.net/test/read.cgi/tech/1008593126/
0013アフォルトの名無しさんNGNG
>>11 >>12 は STL スレッドの方にぶら下げた方が良ざげ。
0014デフォルトの名無しさんNGNG
Vidual C++6.0がインストールされているPCでWordを使っていたら突然エラーダイアログが出て閉じるorデバックを要求されました。
そこでデバックを選択したら、Vidual C++6.0が起動し保存ダイアログが出たので保存を選択しました。(この時、保存先を指定することは出来ませんでした。)
この場合、データは何処に保存されているのでしょうか?
宜しくお願いします。
0015デフォルトの名無しさんNGNG
>>13
なるほど、ここは隔離用インターネットだったのですね
001614NGNG
すみません。Vidual C++6.0ではなくVisual Studioだったかも知れません。
WordはWord2000です。
症状はこれと似ています。
http://www.geocities.co.jp/SiliconValley-SanJose/8677/win95/pslg1612.html
0017デフォルトの名無しさんNGNG
>>16
禿げしくスレ違いな上に、おそらくは板違い。カエレ!
0018アフォルトの名無しさんNGNG
>>15
まあ、はっきり言えば隔離かもね (インターネットという言いまわしはグー)。
STL は使う使わないでソースコードの性格が変わるし、質問も然り。
STL バリバリのところに C++ 初心者は入っていけないだろうし、STL スレも
初歩レベルの情報を交えるべきでないと思う (5、14 みたいのも来るし)。
0019デフォルトの名無しさんNGNG
>1
乙
0020デフォルトの名無しさんNGNG
STLなんかリファレンス一つあれば使えるだろ?
Perlより簡単だけど。
0021デフォルトの名無しさんNGNG
>>20
コンテナだけならね。
0022デフォルトの名無しさんNGNG
とりあえず、ヘッダファイルが一番のマニュアル
0023デフォルトの名無しさんNGNG
g++の話で申し訳ないが、C++のコードにもgcovってまともに使える?
http://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_6.html
0024デフォルトの名無しさんNGNG
>>21
コンテナだけって?
0025デフォルトの名無しさんNGNG
>>24
vector<T>やらmap<T,U>を使うだけなら猿でもできる(もちろん使ったほうが
良いのだが)。vector<T>::iteratorやらなにやらでコンテナの内容にアクセスする
のも、当然サルでもできる。

その先が、ややハードル高い。20や24は<algorithm>で定義される各種
アルゴリズムを正確につかいこなしたり、bind1st,2ndと組み込みの述語関数
を組み合わせてプログラム書いたりを苦もなくできますか?

俺は目が慣れるまでに結構時間が必要だったけどね。関数型言語の経験があれば
"perlより簡単"なのかもしれんが・・・

0026デフォルトの名無しさんNGNG
>>20
mem_fun1_tの使いどころを教えてください



とか言ってみるテスト

002720NGNG
物覚え悪いんだね。
0028デフォルトの名無しさんNGNG
>>27
ここでそう煽ることに何の意味が?
僕は馬鹿です と言っているのかな。

0029デフォルトの名無しさんNGNG
必死でぐぐり中の20
0030デフォルトの名無しさんNGNG
今後の20のレスが楽しみですw
0031男子高校生NGNG
今日デザインパタ〜ンってもんを初めてしったYO
なんか(・∀・)イイね。
0032デフォルトの名無しさんNGNG
>>25
perlのスパゲティコード読むよりはるかに簡単じゃい。
0033デフォルトの名無しさんNGNG
んま、主観的比較論争はこれくらいにしとけば?
20がSTL知らないということだけが客観的事実ってことで。
0034デフォルトの名無しさんNGNG
(´,_ゝ`)プッ
0035デフォルトの名無しさんNGNG
(´,_ゝ`)ペッ
0036アフォルトの名無しさんNGNG
>>32
C++ のスパゲティコードだって似たようなもんじゃ。
>>33
同意。
0037デフォルトの名無しさんNGNG
C++マンセー。
0038デフォルトの名無しさんNGNG
C++で作られた有名ソフトって何がありますか?
0039デフォルトの名無しさんNGNG
>>38
MSの製品
0040デフォルトの名無しさんNGNG
>>38
mozilla
0041デフォルトの名無しさんNGNG
char 型 は有名ですが、u_charってなんですか?
0042デフォルトの名無しさんNGNG
unsigned charのtypedefでしょ?
0043デフォルトの名無しさんNGNG
いつからクソスレに・・
0044デフォルトの名無しさんNGNG
とてもくだらない質問なのですが、
void main(int argc,char *argv[])
というのがあるじゃないですか。それで、
argcが1を返すとはどういう意味でしょうか?
0045デフォルトの名無しさんNGNG
ほんとにくだらん
0046デフォルトの名無しさんNGNG
申し訳ありません。でも分らないので教えてください。
0047デフォルトの名無しさんNGNG
argc = argument count
0048デフォルトの名無しさんNGNG
はぃ。それで、1を返すのはどういう意味なんでしょう?
0049デフォルトの名無しさんNGNG
argvになんかあるやろ。
0050デフォルトの名無しさんNGNG
え? なんかってなんでしょう・・・。
0051デフォルトの名無しさんNGNG
引数の数ですか。
では、
if(argc<=1){ exit(-1); }
って書くじゃないですか。
とうこということは、argvに自分のパスが入っているので、
必ず終了することになるんですか?
0052アフォルトの名無しさんNGNG
>>44
とりあえず main() を void で書くのはやめろ。
>>51
その通り。
実際に引数が指定された場合は、argc は 2 以上になる。
0053デフォルトの名無しさんNGNG
はい。voidで書くのはやめました。int main(){return 0;}って感じでいいんですよね。
でも、なんでですか?変わった気はしない…。
if(argc<=1){ exit(-1); } なんですけど、
よくサンプルコードに書いてあるじゃないですか?
無意味なんじゃないですか?
0054デフォルトの名無しさんNGNG
そのプログラムはコマンドラインオプションが必要だからだろう。
0055デフォルトの名無しさんNGNG
DOSで実行せよ ということですか?
mfc.exe command
ってかんじに。
0056デフォルトの名無しさんNGNG
初心者です
�U�Uこの半角記号が打てないので
プログラムを書くのに困っています。
キーボードの右下の�Uのキーを押しても¥が出てくるだけです
どうすれば、英数半角でこの記号が打てるようになるのか
教えてください
0057デフォルトの名無しさんNGNG
ネタ質問は逝って良し
0058デフォルトの名無しさんNGNG
アホ質問は続くわ、void main()ツッコミ厨が出るわ・・・
0059デフォルトの名無しさんNGNG
おもしろいメールが盛りだくさんですね。
0060デフォルトの名無しさんNGNG
あー、C++でないんですけど
if文の分岐予測ペナが大きいと聞いたんでビット演算で回避できないかやってみたんです。
  int A,B,C;(B,Cには適当な値)
  A=(B-C);
  if(A>=0) A=0;
を、
  A=((A>>31)&A);
にしてみたんですけど、素直にif文使った方が僅差で早かったです…。
これって他のCPUでも同じ結果になるんですかね?(ウチはDuron1.2G)
可読性も考えると、素直にif文…かな?
0061アフォルトの名無しさんNGNG
>>53
main() が int を返さないなら、そのソースがどんなに酷似していても
C/C++ ではない。

>>56
それれ半角で書くとカタカナの "ヲ" だ (英字フォントでは "�U" になる)。
この文字をプログラムで使えなくて困ることは無いはずだが?
"|" (Shift + "\") ではないのか?

>>58
printf() 使うのに <stdio.h> インクルードしない人ですか?
0062デフォルトの名無しさんNGNG
C++なら<cstdio>やろ
0063アフォルトの名無しさんNGNG
>>62
ありがとう
0064デフォルトの名無しさんNGNG
特別な理由が無い限りC++ではiostreamを使うけどね。
boost::formatも出来たし、printfはバイバイキーン。
0065デフォルトの名無しさんNGNG
C++に関係ない、っていうかネタ質問はさらりと流してほしいところ。

>>60
分岐予測はCPUによって実装が異なるだろうから
結果は微妙に変わってくるかもしれないけど、
よほど意地悪なor運の悪い状況でない限り、
ペナルティ多発ってことはないんじゃないでしょうか。

>A=((A>>31)&A);
同一レジスタに対する読み書きが連続することによる
ペナルティもあります。

素直にif文に一票。
0066デフォルトの名無しさんNGNG
ネタじゃないのですが

�U�Uこの半角記号が打てないので
プログラムを書くのに困っています。
キーボードの右下の�Uのキーを押しても¥が出てくるだけです
どうすれば、英数半角でこの記号が打てるようになるのか
教えてください

0067デフォルトの名無しさんNGNG
だからネタ質問は逝っってよし。
0068デフォルトの名無しさんNGNG
shift押せ、そして死ね
0069アフォルトの名無しさんNGNG
>>60
単純にアセンブリに直すと、

  ; if(A >= 0) A = 0;
    cmp   DWORD PTR _A$[ebp], 0
    jl   SHORT $L42319
    mov   DWORD PTR _A$[ebp], 0
  $L42319:

  ; A = (A >> 31) & A;
    mov   eax, DWORD PTR _A$[ebp]
    sar   eax, 31
    and   eax, DWORD PTR _A$[ebp]
    mov   DWORD PTR _A$[ebp], eax

前者は (A >= 0) ならば 2 インストラクション、そうでなくても 3 インストラクション
で済んでいるのに対し、後者は一律 4 インストラクションになっている。
さらに、変数 A へのメモリアクセスも 1 つ多い。

というわけで後者の方が実はペナルティが多い。

分岐命令がパイプラインストールになる可能性は、コンパイラを使っている限り考えなくて
良い。

>>66
61 が見えんのか? やっぱりネタか?
0070デフォルトの名無しさんNGNG
>>68
shiftを押しても出ないので質問してるのですが
0071デフォルトの名無しさんNGNG
>>44
オプションパラメタが一つもない時。
0072デフォルトの名無しさんNGNG
>>70 バカ!さっさと氏ね!
0073デフォルトの名無しさんNGNG
>>70
PC初心者
http://pc.2ch.net/pcqa/
0074デフォルトの名無しさんNGNG
右のShiftを押しっぱなしにすると出るよ
007560NGNG
>>69
なるほど。回答ありがとうございます。
0076アフォルトの名無しさんNGNG
69 追記。

> 分岐命令がパイプラインストールになる可能性は、コンパイラを使っている限り
> 考えなくて良い。

これは、コンパイラさえ使っていれば最良のパフォーマンスが得られると言う意味
ではないので念の為。
真に洗練されたアセンブリ使いの最適化には、どんなコンパイラも敵わない。
(漏れはコンパイラに敵わないが・・・)
そうではなくて、>>60 のように一見意味の読み取れないようなコードを書くと、
コンパイラがすでに想定している最適化を適用できずベタなマシン語を吐き出し
てしまうので止めた方がいいと言う事。
0077デフォルトの名無しさんNGNG
これは実話?
http://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
0078デフォルトの名無しさんNGNG
>>77
それってC++挫折組の捏造記事。
って何年前のネタだよ。
0079デフォルトの名無しさんNGNG
>>77
http://www.research.att.com/~bs/bs_faq.html#IEEE
0080デフォルトの名無しさんNGNG
>>77
ああ、これ探してたんだ。ありがとう。
でも今読むと古臭いね。テンプレートについて
何か言わなければだめだよね(藁
0081ももNGNG
三角形の三辺の長さをa,b,cに呼び込んで、ヘロンの公式で面積Sを求めて出力する
プログラムをC++で作ってください。ちなみにヘロンの公式、z=(a+b+c)/2
S=(z*(z-a)*(z-b)*(z-c))の平方根です。どなたかよろしくお願いします。
0082デフォルトの名無しさんNGNG
>>81
逝ってよし
0083デフォルトの名無しさんNGNG
>>81
そういうのは相談とは言わん。(・∀・) カエレ!
http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50
0084デフォルトの名無しさんNGNG
class A{
public:
A(){::_beginthread(func,0,(void*)this);}
void func(void){}
};

これは何故エラーになるのですか?
また、メンバ関数をマルチスレッドには出来ないのですか?
0085デフォルトの名無しさんNGNG
>>84

A::func() -> func(A this)

func(A this) != func()
0086ももNGNG
すみません、相談ではなく質問でしたね。場違いですみませんでした。
0087デフォルトの名無しさんNGNG
>>86
そう言う高いレベルの問題ではない。
0088デフォルトの名無しさんNGNG
>>84
class A {
 HANDLE hThread;
 unsigned idThread;
 static unsigned _stdcall func();
public:
 A()
 { hThread = reinterpret_cast<HANDLE>(_beginthreadex(NULL, 0, &func, reinterpret_cast<void*>(this), 0, &idThread)); }
 ~A()
 { WaitForSingleObject(hThread,INFINITE); CloseHandle(hThread); }
}

unsigned A::func() { return 0; }
0089デフォルトの名無しさんNGNG
最後間違えた

unsigned _stdcall A::func(void* a) { return 0; }

で、この関数からメンバにアクセスしたい場合は

A* Instance = reinterpret_cast<A*>(a);
Instance->メンバ
0090デフォルトの名無しさんNGNG
class A
{
public:
 volatile bool m_bContinue;
public:
 A() : m_bContinue(true){
  _beginthread(func_, 0, (void*)this);
 }
 void func(void* data){
  //...
  _endthread();
 }
 static void func_(void* data){
  ((A*)data)->func(data);
 }
};

俺ならこんな感じで。
0091デフォルトの名無しさんNGNG
>>90
メンバ変数m_bContinueは何のために・・・?
static関数をインライン宣言しているのは何のために・・・?
しかも再帰構造になっているのは何のために・・・?
0092デフォルトの名無しさんNGNG
しかもCスタイルのキャストだし。ってこれは別に良いか・・
0093デフォルトの名無しさんNGNG
Intel C++ Compiler ってどうですか?
ANSI C++ や ISO C++ に準拠しているようですが、
Loki とか Boost とか何の手も入れることなくコンパイルできますか?
使っている方がいたら教えてください。
0094デフォルトの名無しさんNGNG
Effective C++くらいは読め。
0095デフォルトの名無しさんNGNG
デストラクタで仮想関数を呼び出した時の振る舞いって不定でしょうか?
コンストラクタは「未構築」なので不定(たいていはベースクラスのものですよね)
なのは理解しています。

ちなみにデストラクタは virtual にしています。
デストラクトチェーン中にわざわざ vptr を書き換えているのでしょうか?

ちなみに CodeWarrior for Windows 7.0 で確認した状態では
ベースクラスの関数が呼び出されてしまいます。
0096デフォルトの名無しさんNGNG
>>93
http://www.boost.org/status/cs-win32.html
0097デフォルトの名無しさんNGNG
みんなBoost使ってるんだ。いいなぁ。
保守が難しくなるってんでうちは標準ライブラリしか使わせてもらえないよ。
0098デフォルトの名無しさんNGNG
みんな標準ライブラリ使ってるんだ。いいなぁ。
保守が難しくなるってんでうちは独自ライブラリしか使わせてもらえないよ。
0099デフォルトの名無しさんNGNG
みんなC++使ってるんだ。いいなぁ。
(以下略
0100デフォルトの名無しさんNGNG
みんな仕事してるんだ。いいなぁ。
(-_-
0101デフォルトの名無しさんNGNG
みんなPC使ってるんだ。いいなぁ。
保守が難しくなるってんでうちは紙と鉛筆しか使わせてもらえないよ。


0102デフォルトの名無しさんNGNG
みんな文字つかえてるんだ。いいなぁ。
何万年後の保守が難しくなるってんで、うちは象形文字一筋。
0103名無しさんNGNG
>>102
ケータイの絵文字でつか?
0104デフォルトの名無しさんNGNG
>>95
>デストラクトチェーン中にわざわざ vptr を書き換えているのでしょうか?
そういうこと。
コンストラクト時は基底クラスのコンストラクト直後に派生クラスの vptr に
書き換える。デストラクト時は逆に基底クラスのデストラクト直前に vptr を
基底クラスのものに書き換える。だから、「不定」ということはない。
010595NGNG
>>104
なるほど…。まだまだ詰めが甘かったです。ありがとうございました。
0106デフォルトの名無しさんNGNG
class A
{
 const char* m_fname;
public:
 A(const char* fname);
 ~A();
};

というクラスがあったとき、

A::A(const char* fname) : m_fname(fname) {}

とやるのと

A::A(const char* fname) : m_fname(strdup(fname)) {}
A::~A() { free(m_fname); }

とやるのでは、後者の方がより安全性が高いと言えますか?
0107デフォルトの名無しさんNGNG
>>106
文字列クラスを使う
0108デフォルトの名無しさんNGNG
用途によるだろ。
Aを構築した後、fname の参照元に対する変更に追随する必要があるなら前者だし、
影響を受けてはいけないなら後者だな。
#VCでは _strdup だな。
0109デフォルトの名無しさんNGNG
コピーコンストラクタを用意していない以上、後者は激しく危険。
0110デフォルトの名無しさんNGNG
>>109
コピーコンストラクタむっちゃ忘れてました・・・
代入演算子もですよね

private:
 A(const A& a){}
 A& operator=(const A& a){}

って事でひとつ・・・

で、何が言いたかったかというと
>>108氏が言及しているような事で、
前者だと参照元がなんかの拍子で書き替わってしまったら〜
という危険性は無いのかなという疑問でした

>>107が正解ですかね・・・
0111デフォルトの名無しさんNGNG
>>110
const char*だからなんとなく変な気がするけど、
通常のクラスで考えてみるといいよ

前者、後者どちらもあり得るけど
値型に近いもの(文字列とか)なら後者にすることが多いねえ
011293NGNG

Loki-lib みたら、Intel C++ Compiler は、素の Loki 呼ぶようになってたよ。
Intel C++ Compiler 検討してみようかな…

>>96
ありがとう。参考になりました
0113デフォルトの名無しさんNGNG
>>110
そう、文字列クラスを使うのが正解。

遅延評価してくれる文字列クラスなら
あなたの出した2つの例のいいとこどり(↓)ができる。
文字列のコピー元の内容が変わらなければ、ディープコピーが行われることはない。
文字列のコピー元の内容が変われば、その時点で複製が作成される。
0114デフォルトの名無しさんNGNG
class A{ public:virtual ~A(){} };
というクラスがあって、
const A a;
A *pa;
pa = (A *)&a;
上のキャストはExceptional C++によると、新しいキャストに置き換えられない
と書かれているんですが(const_castすると未定義になるらしい)。
つまり & で取ったconstポインタはconst_cast出来ないと言うことですか?
0115デフォルトの名無しさんNGNG
>>114
単に、引数でconst受けしたわけではなく、「本当にconst」なオブジェクトを
const_castすると結果が未定義というだけではなくて?

#そういう話であれば、糞C言語だってそういう規格だよ。
0116デフォルトの名無しさんNGNG
スレ立てるまでも〜スレで聴いてみたんですが、無反応だったのでこちらで
質問させてください。

C++で、

template < (略), class F>
class X {

friend F;
以下略

っていうのは文法的にどうなんですか?

VC6なら通ったんですが、
g++の3.2だと template parameters cannot be friends で はねられました。

BCC32の5.5.1でも通りました。
0117デフォルトの名無しさんNGNG
>>115
レスthanks.
constで宣言&初期化したオブジェクトはconst_castできないんですね。
いままでconst_castすれば何でもconstをはずせると思ってました。
。
0118デフォルトの名無しさんNGNG
>>116
friend class F;
0119デフォルトの名無しさんNGNG
Windowsで使えるDBMライブラリってないですか?
0120デフォルトの名無しさんNGNG
>>118
レスありがとう。

>friend class F;

と書くと、VC6やBCC5.5.1ではfriendが利かないんです。
やっぱりtemplate parameters cannot be friends が正しいんですかね?
0121デフォルトの名無しさんNGNG
delete演算ではポインタの値はNULLにセットされるのでしょうか?

質問までの経緯としては,
1.あるソースを読んでいたら
   delete pA;
   pA = NULL;
  という2行があった.
2.今までてっきりNULLがセットされるものだと思ってた自分がいて,
  焦る.セットされることを前提でif(pA)とかしてたし.
3.MSDNやWebでそのことを明言してるフレーズを見つけられず.
といった流れです.

言語仕様ではどのようになっていたかご存知の方がいたら教えてください.
0122デフォルトの名無しさんNGNG
>>121
されない。

というか、
deleteはpAの型に応じたデストラクタを、引数pAをのせて呼び出すだけ。

無用なバグの回避のために、deleteの直後にNULLを代入するのはよい習慣。
0123121NGNG
>>122
レスありがとうございます!

以前書いたコードもチェックした方が良さそうですね.
もやもやが解消されてすっきりしました.

>>無用なバグの回避のために、deleteの直後にNULLを代入するのはよい習慣。

はい,心掛けるようにします.
0124デフォルトの名無しさんNGNG
>>122
> deleteの直後にNULLを代入するのはよい習慣。
俺はそうは思わない。無駄なコードは読み手に誤解を与える場合がある。
それに以下のような場合、NULLを代入するためだけにconstを外す必要が
あるが、constですむものをconstにしないのは悪い習慣である。
 A *const pA = new A;
 delete pA;
 pA = NULL;
0125デフォルトの名無しさんNGNG
JavaやC#でも要らなくなった参照にはnullを入れるのがよい習慣
とされてるね。こっちは事情が違うけど、無駄な参照を減らすのは
よいことだと思う。
0126デフォルトの名無しさんNGNG
>>121
自分でdeleteなんて書かなくていいようにするのがもっとよい習慣。
0127デフォルトの名無しさんNGNG
>>125
事情違いすぎ
0128デフォルトの名無しさんNGNG
>>124
つーか、const なポインタを delete するような状況って
それをメンバとして持つオブジェクトのデストラクト時
くらいしか思いつかんが。
0129デフォルトの名無しさんNGNG
>>128
ポインタ自体の const と delete には何の関係もないと思いますが
何か勘違いしてません?
0130デフォルトの名無しさんNGNG
素人はnull/NULL/0を代入したほうがいいな。
余計なことを考えずにすむし。
0131デフォルトの名無しさんNGNG
厨房な質問ですみません。
NULLを代入するとどうしてバグ回避になるんですか?
0132デフォルトの名無しさんNGNG
>>131
>>121
0133デフォルトの名無しさんNGNG
まあ厨房はおとなしくNULL入れてろってこった。

あ、玄人の皆さんはしなくていいですよ。
0134デフォルトの名無しさんNGNG
>>132
ありがとうございます。見落としていました。
メンバ変数とかをdeleteをしたときに、NULLを入れておくようにするのですね。
0135デフォルトの名無しさんNGNG
デフォルト値プログラミングが流行るに3ペリカ
0136デフォルトの名無しさんNGNG
template <typename T>
void safe_delete(T*& ptr)
{
delete ptr;
ptr = static_cast<T*>(0);
}
0137デフォルトの名無しさんNGNG
>>136
キャストしなくても 0 は明らかにヌルポインタなのだが。
0138C++使い(定期)NGNG
C++必読書のご案内です。

基本
ブ厚いけど持っておくと(・∀・)イイ!
◎ プログラミング言語 C++ 第三版

普通
◎ Effective C++
◎ More Effective C++
◎ Effective STL
◎ Exceptional C++

Hな方
◎ Modern C++ Design
0139デフォルトの名無しさんNGNG
貧弱なマシンをお使いの方
◎Optimizing C++
0140デフォルトの名無しさんNGNG
Efficient C++は激しくイマイチだった。memory pool くらいかなぁ。フ-ンと思ったのは。他はたとえば138の本を読んだことがあるなら常識。
0141デフォルトの名無しさんNGNG
C++ やっていたら人生に疲れました。
どうしたらいいですか?
0142デフォルトの名無しさんNGNG
>>141
ん?C++が人生に影響与えるほど疲れたか?
取り敢えず精神神経科にいって薬出してもらいなさい。
0143デフォルトの名無しさんNGNG
>>120
どっかで見た話題だな、と思ってたのだが思い出した。
http://www.kmonos.net/wlog/
の10/9にそのネタが。

>>138
憂鬱本も入れといてホスィ。
0144120NGNG
>>143
レスありがとう!
とても助かりました。聴いてみてよかったです。
テンプレートまわりは、どの処理系も多少怪しそうですね。
リンク先を参考にさせていただきます。
0145デフォルトの名無しさんNGNG
呼び出し元で構造体配列のポインタを保持して、そのポインタのアドレスを渡して
呼び出し先で新たに領域確保したいのですが、単純型だと出来るのですけど
構造体になった途端同じコード使い回しているのに出来なくなってしまいます
どなたかアドバイスを宜しくお願いします
0146デフォルトの名無しさんNGNG
>>145
?
0147デフォルトの名無しさんNGNG
ダブルポインタで渡さなければならないとこでポインタ渡ししているとか。
0148デフォルトの名無しさんNGNG
>>147
void hoge(WORD **p,DWORD s,DWORD a);
main()
{
 WORD *p=NULL;
 hoge(&p,i*j,j);
}
void hage(VERTEX **vertexdat,DWORD *dwNumVertices,DWORD div,
     FLOAT fTheta0,FLOAT fTheta1,POINT Center,FLOAT r);
main()
{
 VERTEX *vertdat=NULL;
 hage(&vertdat,&dwnum,4,
    D3DXToRadian(30.f)*i,D3DXToRadian(30.f)*(i+1),cntr,20.f);
}
上は出来ても下は失敗するのですが、?
0149デフォルトの名無しさんNGNG
コンパイルエラー?それとも論理エラーっぽいの?
0150デフォルトの名無しさんNGNG
それとDirect3D使っているみたいだから、hage内で想定しない
HRESULTが返ってきているためのエラーかもね。
0151デフォルトの名無しさんNGNG
コンパイルエラーというか、newやらdelete[]が失敗して落ちます
VC6のメモリウィンドウで*vertexdatが違うところを指していて
*vertexdat+0が実際の場所を指しています
これはメモリウィンドウのせいかもしれませんが、気になります
0152147=149=150 ◆o615kFadeE NGNG
>newやらdelete[]
new と delete []をペアでつかっているの?new[]じゃなくて。
0153デフォルトの名無しさんNGNG
>>152
new[]です間違えました御免なさい


http://jp.y42.briefcase.yahoo.co.jp/bc/nas6_2001/lst?&.dir=/Projects&.src=bc&.view=l&.last=1
うpしたので心優しく時間もある方見てみてください
行数はあまりないので宜しくお願いします
0154デフォルトの名無しさんNGNG
>>153
パスワード求められるよ?
0155デフォルトの名無しさんNGNG
>>153
あれゲストでは入れませんか?ちょっと待っててください
0156デフォルトの名無しさんNGNG
読みにくいと思った。終わり。
0157デフォルトの名無しさんNGNG
>>153
サーバーがビジーで開けんよ?
0158デフォルトの名無しさんNGNG
すいません、どなたか教えてください。
もう行き詰って…

例えば手元に100個のデータファイルがあるとします。
その100個のデータファイルひとつひとつに
同じフィルタをかけたいのです。
そこで

ifstream in(****, ios::in | ios::binary);
ofstream out(####, ios::out );
filter();

こんな感じのプログラムをつくっているのですが、
この****と####をファイルごとに変えたいのです。
どのようにすればよいでしょうか?
argvで100個ファイル名を打ち込むとか無しで。
自動的に行いたいのです。
1000個になってもファイル数だけ指定するだけで
簡単に処理できるようにしたいです。

よろしくお願いします。
0159153NGNG
ブラウザのアドレスのとこに貼り付ければいけるはずですが、
0160153NGNG
>>158
ファイル検索するか、ファイル名に規則性持たせたりすればいいのでは?
0161158NGNG
>>160
レスありがとうございます。

ファイル名に規則性をもたせることはできます。
自分の勉強不足かもしれませんが、
ifsteramの****部分には例えば"test1.dat"というような
きちんとしたファイル名を指定をしないと読み込めないみたいなのです。
そうするとtest2.dat、test3.dat、test4.dat…test100.datと続くとき、
どうループをまわせばよいのかと。

0162153NGNG
strcpy(str,"test");
sprintf(s,"%d.dat",i);
strcat(str,s);
じゃ駄目ですか
0163158NGNG
>>162
ありがとうございます。
ちょっとやってみます。
0164デフォルトの名無しさんNGNG
for (int n = 0; n < max_num; ++n)
{
std::string s("file");
s += boost::lexical_cast<std::string>(n);
s += ".???";
ifstream ifs(s.c_str());
...
0165158NGNG
>>164
ありがとうございます!
これもまたやってみます。
C++初心者なのでちょっと理解するのが大変そうですが。

>>163
sprintf、これは思いつかなかったです。
0166157NGNG
>>159 クリックで行けたよ。
 
このコードを見る限りでは new は不要に思える。
WORD w[8][8];
for (int x = 0; x < 8; ++x)
 for (int y = 0; y < 8; ++y)
  w[x][y] = x * 8 + y;
でいいんじゃない。
 
どのような結果を期待していたのかが解らないので、これ以上はなんとも言えない。
0167153NGNG
うわかっちょいいあちきは元々c屋なもんでへっぽこですな
0168153NGNG
>>157
hageの方が実際の実装予定関数でそっちは可変長で実装するので
newで確保->newでサイズ増やして再確保->・・・
が必要なのです
で多分hageはメモリエラーしてそうな気がしてきました
(グローバルにしても落ちたので)
がんばってバグ取りします
レスありがとうございました
0169157NGNG
>>168
そんな貴方に std::vector。
typedef vector<VERTEX> Vertices;
Vertices v(n)  n = 要素数
v.resieze(newsize)  拡大(縮小にも使える)
v[index].x 要素アクセス
0170158NGNG
>>163,164
できました〜
ありがとうございました。
0171153NGNG
>>169
ありがとうございます
やってみまつ
0172デフォルトの名無しさんNGNG
std::valarray<double> va;
0173デフォルトの名無しさんNGNG
>>172 VERTEXにはチョト剥いてない…
0174147=149=150 ◆o615kFadeE NGNG
>>153
VERTEX *p=new VERTEX[*dwNumVertices+div*4];//VERTEX[*dwNumVertices+div];

又は、

*vertexdat=p;
for(i=0;i<= *dwNumVertices;i++)//for(i=0;i<div;i++)
{

という訳で書きこみオーバーによるdelete []
の例外発生。
0175デフォルトの名無しさんNGNG
C++では、eof()の発生時期がCと違うようなのですが。

ifstream stream("filename", ios::binary);

while (!stream.eof()) {
処理1
stream.read(reinterpret_cast<char*>(&rec), SIZ);
}

とやると、一番最後のレコードを2回読んでしまいます。
どうすれば一番最後のレコードを1回しか読まないようにできますか?
0176デフォルトの名無しさんNGNG
whie (1)
{
// ...
if (!stream.read(...))
break;
}
0177デフォルトの名無しさんNGNG
>>176
ありがとうございます。ということは、レコードがない所でreadを
実行しないとEOFが検出されないようですね。助かりました。
0178デフォルトの名無しさんNGNG
>175
おいおい。
EOF の発生条件は C の fread() や fgets() 等でも同じでないかい?
ファイルの終端を超えて読もうとしない限り EOF にならない。
0179デフォルトの名無しさんNGNG
EOFの発生条件は
×ファイルポインタがファイルの終端に到達した
○ファイルの終端を越えてreadしようとした
でOKですか?
0180デフォルトの名無しさんNGNG
>>178
うむそうですね。fread()などはファイルの終端に達していても
読み込んだバイト数を返しますからね。

>>179
そのようです。
0181デフォルトの名無しさんNGNG
既存のcppソースに、ダイアログからのテキスト入力を追加したいと思っています。
〜なんとか.rc というファイルができて、レイアウトなどはできたようなのですが、
これを既存のソースからどう呼び出せばいいのか、わかりません。

サンプルが載っているページ等でもいいので、どなたかヒント戴けませんでしょうか。
(ダイアログの使い方は、VBで言うところのInputBoxみたいな感じです。text入力欄とok、cansel)
0182デフォルトの名無しさんNGNG
>>181
★初心者にVisual C++を教えるスレ★
http://pc3.2ch.net/test/read.cgi/tech/1030985362/l50
VisualC 相談室【8】
http://pc3.2ch.net/test/read.cgi/tech/1022499000/l50
0183182NGNG
しまった、VC++ とは限らないか。
こっちね。

Windows Programing for C/C++(Not MFC)
http://pc3.2ch.net/test/read.cgi/tech/1018239290/l50
0184デフォルトの名無しさんNGNG
      ∧_∧      ∧_∧
     _( ´∀`)    (´∀` )
  三(⌒),    ノ⊃    ( >>1 .)   糞スレは  
     ̄/ /)  )      | |  |
    . 〈_)\_)      (__(___)
         ∧_∧  .∧_∧
         (  ´∀) (´∀` )
       ≡≡三 三ニ⌒) >>1 .)    立てるなって
        /  /)  )  ̄.| |  |
        〈__)__)  (__(___)
           ∧_∧  ,__ ∧_∧
          (    ´)ノ ):;:;)∀`)
          /    ̄,ノ'' >>1 . )   言ってるだろうが
         C   /~ / /   /
         /   / 〉 (__(__./
         \__)\)
                      ヽ l //
            ∧_∧(⌒) ―― ☆ ―――
            (    ) /|l  // | ヽ   ヴォケがーー!
           (/     ノl|ll / / |  ヽ
            (O  ノ 彡''   /  .|
            /  ./ 〉
            \__)_)
0185デフォルトの名無しさんNGNG
やい 184、漏れの白星パンチを無闇に振りまくな。
0186デフォルトの名無しさんNGNG
この業界入って、何の資格も取らずに40歳までいっちゃうとリストラ対象になるってホントですか?
0187デフォルトの名無しさんNGNG
>>186
あちこちこぴぺすんな!
0188名無しさんNGNG
マネジメント能力があれば飛ばされはしないだろう。
いつまでも古いコードを吐いてもらっちゃ困るしな。
0189デフォルトの名無しさんNGNG
ぬるぽのチェックは、
if (nanikano_pointer)
{
// not null
}
else
{
// nurupo
}
でいいの?
あと、NULLは、<iostream>に定義されてるの?
0190デフォルトの名無しさんNGNG
>>189
NULLを0と断定するのは危険。

とでも言っておこう。
0191デフォルトの名無しさんNGNG
>>189null pointerチェックはそれでいい。
規格でnull pointerは「偽」とみなされることになってる。
0192デフォルトの名無しさんNGNG
>>191
へぇ、つまんない・・・。
0193デフォルトの名無しさんNGNG
char* null_po()
{ return 0; } // ok.
0194デフォルトの名無しさんNGNG
サブクラスのコンストラクタでスーパークラスの関数を
必ず呼ぶようにするのは、どうするのです?
<pre>
class A {
A() {
いろいろ処理
}
void Init( int i ) {
いろいろ処理
}
}

class B : public A {
B() {
いろいろ処理
  Init( 100 ); <----これを必ず書いてはしい
}
}
</pre>
ドキュメントに書いとく事しかできないのですかな。
0195デフォルトの名無しさんNGNG
class A
{
A(int n);
};
0196デフォルトの名無しさんNGNG
コンストラクタで済ますのが理想だねえ
ダメなら、デバッグビルドのときはフラグでInitを呼んだかチェックするように
するとか・・・
0197デフォルトの名無しさんNGNG
NULLは<cstddef>だろ。ていうか使うな。
0198デフォルトの名無しさんNGNG
C++って文法が汚いんですか?
オーバーロード機能のせいですか?
0199 ◆hMJAPH9PWA NGNG
>>198
オーバーロードは汚いとは思わないけど、
lambdaやinterfaceが無いから汚くせざるを得ない、って事はあるかもね。
0200デフォルトの名無しさんNGNG
コンストラクタで
そのクラスのメンバ関数を呼び出しても
基本的にはOKと思ってるんですが、
問題になる場合はどんな時なんでしょうか?
0201デフォルトの名無しさんNGNG
メンバ関数が別のクラスのメンバ関数を呼んでいて、
そこでそのクラスのコンストラクタが呼び出されると、、
0202デフォルトの名無しさんNGNG
女子生徒「先生、私、ここの公式、どうしても暗記できないんです。」
先生 「頑張れば、だんだん、覚えられるようになるよ。」
女子生徒「で、でも・・・。先生は全部暗記してるんですか?」
先生 「もちろん。受験生のときに、なんとか暗記したよ。」
女子生徒「いいなぁ。先生の脳みそ、わたしにも分けてほしいな。」
先生 「ははは。脳みそは無理だけど僕の遺伝子だったらあげてもいいよ。
僕の遺伝子には、今まで勉強してきたことがすべて記憶されてるんだよ」
これがあれば、簡単に合格できるかもよ。」
女子生徒「え〜。それ、欲しい、欲しい。どうすれば、先生の遺伝子もらえるの?」
先生 「そうか・・・。じゃあ、スカートとルーズソックスはそのままでいいから
パンティをぬいでごらん。」
女子生徒「はい、脱ぎました。早く、先生の優秀な遺伝子をください。」
先生 「そんなにせかさなくても、たっぷり分けてあげるから。
それじゃあ、始めるよ。ハァハァ・・・。」
女子生徒「あっ・・・。先生・・・。も、もっと・・・。」
0203デフォルトの名無しさんNGNG
C++で、Javaの
(Cast)Class.forName("className").newInstance();
ってどうやるの?
0204デフォルトの名無しさんNGNG
>>203
それをやるとどうなるのかをまずかけ。
C++を知っている奴がみんなJAVAを知っているわけじゃないだろ。
0205デフォルトの名無しさんNGNG
>>203
http://www.garret.ru/~knizhnik/cppreflection/docs/reflect.html
を突っ込む。
0206デフォルトの名無しさんNGNG
>>200
そのクラスではまだ実装されてない純粋仮想関数を呼び出すとヌルポで落ちる
0207デフォルトの名無しさんNGNG
>>205
感動した!
0208デフォルトの名無しさんNGNG
>>202
感動した!
0209デフォルトの名無しさんNGNG
>>202
ボッキサゲ!
0210デフォルトの名無しさんNGNG
コンパイラによってデフォルトのコピーコンストラクタと代入演算子が
生成される条件(あるいはされない条件)について判りやすく説明しているサイトってないですか?
0211デフォルトの名無しさんNGNG
コンパイラに依存するんだっけ?
0212デフォルトの名無しさんNGNG
sinaidesu
0213デフォルトの名無しさんNGNG
>>210
される条件。

 ・(コピーコンストラクタ|代入演算子)が宣言されていない
 ・全てのメンバ変数がそのクラスのスコープで(コピーコンストラクト可能|代入可能)
 ・派生元が、そのクラスのスコープで(コピーコンストラクト可能|代入可能)

以上。
0214デフォルトの名無しさんNGNG
char aho[10000000]に一括してある数でXORかける関数ありませんか?
なかったらforでチマチマやってくしかないでしょうか。
0215デフォルトの名無しさんNGNG
標準ライブラリにはないですね。

チマチマやる関数を作りましょう。
0216デフォルトの名無しさんNGNG
わかりました。
0217デフォルトの名無しさんNGNG
>>214
namespace {
char Xor( char c, char m ) { return c ^ m; }
}

int main(void) {
static const char aru_kazu = 10;
char* aho = new char[10000000];
std::transform( aho, &(aho[10000000]), aho, std::bind2nd( std::ptr_fun(Xor), aru_kazu ) );
}
・・・嘘です。
0218デフォルトの名無しさんNGNG
struct Xor : public std::unary_function<char,char> {
explicit Xor(int m) : m_m(m) {}
result_type operator()(argument_type c) { return c ^ m_m; }
private:
char m_m;
};

...

Xor f(aru_kazu);
std::transform(aho, &(aho[10000000]), aho, f);

のほうがだいぶ速いのではなかろうか。

>・・・嘘です。
同じく。
0219デフォルトの名無しさんNGNG
オナニーショウは終わりですか?
0220デフォルトの名無しさんNGNG
多分あと2つくらい。
0221デフォルトの名無しさんNGNG
真のC++プログラマーなら、C のキャスト 使わずに
static_cast dynamic_cast const_cast とか、使うべきですか?

これを、使うことによって、メリットってあるのかな?
人のソースとか、読んでると、ほとんどの人が、Cキャスト。
0222デフォルトの名無しさんNGNG
>>221
仕事ならば、そこのコーディング規約に従う。

趣味あるいはコーディング規約を作る立場ならば、
C++キャストが適した場所には必ず使う。
0223デフォルトの名無しさんNGNG
>>221
漏れはCキャストは使わないが、コーディング標準を決めるときは

・dynamic_castは代用できないから使わざるを得ない
・(constをどうしてもはずさなければならないならそのようにしてもいいが、Cキャストではなく)const_castを使え
・あとは好きにしたら?

くらいにしている。逆に、数値計算っぽい箇所でのstatic_cast強要は少し
可愛そうかな(タイプ数的に)、とも思う。

0224223NGNG
なお、生粋のCプログラマさんには、
・type safetyのありがたさ
・const objectのありがたさ
をわかってもらった上で、223の規約を適用します。

放っておくと無意味なキャスト、無意味なconstはずしで積み上げてきた各種の保証がぼろぼろになるから...


0225デフォルトの名無しさんNGNG
221はどーしてんのYO
0226デフォルトの名無しさんNGNG
どうして誰も >>190 に突っ込まないんだ?
0227153NGNG
>174
亀レススマソ
デバグしていただいてありがとうございました
0228デフォルトの名無しさんNGNG
189が正しい、という突っ込みが入ったからそれでいいんじゃないの?

0229デフォルトの名無しさんNGNG
キャストoperatorで暗黙の変換が
予想通りに働かないのですが、なぜなんでしょうか?
struct to
{
const char* ptr;
to(const char* c){ptr = c;}
operator const char* (){return ptr;}
const char* get(){return ptr;}
};
void print(to a)
{
std::cout << a;//const void*が呼ばれてる!!//address
std::cout << (const char*) a;//正しい//aa
std::cout << a.get();//正しい//aa
std::string s = a;
std::cout << s;//これは正しい//aa
}
int main()
{
print("aa");
}
0230デフォルトの名無しさんNGNG
g++の3.2ではprint関数の最初の出力は問題ありませんが?
あと、std::string s = a;は s(a) ; とせんとコンパイルでけん。

0231229NGNG
>>230
サンクス。
やっぱ、VC++.NETのバグの気がしてきた。
0232デフォルトの名無しさんNGNG
std::string::string(const char*)があって
to::operator const char*() があるからって

暗黙に
std::string s = a.operator const char*();
してくれるんだっけ?
0233デフォルトの名無しさんNGNG
規格の裏づけがないようなコードは書かずに、素直に明示キャストした方が
いいような。
229 に関しては、ostream への operator<< を実装すべきだ。
0234デフォルトの名無しさんNGNG
struct to に複数のcast operatorがあって
coutが複数のoperator overloadがあると
どれが選ばれるか分からんような...
0235デフォルトの名無しさんNGNG
>>234
BCCだと型を明示しろっつーコンパイルエラーが出る
確か「cout << static_cast<目的の型>(to)」で問題ないはず
0236デフォルトの名無しさんNGNG
>>234
一体何で混乱する?
何も考えずに operator<< が呼ばれる。
その前に明示的に型キャストを指定していれば別だ。

# 漏れ的には、229 の std::cout << a; で、何で to::operator const char* () と、
# それに続けて ostream::operator<<(const void *) が呼ばれるのか分からん。
# まあ VC のバグなんだろうな・・・。

あと、ややどうでもいいか゜ 229 が何で std::endl をつけないのか不思議だ。
0237236NGNG
すまそ、234 の意味を取り違えてた。
逝ってきます・・・
0238デフォルトの名無しさんNGNG
>>236
> 一体何で混乱する?
> 何も考えずに operator<< が呼ばれる。

どの operator<< が呼ばれるの?
具体的な宣言まで一緒に書いてみてよ。
0239237NGNG
>>238
いやすまん、223 から続けて 234 を読んで混乱したみたいだ・・・
忘れてくれ。
0240238NGNG
アイヨ>>239

ついでだから
 struct to a;
 printf("%d", a);
とやるとどうなるんだっけ、とか混乱してみる。
0241239NGNG
>>240
やってみた。
単に、a のアドレスが 10 進で出るみたいだ。
a.ptr と同じアドレスだからやや紛らわしそう。
0242241NGNG
つまり、printf(const char *, ...) だから型キャストなんて発生しない
という事かな。
0243デフォルトの名無しさんNGNG
>>221
C風キャストに使う理由が見出せない。
C++のキャストの方が意図・区別がし易い。
0244デフォルトの名無しさんNGNG
C++では()を使ったキャストは基本的にご法度?
0245デフォルトの名無しさんNGNG
yes
0246デフォルトの名無しさんNGNG
なるほど。さんくす個
0247デフォルトの名無しさんNGNG
ていうかconst外しなんてするべきではないよな。
0248デフォルトの名無しさんNGNG
221の話題だな
0249デフォルトの名無しさんNGNG
const外しが発生するのはそもそもインターフェイス設計が
間違っていると思います。
0250デフォルトの名無しさんNGNG
>>249
厨房と爺はメソッドをconstにしないし、引数をconstにしないんだからしょうがない。
0251デフォルトの名無しさんNGNG
古いCライブラリを実装してたら外さなければならない状況がありました。
0252デフォルトの名無しさんNGNG
>>241
dobleとintの間の変換をしょっちゅうやるような場所だったら、
Cキャストの方が楽だし、そういう場面では危険も少ないとは
思う。それ以外なら問答無用でC++キャストにするけど。
0253241NGNG
>>252
明後日の方向にレスなさってますか?
つーか、「C キャストの方が楽」 って・・・タイプ数が少ないって事?
0254デフォルトの名無しさんNGNG
タイプ量云々以外にC風キャストを使う意味ってあるんですか?
0255デフォルトの名無しさんNGNG
不定…
未定義…
(・∀・)イクナイ!
0256デフォルトの名無しさんNGNG
どうでもいいけど、クラスのメンバ変数の名前ってどうしてる?

1, 接頭辞m_をつける
2, 接尾辞_をつける
3, んなもんつけない(で、メンバ関数の引数とかぶるときはthis->をつかう)

俺は2か3で迷ってるんだけど…。(最近は2)
1は使ったことない。
0257デフォルトの名無しさんNGNG
>>256
漏れは、自分だけで書くなら常に 3。
共同の場合は相談に応じて。
仕事の場合はしょうがないから規約に従う。
0258デフォルトの名無しさんNGNG
自分だけで書くコードは最近は3。
人に見せるときは1か3、だなぁ。接尾辞 _ って
目立たないので、あんまり付ける意味が感じられなくて。
0259デフォルトの名無しさんNGNG
仕事のときにはそこの規約にしたがう。

そうでない場合は気分によるな・・・どれでも別に構わないし
0260デフォルトの名無しさんNGNG
そろぞろ「接頭辞をつける奴はアフォ」発言が来るぞ
0261デフォルトの名無しさんNGNG
Say Prefix
0262デフォルトの名無しさんNGNG
最近2の「接尾辞_をつける」パターンをよく見る。
いつごろから使われだしたんだろ。
0263デフォルトの名無しさんNGNG
>>262
漏れの場合は Exceptional C++ を読んでから。
0264デフォルトの名無しさんNGNG
>>263
なんか理由かいてあるの?
0265デフォルトの名無しさんNGNG
「クラス名::メンバ名」って人はさすがにいないのかな。
0266263NGNG
「接[頭]辞 _ は使ってはいけない」 理由が書いあるけど、
接尾辞_については特に。「個人的なおすすめ」とだけ。
あの本好きなので習ってみただけっす。

>>265
それはstatic変数用にとっておく。
0267デフォルトの名無しさんNGNG
クラスのメンバに接頭・接尾語付けないヤツはアホ

クラスメンバint aがあったとして
Class::GetA() { return a; }
Class::SetA(const int& a) { this->a = a; }
とかやってたら更にアホ

Class::a() { return m_a; }
Class::a(const int& a) { m_a = a; }
にしろ
0268デフォルトの名無しさんNGNG
とりあえず理由を述べないヤツはアホ
0269名無しさんNGNG
クラスメンバにaなんて短い名称をつけるやつがアホ。
クラスにするくらいなんだから、意味づけしろよ。
0270デフォルトの名無しさんNGNG
ただの例文に対してそんなところにしか突っ込めない奴が一番アホ。
終了。
0271デフォルトの名無しさんNGNG
268 を無視して 269 だけ煽り返す奴は宇宙一 DQN
しかも 269 は 「一番アホ」 と表現する程でもない
0272271NGNG
失礼。
269 は 「一番アホ」 と表現する程でもないどころか、言っている内容は
至極まともだ。
ただの揚げ足取で、269 の本論は全く覆せていない。

つーか例示にしても a じゃなくて Something とかにしとけ。
0273デフォルトの名無しさんNGNG


   2 6 7 必 死 だ な


0274デフォルトの名無しさんNGNG
「関数の型を書かないやつはアホ」とかくだらないことどんどん書いててくださいよ
0275デフォルトの名無しさんNGNG
ってか、267 の示した前者と後者も、大した違いは無い。
と言うより、本当のプロパティのように扱えない以上、Get/Set は
つけるべきとまでは言わんが、そうしても良いと思うがどうよ?
0276デフォルトの名無しさんNGNG
アホキター!!!
0277デフォルトの名無しさんNGNG
>>276
>>276
0278デフォルトの名無しさんNGNG
>>275
正直、コーディング規約が統一されてればどっちでも良い。それより int を
渡すのに、わざわざ参照使ってる方が気になる(w

(まー、今時のコンパイラなら最適化かければ結果的には変わらんだろうが)
0279デフォルトの名無しさんNGNG
>>278
Class::GetA() const、になっていないのも気になって夜も眠れない。
0280デフォルトの名無しさんNGNG
そろそろ「prefixをつける奴はKIMOI」発言が来るぞ
0281デフォルトの名無しさんNGNG
JavaHouse方面で、"m_ "を "余計なもの"と呼称する祭りが以前は定期的に開催されていたと
記憶していますが、その際の叩く理由は何でしたっけ?C++には関係なし?

0282デフォルトの名無しさんNGNG
要約すると、267 が一番アホという事か。
0283デフォルトの名無しさんNGNG
prefixをつける奴はKIMOI
0284デフォルトの名無しさんNGNG
suffixをつける奴はKIMORIN
0285デフォルトの名無しさんNGNG
>>282
自明
0286デフォルトの名無しさんNGNG
なんで >>260 で完璧に予言されてるのに、普通にルーティンワークしてるんだよ(藁
0287デフォルトの名無しさんNGNG
ニチャソダカラ
0288デフォルトの名無しさんNGNG
Cマガジンが毎年C言語入門講座をやるのと同じでは?
0289デフォルトの名無しさんNGNG
>>286
それがルーティンワークというものだ
0290デフォルトの名無しさんNGNG
自己言及的テンプレートのようで(・A・)イイ!
0291デフォルトの名無しさんNGNG
>290 カオガイクナイ
0292256NGNG
なんか凄いことになってるな…。。。
接尾辞_はタイプ数が減るから好き。
this->はちょっと長い。
m_はそもそもなんか格好悪い。mってマゾですか(藁
0293デフォルトの名無しさんNGNG
>>292
メンバです。アホですか?
0294デフォルトの名無しさんNGNG
「アフォ」「キモイ」「格好悪い」

キター!!!!
0295デフォルトの名無しさんNGNG
class A
{
 int a;
public:
 int GetA() { return a; }
 void SetA(int a) { this->a = a; }
};
とかやってるヤツは低脳

class A { public: int a; };
にしろ
0296デフォルトの名無しさんNGNG
>>295
内部で保存していたいデータと外から見えるようにしたいデータが著しく違う場合は?

たとえば、日付は内部では整数型で管理した方が都合が良いが外には文字列型で見せたいとか。
0297デフォルトの名無しさんNGNG
お互いがお互いをメンバに持ち合うクラスって作れますか?

class A{
B b;
};

class B{
A a;
};

みたいな
0298デフォルトの名無しさんNGNG
>>295
それなら構造体にするのが普通だと思うんだが
0299デフォルトの名無しさんNGNG
>>297
ポインタだったら可能。

class A {
B *b;
}

class B {
A *a;
}
0300256NGNG
>>293
ネタにマジレスされたよ(T__T)
0301デフォルトの名無しさんNGNG
A *a = new A();
a->b->a->b->a->b->a = a;

わけわかんねえ…
0302デフォルトの名無しさんNGNG
>>301
リンクリストとかツリーとかだとそういう構造になるけど…
0303デフォルトの名無しさんNGNG
メンバ変数がset/get関数でしか参照されない場合、
その設計は100%誤りである。
0304デフォルトの名無しさんNGNG
>>302
ツリーなら2つクラス用意せんでもいいんでないかい?
0305デフォルトの名無しさんNGNG
>>303
定義を述べるだけなら誰でもできる。
根拠もついでに示してくれ。
0306デフォルトの名無しさんNGNG
>>301
途中のでNULLポインタが混ざっててエラーを起こす罠
0307デフォルトの名無しさんNGNG
>>304
> ツリーなら2つクラス用意せんでもいいんでないかい?

「そういう構造になる」というのは、データが再帰的に
連なるって程度のことで、深い意味は無いです…

(ツリーだとノードとリーフで複数のクラスを使うことがよくあるとは思うけど)
0308デフォルトの名無しさんNGNG
C++規格書の日本語版はJISから手に入りますか?
0309デフォルトの名無しさんNGNG
C++をやりたいのですが、Cの知識もないときついでしょうか?
0310デフォルトの名無しさんNGNG
いいえ。
0311デフォルトの名無しさんNGNG

あるクラスを定義して、
それが参照されたときに必ず、
ある関数が先に呼ばれる、って事を実装したいです。

class CLASS_BASE
{
  public: void f_0(){ /* こっちを呼んだ時でも、 */ }
};

class CLASS : public CLASS_BASE
{
  public: void f_1(){ /* こっちを呼んだ時でも、 */ }
  public: void f_2(){ /* これが、いつも先に必ず呼ばれる */ }
};

f_1 は内部で f_2 を呼べばいいのですが、
f_0 は既存の物なので、書き換えるわけにはいきません。
関数が1つ2つならオーバーライドですみますが、
関数はたくさんあるので巧く書けません。

どなたか、エレガントな方法をお教え下さい。


0312デフォルトの名無しさんNGNG
>>309
┌──────────┐
│  Cの知識 ┌────┼───────┐
|       .|. . .   |. . .C++.の知識.|
└─────┼────┘          . |
       .  └────────────┘

かぶる領域はある。
0313309NGNG
>>310>>312
ありがとうございました
0314デフォルトの名無しさんNGNG
被るというか抱合してやってるというか。
0315311NGNG
だれか>>311プリーズ。
0316デフォルトの名無しさんNGNG
#DEFINE DECLARE_INHERITE_HOOK(base, func, hook)\
void (func)(){\
(hook)(); \
(base)::func();\
}
とでもしとけ。
0317デフォルトの名無しさんNGNG
CLASSでvirtual void f_0(){ f_2(); p_q(); }は…
だめだな当然(-_-)
0318デフォルトの名無しさんNGNG
fps = 1000.0f / (timeGetTime() - prev_time);
だとちゃんと動くのに

fps = 1000 / (timeGetTime() - prev_time);
がゼロ除算エラーになるのは何故ですか・・・?
0319デフォルトの名無しさんNGNG
class CA{
public:
int ma;
CA():ma(NULL){}
void thread(void){::_beginthread(func,0,(void*)this);}

static void func(void* p){
((CA*)p)->fff();
::_endthread();}

void fff(void){cout<<ma<<endl;}
};
void main(void)
{
CA ca;
ca.thread();
}
を実行すると24と表示される。ナゼ・・・???
0320デフォルトの名無しさんNGNG

画面に0〜99の数字を1秒間隔で表示。1〜9で改行、するプログラムを教えてください
図にするとこんな感じです

1 2 3 4 5 6 7 8 9
10 11 12〜〜〜〜〜〜〜〜〜19
20〜〜〜〜〜〜省略〜〜〜〜〜〜
〜〜〜〜〜〜〜〜〜〜〜〜〜〜99

解らねえ・・・
0321デフォルトの名無しさんNGNG
counter % 10 == 0 の時、'\n' 挿入したら。
コンソールだったらの話だけど。
0322デフォルトの名無しさんNGNG
for(i=1;i<=100;++i) {
if(i%10==0) putchar('\n');
printf("%d ", i);
sleep(1);
}
0323デフォルトの名無しさんNGNG
>>320
マルチ野郎には何も教えてやらねえぞ。
0324デフォルトの名無しさんNGNG
>>320
boost::timer t1
for(i = 0; i < 10; i++) {
 for(j = 1; j < 10; j++) {
  cout << i*10+j;
  while(t1.elapsed() >= 1.0f) Sleep(1);
 }
 cout << endl;
}
0325デフォルトの名無しさんNGNG
>>324
for(i = 0; i < 10; i++) {
 for(j = 1; j < 10; j++) {
  cout << i*10+j;
  boost::timer t1;
  while(t1.elapsed() >= 1.0f) Sleep(1);
 }
 cout << endl;
}
0326デフォルトの名無しさんNGNG
めちゃくちゃだな(藁

>>322
要求全然満たしてないぞ
>>320は1〜99と言っている
しかもsleepの分解能は秒か?

>>325
whileの不等号式が逆だろ
0327デフォルトの名無しさんNGNG
>326
sleepの分解能は秒である、と書いてあるが。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/sleep.3.html
0328デフォルトの名無しさんNGNG
>>326
> しかもsleepの分解能は秒か?

unix系は秒単位じゃなかったっけ?
0329デフォルトの名無しさんNGNG
>>320
を見ると、最初の行は全角で、後の行は半角だ。
なかなかの引っ掛け問題だな
0330デフォルトの名無しさんNGNG
正解者ゼロか。しょせん2ちゃんねらーはこの程度だな。
0331デフォルトの名無しさんNGNG
>>320
を見ると文章には0〜99と書いているが、
表示例には、
最初の行が1〜9で、その次の行からは10〜19、20〜29・・・
になっている。
これも引っ掛けか?
0332デフォルトの名無しさんNGNG
ソースファイル中にちりばめられた
「FileHandle << "なんたらかんたら" << endl;」(FileHandleはofstreamです)
を、プリプロセッサマクロによって使う使わないの切り替えをする事は可能ですか?

例えば普通は
#if defined(OUTPUT_LOG)
 FileHandle << "なんたらかんたら" << endl;
#endif
みたいにすると思うんですが、その量が膨大なので
#define FileHandleで乗っ取って(?)処理しちゃうような
何か上手い方法はないかと思案中なんですが・・・
0333デフォルトの名無しさんNGNG
FileHandleのクラスを切り替えるようにすればいいのでは。
0334デフォルトの名無しさんNGNG
FileHandle を \dev\nul とか /dev/null とか…
0335デフォルトの名無しさんNGNG
operator <<
の定義を直接、書き換えてしまう。
0336デフォルトの名無しさんNGNG
ウムム・・・
FileHandle(厳密にはofstreamのラッパークラス)はユーザーにも公開していて
ユーザーが明示的に呼び出した場合は通常通りの操作をしたいのです

というのも、あるサブシステムを作っていて
そのエラーログを吐き出すのにFileHandleを使っているのですが
ユーザーから「標準のエラーログは邪魔くさいから有り無し変えられるようにして」と
仕様変更が入りまして・・・今更言うなよ・・・といったようなワケでして・・・
そのために1個グローバルなフラグを増やすのもアレですし

>>333氏の発想でもうちょっと考えてみます
0337デフォルトの名無しさんNGNG
>>319
このままだとコンパイルすら通らないのでは。
fff() は CA::fff()
の間違いだとして…。分からん!
0338デフォルトの名無しさんNGNG
>>337
ヨクヨメ
まぁ良く読んでもわからんがw
0339デフォルトの名無しさんNGNG
すいません、どなたか>>318わかりませんか・・・?
0340デフォルトの名無しさんNGNG
>>339
timeGetTime() - prev_time
がゼロになってるからじゃないの?
0341デフォルトの名無しさんNGNG
>>339
本気でわからんか?

>>339
> fps = 1000.0f / (timeGetTime() - prev_time);
> だとちゃんと動くのに

本当にちゃんと動いてるとお思いか?

> fps = 1000 / (timeGetTime() - prev_time);
> がゼロ除算エラーになるのは何故ですか・・・?

timeGetTime() と prev_time はどっちも多分 DWORD 型なんだろう?
timeGetTime() == prev_time の時、どうなるか考えてみろ。
まんまゼロ除算だろうが。

ちなみに、1000.0f の時に落ちないのは、浮動小数点演算の場合にゼロ除算を行った場合、
整数助産の場合と違って一般保護例外にならず、#INF 値を返すからだ。
#INF 値は整数に代入すると、0 になる。
だから、見かけ上動いてるように見える。
fps の型を double にして、std::cout に投げてみろ。
0342341NGNG
整数助産だって・・・カコワルイ

追記。
浮動小数点演算のゼロ除算が一般保護例外にならないのは、浮動小数点数は
#INF 値つまり無限大を表現できるからだ。
だから整数の場合と違ってわざわざ一般保護例外にする必要が無い。
0343デフォルトの名無しさんNGNG
余計なツッコミだけんども
win32環境ではゼロ除算と一般保護例外は別だよ。
他もそうだと思うけど。
0344デフォルトの名無しさんNGNG
>>341
1000.0fだとちゃんと動きます
デバッガでwatchしてみると

1000.0fの場合→正しいFPS値
1000の場合→unsigned int 0(0x0)

になります
もちろん初回計算時はprev_time = timeGetTime() - 10;
などとしてゼロ除算にならないように注意しています

更に、FPSを計った後Sleep(1)しているので
OSが仕様を踏襲している限り
(timeGetTime() - prev_time)がゼロになることはありえません
0345デフォルトの名無しさんNGNG
ちなみに環境はWin98SE/BCC5.5.1です
0346デフォルトの名無しさんNGNG
>>344
なら
DWORD tmp;
tmp = timeGetTime() - prev_time;
fps = 1000 / tmp;
とでもしとけ。
0347デフォルトの名無しさんNGNG
>>344
それって・・・
それって・・・
エラーが発生してるんじゃなくて、単に整数演算の丸めで 0 になってるだけじゃ・・・
timeGetTime() - prev_time > 1000 の時どうなるか考えてみろ。
0348デフォルトの名無しさんNGNG
Sleepの精度は結構悪かったような記憶があるが。
0349ちなみにソースの一部NGNG
メインループで、while { 内部処理; Render(); }としていて、Render()の実装が

void cEngine::Render()
{
 const static DWORD fps_limit = 60;
 static DWORD prev_time = (timeGetTime() - 10);
 fps = 1000.0f / (timeGetTime() - prev_time);
 // 内部処理が間に合っていなければコマ落ちさせる
 if (fps < fps_limit) {
  prev_time = timeGetTime();
  return;
 }
 else {
  // Sleepの誤差が5msとして、余った時間を計算する
  DWORD over_time = (1000.0f / fps_limit) - (timeGetTime() - prev_time) - 5;
  if (over_time > 0) Sleep(over_time);
  while (fps >= fps_limit) fps = 1000.0f / (timeGetTime() - prev_time);
 }
 prev_time = timeGetTime();
 lpD3DDevice->Clear(0, NULL, D3DCLEAR_TARGET, D3DCOLOR_XRGB( 0, 0, 0 ), 1.0f, 0);
 lpD3DDevice->BeginScene();
/*いろいろ*/
 lpD3DDevice->EndScene();
 lpD3DDevice->Present (NULL, NULL, NULL, NULL);
 Sleep(1);
}

です
0350デフォルトの名無しさんNGNG
>>347
え・・・?
0351デフォルトの名無しさんNGNG
>>344
>更に、FPSを計った後Sleep(1)しているので
>OSが仕様を踏襲している限り
>(timeGetTime() - prev_time)がゼロになることはありえません

ありえません?
これだから・・・
0352デフォルトの名無しさんNGNG
つーか、根本的に間違ってないか?
FPS って普通 frames per second つまり 1 秒に何フレーム描画したかという
ベーンチマークのことで、実際に 1 秒きっかりを測って実際に何回レンダリング
できたかを測るものだろ。
決して、1 秒を 1 回のレンダリング時間で割った数値ではない。
0353デフォルトの名無しさんNGNG
>>351
あーはい・・・内部処理に49日とちょっとかかるとゼロになりますけど

>>352
それはわかっていますが、内部処理でfpsを見たりしているので
現時点での疑似FPSが必要なんです
/*いろいろ*/の部分で1秒毎に描画済みフレーム数調べる処理はしています
0354デフォルトの名無しさんNGNG
>>349
センスのかけらも感じないな。

timeGetTimeは一回だけ呼び出せ。
こんな関数でstatic使うな。
そんな判定で除算を使うな。
0355デフォルトの名無しさんNGNG
>>353
で、347 の件はどーなったの?
0356デフォルトの名無しさんNGNG
C++じゃなくなってきたけどまあいいか
0357デフォルトの名無しさんNGNG
>>356
除算とかの話なら、C++ でも範疇だろう。
それとも、C++ でも C と重なる機能は C スレへ逝けって?
0358デフォルトの名無しさんNGNG
>>354
>timeGetTimeは一回だけ呼び出せ。
定義することは誰でもできます
明確な理由を教えて下さい

>こんな関数でstatic使うな。
こんな関数でメンバ変数増やしたくありません

>そんな判定で除算を使うな。
どうやっても60FPSと指定したい場合は
どっかで1/60なり除算しないと無理だと思うんですが
プリプロセッサにやらせろって事ですか?
ユーザーが動的にFPSを指定したい場合は?

>>357
ゼロ除算になるのは何故?という質問が
FPSの計り方にズレてきている事を指しているんじゃないでしょうか

>>355
丸め誤差で変数fpsがゼロになったところで、
どこを見ても「任意/fps」の式はありませんが・・・?
0359デフォルトの名無しさんNGNG
>358
問題はここ
if (fps < fps_limit) {
 prev_time = timeGetTime();
 return;
}
ここからreturnした場合、最後のSleep(1)が呼ばれないので
内部処理が1ms以内で終わった場合ゼロ除算になる
0360デフォルトの名無しさんNGNG
>>358
漏れは 354 じゃないけど 「timeGetTime() は一回だけ呼び出せ」 には賛成。
他の場合ならいざしらず、FPS 値が重要になるような局面では。

「こんな関数で static 使うな」 の意味だけど、static にする必要も無い
(当然メンバ変数にする必要も無い) ものが static になってるという事じゃ
ないの?
static DWORD prev_time = (timeGetTime() - 10); の初期化は 1 回しか
行われないけどいいの?
(もしかしてこれが今回の騒ぎの原因じゃあ・・・)
ヒープに確保しなければならないようなでかい領域を使わない限り、auto 変数の
速度上のコストって全くのゼロなんだけどな。

あと、355 にある 「347 の件」 は 349 のソースには全く関係無いんだけど、
「どこを見ても「任意/fps」の式はありませんが・・・?」 ってどう言う意味?
0361360NGNG
359 見て、

> 「こんな関数で static 使うな」 の意味だけど、static にする必要も無い
> (当然メンバ変数にする必要も無い) ものが static になってるという事じゃ
> ないの?

は取り消し・・・
0362デフォルトの名無しさんNGNG
>>359
解決しました
ありがとう

>>360
最後のヤツですが、ゼロ除算エラーが起きる事が問題だったので
fpsがゼロになることは一向にかまわないのですが、という意味です
0363354NGNG
>>362
解決すんなよ。そんな腐れコードさっさと捨てろ。

・timeGetTimeは一回だけ呼び出せ。
2回呼び出したときの値が同じだと期待できる根拠はどこにもない。
にもかかわらず、貴様のソースはすべての呼び出しで
同じ値が帰ってこないと意味を成さない。

・こんな関数でstatic使うな。
メンバ変数は要らなくなったらプログラムの都合でメモリ領域を開放できる。
static変数はプログラムの都合では開放できない。
static変数は初期化のタイミングも、プログラムの都合には合わせられない。
cEngineのインスタンスが一度破棄されて、再び生成されたときどうなる?

・そんな判定で除算を使うな。
↓のソース参照のこと。(prev_timeはメンバ変数)

void cEngine::Render()
{
const unsigned fps_limit = 60;
const unsigned time_limit = 1000 / 60;

const DWORD now_time = timeGetTime();
const DWORD time = now_time - prev_time;
 prev_time = now_time;
 if (1000 < time * fps_limit) {
  return;
 }
 else {
以下略

あとは、やろうとしてること自体も根本的に間違ってるっぽ。
0364デフォルトの名無しさんNGNG
>はすべての呼び出しで 同じ値が帰ってこないと意味を成さない。
逆ですよ
over_timeの計算はほとんど無意味でしたけど
while (fps >= fps_limit) fps = 1000.0f / (timeGetTime() - prev_time);
これは固定値だと意味をなさないどころか危険なコードになります

>cEngineのインスタンスが一度破棄されて、再び生成されたときどうなる?
されません(させません)し、当然nocopyableです
cEngineはさらに上位のラッパークラスに生成を管理されています
そのラッパークラスを1プロセス内で2度生成した場合の動作は保証しませんが

除算は大幅にはぶけました
が、いまどき除算がボトルネックになるようなCPUでゲームはしないでしょう

>やろうとしてること自体も根本的に間違ってるっぽ。
prev_time = now_time;
これこそ間違ってるっぽいんですが・・・
私のやろうとしている事は
余った時間の算出→その分だけSleep→実際にかかった時間を取得→もろもろの処理
という至極単純なモノです
疑似FPSの算出でちょっとややこしくなってますが
0365354NGNG
やれやれだぜ、。

> while (fps >= fps_limit) fps = 1000.0f / (timeGetTime() - prev_time);
> これは固定値だと意味をなさないどころか危険なコードになります

もともと無意味で危険な糞コードなんだよ。
そんなループいらねぇだろ。

> されません(させません)し、当然nocopyableです
> cEngineはさらに上位のラッパークラスに生成を管理されています
> そのラッパークラスを1プロセス内で2度生成した場合の動作は保証しませんが

貼り付けられたあのソースを見ただけでそこまで察しろってか。

> 除算は大幅にはぶけました
> が、いまどき除算がボトルネックになるようなCPUでゲームはしないでしょう

「除算しないと無理」とか言ってた奴のセリフかね。
つまらん負け惜しみしてねぇで、
除算をはぶく方法を頭に刻み込め。

> prev_time = now_time;
> これこそ間違ってるっぽいんですが・・・

んー?どこが?
まぁ貴様のやりたいことはいまいちつかめんから、そうかもしれんな。

> という至極単純なモノです
> 疑似FPSの算出でちょっとややこしくなってますが

負け惜しみはいらねぇから、
単純なことがややこしくなったらなんかおかしいと肝に銘じておけ。
0366デフォルトの名無しさんNGNG
> 余った時間の算出→その分だけSleep→実際にかかった時間を取得

この処理がレンダリング処理のどんな場面で必要なのか想像がつかないよ・・・
364 は天才かも知れぬ
0367ゲーム会社勤務NGNG
> 除算は大幅にはぶけました
> が、いまどき除算がボトルネックになるようなCPUでゲームはしないでしょう
ゴメン、突っ込ませて。
除算なんか多様してたらまともに動くゲームなんて無い。
こちとら、必死こいて最適化してんだ、ふざけんな。
0368デフォルトの名無しさんNGNG
> が、いまどき除算がボトルネックになるようなCPUでゲームはしないでしょう

アフォじゃねーのこいつ
0369デフォルトの名無しさんNGNG
ゲ作板でヤレ
0370デフォルトの名無しさんNGNG
AAと煽りだらけのネタ掲示板で何をやれと?
0371デフォルトの名無しさんNGNG
(メンバ関数ではない)関数テンプレートは、完全な特殊化も禁止ですか?
0372デフォルトの名無しさんNGNG
>>371
template<typename T> void hoge(T& foo) {}
template<> void hoge<char>(char& foo) {}
0373371NGNG
>>372
template< typename T > void hoge(T& foo, int bar = 0) {}
template<> void hoge<char>(char& foo, int bar = 0) {}
だと駄目でした
0374371NGNG
デフォルト引数があると駄目なのですね。すみません。
0375デフォルトの名無しさんNGNG
explicit substancialization!
0376デフォルトの名無しさんNGNG
>>375
ナニソレ
ブキ?
0377デフォルトの名無しさんNGNG
後半出鱈目
0378デフォルトの名無しさんNGNG
C++コンパイラ一人で作った人います?
0379デフォルトの名無しさんNGNG
4人で作った人ならEDGにいます

0380デフォルトの名無しさんNGNG
>>373
template<> void hoge<char>(char& foo, int bar) {}
にするとコンパイルできてしかも汎用テンプレートで与えられた
デフォルト引数を引き継ぐんだね。知らんかった。g++ 3.2
0381デフォルトの名無しさんNGNG
>>380
へー、それは猫耳。
0382デフォルトの名無しさんNGNG
>>380
VC6でも逝けた。奇跡だ(わら
0383デフォルトの名無しさんNGNG

すいません、T*& ってどういう動きをするのか教えてもらえますか?

例)
 *どこかに typedef Class* LPCLASS; と設定されているものとする。
 
void func func( LPCLASS& cls ) // <- cls はナニ?
0384383NGNG
間違えました。
 void func func => void func
0385デフォルトの名無しさんNGNG
reference of pointer
0386デフォルトの名無しさんNGNG
some_t *&p = some_map[some_key];
/* pをいじる */

って私はよくやるけど。
0387386NGNG
std::map<key_t, some_t*> some_map;
です
0388デフォルトの名無しさんNGNG
typedef struct foo_ { A* a; } foo;
typedef struct bar_ { A*& a; } bar;
A* a = new A();
foo f = { a };
bar b = { a };
delete a;
a = NULL;
f.a // 未定義
b.a // NULL
0389デフォルトの名無しさんNGNG
LPCLASS *p = new LPCLASS();
func(p); //pの中身が変更される可能性がある!
cout<<p->msg()<<endl; //pがぬるぽだったらいやんなエラー

とか
0390デフォルトの名無しさんNGNG
pDC->TextOut(0,0,"( ゚∀゚ )ぬるぽぬるぽるぬぽ〜〜");
AfxMessageBox("さいたまさいたまさいたま〜〜( ゚ ∀゚ )");
0391386NGNG
>>389
ちょっとおかしくね?
0392デフォルトの名無しさんNGNG
どこらへん?
0393386NGNG
>>392
LPCLASSはただのぽいんただから(*p)->msg()かな、と。別にいいけど。
0394デフォルトの名無しさんNGNG
ああ。よく見てなかったスマソ

LPCLASS p = new Class();
0395デフォルトの名無しさんNGNG
(´-`).。oO(なんでだろう…)
0396デフォルトの名無しさんNGNG
>>390
スレ違い。
0397デフォルトの名無しさんNGNG
>>343
一般保護例外はメモリ関係でプロテクションに引っかかった場合だよな。
NULL ポインタを参照したとか。

>>342
大抵の環境では、例外を発生するように設定できる。

x87 は両対応で、Win32 ではランタイムライブラリの方で「デフォルトでは
例外を発生せず計算続行」に設定されてる。(今は違うけど) 昔の FreeBSD
では例外が発生するモードに初期化されていて、すぐにシグナルが飛んで
きた。

>>367
わり算も敵だが (VCL のお陰でちょっと楽になったけど)、俺には DMA も
敵のような気がしてる今日この頃。非同期処理なんか嫌いだ…。
0398デフォルトの名無しさんNGNG
ブルートフォースアタック?をやろうと思って、
辞書順の次の文字列を返す(またはすりかえる)
ジェネリック?アルゴリズムを作ろうと思ったのですが、
既にありそうなのでどこかにあるのを知っていたら教えていただけないでしょうか...
それを利用すれば実現可能なクラスとかでもいいです。

例えば

char buf[] = { 'a', 'z', 'z' };
func( buf );
cout << buf; // 出力> baa

みたいな感じです。
実際には[a-zA-Z] とか [あ-お](←これは無しとしても)みたいに範囲指定か
const char dic[] = {'a', 'g', 'e'};//この辞書順
みたいな辞書指定できるようになっていると思うので、
もう少し複雑な使い方になると思いますが...
0399デフォルトの名無しさんNGNG
力技で何を解くの? UNIX のcrypt?
0400383NGNG
>>385-389
ありがとうございます。
ポインタの安全性が若干ながら向上するわけですね。
勉強になりました。
0401デフォルトの名無しさんNGNG
using namespace についての質問です。
ヘッダーファイルでusing namespace std ; などを宣言して最後にこれを
撤回したいのですがどうすればよいでしょうか?
例えば
#include <string>
using namespace std ;
class myclass {
 string str1 ;
} ;
みたいなのをヘッダーファイルに書いてcppファイルでこれをインクルードしたときに
using namespace std ;の宣言を無効にしておきたいのです。
コンパイラはVC++6です。お願いします。
0402デフォルトの名無しさんNGNG
>>401
そのヘッダファイル内の定義を新たに namespace ns で包んで、その中で
using namespace std すれば見かけ上は OK。
でも、後で using namespace ns とした時点で std も丸見えになるので
あんまし有効でない。
結局、ヘッダ内では面倒臭がらずに std:: 付けよう、というのが一般的
みたい。
いい方法があったら漏れも知りたい。
0403401NGNG
>>402
どうもです。あまり良い方法はないということですね。
0404デフォルトの名無しさんNGNG
STLスレから移動してきました。
>>Comeauって$50で全部(コンパイラ、標準ライブラリ、リンカ、デバッガ)ついてくるんですか?
>>そうなら買ってみてもイイ!かも
>ついてこない。
>フロントエンドだけ。
デバッガはともかく、標準ライブラリとリンカも別売りなんでしょうか?
英文ちゃんと嫁って言われそうですが(汗

使用しているかたオシエテ
0405デフォルトの名無しさんNGNG
シュリンクトゥーフィット?
キレイキレイしましょ?
0406デフォルトの名無しさんNGNG
以下のようにすると、pが指している文字が"あいうえお"にならないのです。
どうしたらちゃんと指すようにできますか?

ostringstream os;
os << "あいうえお";
const char* p = os.str().c_str();
0407デフォルトの名無しさんNGNG
string s = os.str();
const char* p = s.c_str();

or

ostrstream os;
os << "あいうえお";
const char* p = os.str();
0408デフォルトの名無しさんNGNG
>>407
下のは危険な香りがするのですが...
0409デフォルトの名無しさんNGNG
>>406
c_str()の寿命は一時的だから、ポインタに代入して参照したら、
何を指しているか保証されないよ。
0410デフォルトの名無しさんNGNG
フロッピーディスクをコピープロテクトをかけて、特殊フォーマット
かけるソフトをVC++で作ろうと思っているのですが、FATやらなんらや
で良くわかりません。大まかで良いのでアドバイスをいただきたいです。

環境はWin2000のVC++6.0です。

よろしくお願いします
0411デフォルトの名無しさんNGNG
デバイスドライバ作らないと無理じゃないかなあ
0412デフォルトの名無しさんNGNG
デバイスドライバってどうやって作るのでしょうか?
0413デフォルトの名無しさんNGNG
>>412
WIN32APIスレで聞いたほうがいいカモ。
でもあそこでもデバイスドライバの話は見たことないな・・・
0414デフォルトの名無しさんNGNG
 今 時 フ ロ ッ ピ ー プ ロ テ ク ト か よ
0415デフォルトの名無しさんNGNG
FDはCD-ROMとちがって規格上プロテクトがかけれるようになってるけど書き込むには
専用の機械が必要。
0416デフォルトの名無しさんNGNG
>>412
VC++とDDKを使う。DDKはMicrosoftのサイトのどっかにある。
0417デフォルトの名無しさんNGNG
>>415
プロテクトノッチを上げる専用の機械か?(藁
0418デフォルトの名無しさんNGNG
互換機ってFDCは何使ってたっけなぁ〜?
0419名無しさんNGNG
>>416
VS.NETじゃつくれないのかな>DDRV
0420デフォルトの名無しさんNGNG
低レベルの質問ですいません。
namespaceについてですが、
自作ライブラリが、他のライブラリと重複しないようにnamespaceを使ってみたんですが

STLの名前空間でのcoutは、
std::cout でも、cout
どっちでも使用できるようになっているのですが
自分で宣言した名前空間(例:namespace onigri)の中にある
関数(例: void wassyoi(); )は、
onigiri::wassyoi();
しか受け付けないみたいです(wassyoi();だけでは無理)。
他のライブラリと重複してない場合、wassyoi();だけで、
呼び出すことはできないのでしょうか?

自分なりに考えた方法は、
namespace onigiri
{
void wassyoi();
}
using namespace onigiri;
という風に、
ヘッダ内に、usingを無理やり入れてます。
これだと、あまり よくないような気がして。
0421デフォルトの名無しさんNGNG
>>420
それでいいんだよ。>using
g++の2.xを使ってるのか? std:: なしでエラーにならんのは
単にg++の不具合。
0422420NGNG

何か、他に方法があったらご教授ください。
0423デフォルトの名無しさんNGNG
はぁ?
0424420NGNG
ごめんなさい。
#include <iostream>
だと std空間で
#include <iostream.h>
だと グローバル空間みたいでした。
俺がアフォでした。
ごめんちゃい。
0425420NGNG
421の即レスにびっくり
422は、気にしないでください。
どうも。
0426デフォルトの名無しさんNGNG
>>420
using onigiri::wassyoi;
って感じに、個別にやったほうがいいと思われ。
0427デフォルトの名無しさんNGNG
namespaceってのは、衝突するかもしれないシンボルを回避
するという目的もあるんだから、その名前空間を定義するヘッダ内で
using namespaceするなんて意味ないじゃん。
0428デフォルトの名無しさんNGNG
using namespace std; はC++の初期の学習段階から使わないように
する癖を付けよう。
0429デフォルトの名無しさんNGNG
using namespace std; はデフォだろ。
0430デフォルトの名無しさんNGNG
>>428
main() のあるファイルでも使っちゃ逝けないのか?
0431デフォルトの名無しさんNGNG
>>429
デフォって何?
0432デフォルトの名無しさんNGNG
Don't forget namespace!
0433デフォルトの名無しさんNGNG
債務不履行宣言
0434デフォルトの名無しさんNGNG
>431
怠け者がすること、って意味じゃないかな?
0435デフォルトの名無しさんNGNG
mutable 使ってますか?
0436デフォルトの名無しさんNGNG
こんばんわ。
C++のとても簡単な事を全然思いつかないので、
どなたか教えてください。

int x[n];
int y[n];
があったとすると
sum = (x[0]-y[0])+(x[1]-y[1])+(x[2]-y[2])+…(x[n]-y[n])  ←ここです。

for(int i=0; i<n; i++){
sum ○ x[i]-y[i]
}

○の部分が。。。
0437デフォルトの名無しさんNGNG
>>436
> C++のとても簡単な事

そう思うなら自分で回答してみては。
0438デフォルトの名無しさんNGNG
>>437
簡単だと思うのですけど、
自分で回答できなくて助けを求めています。
0439デフォルトの名無しさんNGNG
どうがんばってもネタにしか見えないが,
○ = +=
0440デフォルトの名無しさんNGNG
あと,
for(int i=0; i<n; i++){
は,
for(int i=0; i<=n; i++){
な。
0441デフォルトの名無しさんNGNG
>>436
std::accumulate(x,x+n,0)-std::accumulate(y,y+n,0)
0442デフォルトの名無しさんNGNG
>>441
頓珍漢
0443デフォルトの名無しさんNGNG
stringのlistをソートしたいんですが、コンパイラに怒られます。

string s1 = "A";
string s2 = "B";
if(s1 < s2)

としただけでだめです。stringのoperator <はちゃんと定義されていると
思うのですが、なぜだめなのでしょうか?
0444デフォルトの名無しさんNGNG
>>443
普通にできるが。
0445デフォルトの名無しさんNGNG
エラーメッセージを書かないのはネタだと何回も何回も・・・
0446デフォルトの名無しさんNGNG
CLine* CDay10Doc::AddLine(CPoint ptFrom, CPoint ptTo)
{
CLine *pLine = new CLine(ptFrom, ptTo);
try
{
m_oalines.Add(pLine);
SetModifiledFlag();
}
//メモリが許容範囲を超えたときの例外処理
catch (CMemoryException* perr)
{
AfxMessageBox("Out of memory",MB_ICONSTOP | MB_OK);
if(pLine)
{
delete pLine;
pLine = NULL;
}
perr->Delete();
}
return pLine;
}
何が間違っているのか分からないので教えてください
error C2143ですがセミコロンはちゃんとあります
0447デフォルトの名無しさんNGNG
>>446
「セミコロンはちゃんとあります」 って言われてもわからん。
そのエラーメッセージは何行目を指してたのよ?
エラーメッセージはプログラムのどこがどうおかしいかを教えてくれるもので、
あなたを困らせるものじゃないんだから、ちゃんと理解しなさい。
0448デフォルトの名無しさんNGNG
ええと
try
{
コレの{の部分でエラーが出るのです
0449448NGNG
sageミス すいません
0450デフォルトの名無しさんNGNG
>>448
はっきり言ってわからん。
この文脈で考えられる事と言ったら try が変なものに #define されてるくらい
だが、そんな事無いだろうし。

つーか、エラーメッセージはエラーを示す唯一のメッセージなのに、何で全部
書いてくれないの?
エラーメッセージを、そんなにどうでもいい情報だと思ってる?
0451デフォルトの名無しさんNGNG
ぼくに理解できないので あなたにも理解できるとは思えません
0452デフォルトの名無しさんNGNG
ヽ(´ー`)ノ
0453デフォルトの名無しさんNGNG
typedef std::vector<std::string> T; のような型Tを
つくるとして、Tの名前どんなふうに命名しますか?
0454デフォルトの名無しさんNGNG
StringArrayとか
0455デフォルトの名無しさんNGNG
StringArray
0456デフォルトの名無しさんNGNG
Stringsもいいな
0457デフォルトの名無しさんNGNG
ビット演算子って覚えた方がいいんですか?なんかよく理解できないんで…
0458デフォルトの名無しさんNGNG
ビット演算をする羽目になったときに覚えればよい
0459453NGNG
>>454-456
〜Buf とか 〜s も考えたんですが、前者は感覚的に違う気がしたのと
後者はぱっと見て判断しにくいかなと。。Array がいいです。
ありがとうございます。
0460名無しさんNGNG
>>457
組込用MPUくらいでしか使わないんじゃないのか。ビット演算(操作)
0461デフォルトの名無しさんNGNG
>>460
圧縮とか、固定小数点演算とかいろいろありますがな。
0462デフォルトの名無しさんNGNG
ビットストリームの読み書きには必須ですな
0463デフォルトの名無しさんNGNG
使うかどうかは別としても、ビット演算程度がよく理解できない人間が
まともにプログラム組めるようになるとは思えないね。

0464デフォルトの名無しさんNGNG
intのサイズを理解してないと厳しいんじゃなかろうか。
0465デフォルトの名無しさんNGNG
>>453
vstr_type
0466デフォルトの名無しさんNGNG
ビット演算の真理表を見つめてたら 1010 & 1100 = 1000 ってことはわかりました。けど、

 1010  0000  0010  1000 = a028

ってなるのが全然わかりません。これは覚えなくてもよいですか?
0467デフォルトの名無しさんNGNG
そりゃ2進数と16進数の変換では?
0468デフォルトの名無しさんNGNG
>>467
サンクス
0469デフォルトの名無しさんNGNG
vector<int> v;
int i = v.size();
みたいなことをVC++でやると 「size()の戻り値はint型じゃない」みたいな
ワーニングが出るがこういう場合、どう対処するのが普通なの?

1. intじゃなくてvector::size_typeを使う
2. size()の戻り値をintにキャスト
3. ワーニングを無視
0470デフォルトの名無しさんNGNG
>>469
1. が王道。
2. はどうしても符号付の数値が必要な場合のみ。
3. は絶対にするべきではない。
別解 4. 大抵は size_t で通じる。
0471デフォルトの名無しさんNGNG
size_typeがunsignedだったりするといやだから2.かなあ
3.は重要なwarningを見落としたりすると困るからちょっとイヤかも
0472デフォルトの名無しさんNGNG
>>471
signed な数値を返す size() ってあるの?
0473デフォルトの名無しさんNGNG
数値型はすべてintで扱うべき、1ビットの節約のために
わざわざunsignedを使うのはばかげている

という意見と

正の値しかとらない変数はunsignedを使うべき、間違って負の値が
入ることを防ぐことができる

という意見

あなたならDOUCH !?
0474デフォルトの名無しさんNGNG
全部intでもいいけど、前者に書いてある理由付けはDQNだろう
0475デフォルトの名無しさんNGNG
>>470
「vectorのサイズ分ループをまわす」とかの場合、
1や4だとループのカウンタ用の変数もsize_tを使うことになるんですか?
ループのカウンタ用の変数がintだと結局終了条件でintとsize_tを比較
することになってしまいますよね。
0476デフォルトの名無しさんNGNG
>>475
> 「vectorのサイズ分ループをまわす」とかの場合、
vector<T>::iterator を使うことになります。

indexで回すなら当然size_tだな。
0477デフォルトの名無しさんNGNG
負の値になることがありうる変数を
後からsize_tにしてハマったことならあるよ...
0478デフォルトの名無しさんNGNG
intを使う奴はDQN
0479デフォルトの名無しさんNGNG
>>474
どういう理由付けなら全部intでもいいの?
0480デフォルトの名無しさんNGNG
>>470
size_tを使うとわざわざvectorやlistでsize_typeをtypedef
している意味がないような。
かといってわざわざvector::size_typeと書くのは面倒だし、
コンテナを変更した時修正しないといけないし。
かといってそのためにテンプレート化するのもなんだし。

0481デフォルトの名無しさんNGNG
個数をあらわすインターフェースがsize_tと決まっているのだから
すべてsize_tで統一すべき

intは不要。使う奴はDQN。
0482デフォルトの名無しさんNGNG
>数値型はすべてintで扱うべき、1ビットの節約のために
>わざわざunsignedを使うのはばかげている

ってどういう意味?教えてちょ。
0483デフォルトの名無しさんNGNG
俺、最近符号なしの整数使うときsize_t使ってるんだけどヤバイかな?
0484470NGNG
>>475
コンテナでループする時は、476 の通り iterator を使うべき。
index の場合は、インデックス値が 0 から始まるとは言い切れないので一概には
言えないが、index は本来ランダムアクセスに使うべき。
その場合は多分コンテナの範囲を超えた値を指定しても大丈夫だから size() は
関係無い。

>>480
サイズを表す数値の型は size_t と決まっている。
だから 「大抵は size_t で通じる」。
size() が size_t 以外を返すのはよっぽどの事情がある場合で、その場合は
素直に Class::size_type を使うべき。
そういう時にコーディングが面倒だと言うのは DQN。
で、あんたは size_t も Class::size_type も否定してるけど、じゃあ
どうしたいの?

>>483
size_t はサイズを表す数値の型と決まっている。
size_t は unsigned int で無い場合がある (もっと大きかったりする事もある)
が、それで問題が出ないなら構わない。
ただし単にタイプ数を減らしたいな uint を typedef で用意すべきで、それを
サボるのは DQN。
0485デフォルトの名無しさんNGNG
size_tで全く問題がないなら Class::size_typeの存在意義はない ですよね。
size_tでは問題になる可能性があるのなら size_tを使ったらいけない
ってことになるんじゃ??
0486デフォルトの名無しさんNGNG
size_tもsize_typeも符号無し整数型と決まっているから
その処理系で最大の符号なし整数型で受ければ何の問題もない
0487デフォルトの名無しさんNGNG
>>485
どうしてそう両極端に考えるんだ?

>>484
> サイズを表す数値の型は size_t と決まっている。
> だから 「大抵は size_t で通じる」。
> size() が size_t 以外を返すのはよっぽどの事情がある場合で、その場合は
> 素直に Class::size_type を使うべき。

結局、その class がどういうものかわからないと何とも言えないと言う事だ。
ただし、普通の Class::size_type が size_t であることはまず無いから、
size_t とみなして良いという事。
(ダメなときはそもそもコンパイラが怒る)

そしてそもそも、

>>469
> 1. intじゃなくてvector::size_typeを使う
> 2. size()の戻り値をintにキャスト
> 3. ワーニングを無視
>>470
> 1. が王道。

どう結論出していいか迷うなら、まず Class::size_type を使え。
0488487NGNG
訂正。

×: 通の Class::size_type が size_t であることはまず無いから
○: 通の Class::size_type が size_t 以外であることはまず無いから
0489デフォルトの名無しさんNGNG
X3J16/96-0225 WG21/N1043 より

20.1.5 Allocator requirements

expression:
  X::size_type
return type:
  unsigned integral type
assertion/note pre/postcondition:
  a type that can represent the size of the largest object in the allocation

The typedef members pointer, const_pointer, size_type, and difference_type are
required to be T*, T const*, size_t, and ptrdiff_t, respectively.

他の標準クラスは Allocator::size_type をそのまま引き継いでいるようです。
だから標準で済ませる限り size_t と見なしていいみたいですね。

うがった見方をすれば、独自の Allocator で、size_type を整数表現する class に
すり替える事も可能と言えば可能。
0490ふトンカ ◆wX94FutoNg NGNG
Perlで変な掲示板などを作っております。
しかしとてつもなく重いです。

CかC++あたりを勉強してWindowsのGUIプログラムでも作りたい物もあるし、
さらに変なものを作りたいのですが、とりあえず必要なものはなんでしょう?

エデッタ、コンパイラ(BCC32とかでいいのでしょうか?)、入門書みたいな本、自分
以外に必要な物はありますか?
なんとか C++ とか、高い物もいきなり必要なのでしょうか?


天才とかはありません…。

C/C++の違いは、、なんか++が付いていてお得そうなので、こちらに質問します、、
(これでいいのかな自分( ゚_゚ )?)
0491デフォルトの名無しさんNGNG
>>490
perlやってるんなら正規表現が欲しいだろうから、boostのregexとか
触ってみれば。
0492デフォルトの名無しさんNGNG
>>490
何か困った事が発生してから質問してください。
そうでないなら、まずは始めてください。
一番必要なのは、コードを書く事です。

ちなみに、C/C++ から GUI を扱うにはいろいろ覚える事があり、一朝一夕には
できません。
とにかく GUI をやりたいと言うなら、C/C++ は一旦置いといて HSP (無料)
あたりにでも手を出してください。
0493ふトンカ ◆wX94FutoNg NGNG
Perlはある程度できますがC++などは全く素人ですので
正規表現使う必要が出てくるまでにかな時間がかかりそうです。。
Perlですら最初の一応役に立つプログラムまで2ヶ月かかってますし
役に立たないプログラムならもっとすぐに書いていましたが…
0494デフォルトの名無しさんNGNG
>>493
掲示板だけならコンソールアプリケーションで十分だから、GUIはとりあえず
必要ないと思います。

C++のstd::stringを使えばバッファオーバーランの問題も避けられるはずです。
0495ふトンカ ◆wX94FutoNg NGNG
>>492
どちらかというと、GUIは後から、重い言語以外にもう1つ覚えたいといったところでしょうか
とにかく解説書なりページなり見て、
プログラム書いて書いて書きまくれということですね。
ではそうしたいと思います。

Perlの時はソースを改造→分からないから解説書→0から書けるように
なっているので、こういうやり方は初めてですが。

やってみたいと思います。
回答ありがとうございました。
0496デフォルトの名無しさんNGNG
dynamic_cast の計算量について、なにか予測できることってありますか?
クラスの数に比例する?とか、
多重継承すると???とか。
0497デフォルトの名無しさんNGNG
>>496
処理系依存?
単継承と重継承でパフォーマンステストしてみたら?
0498デフォルトの名無しさんNGNG
class Single {
public:
static Single* getInstance() { /* 省略 */}
void func() { /* なにかの処理 */ }
private
Single() {}
static Single* _instance; }
Single* Single::_instance = 0;

とかいうしんぐるとんクラスがあって、このインスタンスを使う場合は、


class UseSingle {
public:
UseSingle() { sin = Single::getinstance(); }
void use() { sin->func(); }
private:
static Single* sin;
}

のような感じでいいの?

0499デフォルトの名無しさんNGNG
使う側は単に
Single::getInstance()->func()
でいいのでは?。

わざわざ呼ぶためのクラスを作る必要はないし、どこからでもアクセス
できるのがSingletonのメリット。
0500496NGNG
g++-3.1.1 でテストしてみました。

class B { public: virtual ~B(){}; };
class D1 : public B {};
class D2 : public D1 {};
class D3 : public D2 {};
で、dynamic_cast<D1*>をそれぞれの実インスタンスへのポインタでテスト。
B < D1 < D2 < D3 となって、継承の回数に比例してる感じでした。

継承ツリーを順にたどる処理が想定できますが、そのまんまの実装ぽいですねぇ。
0501デフォルトの名無しさんNGNG
おお。
しかしまんまの結果やね。
多重継承のときは先頭から辿るんだろうか・・・
0502デフォルトの名無しさんNGNG
こういう感じのクラス間で相互に定義が入れ子になるコードを書いているのですが
コンパイル時に先に読み込まれたほうであとから読み込まれるクラスが定義されて
なくてうまくコンパイルできません。何らかの形でクラス識別子を定義してやれば
いいんだとは思っているんですがVCのヘルプとか見渡してもどうしたらいいのか
よくわからないので質問させてもらいます。

【CMona.h】
#ifndef CMona_H
#define CMona_H
#include "CGiko.h"

class CMona{

public:
  CGiko* Giko;
}

#endif
---------
【CGiko.h】
#ifndef CGiko_H
#define CGiko_H
#include "CMona.h"

class CGiko{

public:
  void Copipe(CMona* Mona);
}

#endif
0503デフォルトの名無しさんNGNG
それぞれに
class CMona;
class CGiko;
をつけくわえてみよう。
0504デフォルトの名無しさんNGNG
Thanx! うまくいったよ(*^o^*)
0505デフォルトの名無しさんNGNG
Berkeley DB みたいな感じのファイルDBで、商用でもフリーでかつオープンソースに
しなくてもいいラインセンスのライブラリってありませんか?
0506デフォルトの名無しさんNGNG
>>505
Berkeley DB
0507デフォルトの名無しさんNGNG
>>506
Berkeley DB はソース公開しない場合は有料だったと思ったが。
0508デフォルトの名無しさんNGNG
んじゃcdb。
っていうかスレ違いだし。
0509デフォルトの名無しさんNGNG
http://cr.yp.to/cdb.html ね >>508
0510デフォルトの名無しさんNGNG
具象クラス10個を多重継承していいですか?
それとも、クラス設計から考え直すべきですか?
0511デフォルトの名無しさんNGNG
>>510
コンポジションならそういう例もあるんじゃない?
0512デフォルトの名無しさんNGNG
>510
is-a法則は成り立つ?
委譲じゃ解決できない?

>>511
理解できないので詳しい説明お願いします
0513デフォルトの名無しさんNGNG
>>510
そんな風にたずねられたら、普通はヤメトケって言われるよ・・・
0514デフォルトの名無しさんNGNG
template<class T,class S>struct STA{
typedef T(STA::*FUNC)(S);
FUNC func;
std::string name;
STA(){
name=typeid(T).name();
if("void"==name){cout<<"debug"<<endl;func=fff;}
(this->*func)();
}
void fff(void){cout<<"fff"<<endl;}
};
/**************************************************************/
void main(void)
{
STA<void,void> sta;
}
エラーじゃないんですが、何故かメモリリークします。どうやらstringが
原因らしいんですが・・・
0515デフォルトの名無しさんNGNG
きもっ
0516デフォルトの名無しさんNGNG
2次元配列を動的に作成するときに現在は
 float** array;
 array new float*[x];
 for (int i = 0; i < num; ++i){
  array[i] = new float[y];
 }
のようにしているんですが、一気に領域を確保することはできませんか?
0517デフォルトの名無しさんNGNG
標準例外に関する質問です。
「引数の範囲が不正」な場合には
invalid_argument を投げるべきでしょうか?それとも
out_of_range を投げるべきでしょうか?
range_error という可能性も?

あと、ここらへんについて簡素かつ正確に書いてある書籍等はないでしょうか?
0518デフォルトの名無しさんNGNG
glibcって何ですか?
0519デフォルトの名無しさんNGNG
>>517
引数の範囲が数直線上の区間で表すようなものならば、out_of_rangeが
適切でしょう。そうでなくて、たとえばenumにないものを指定されたとか
NULLはダメなのにNULL突っ込んだとかはinvalid_argumentでしょう。

> あと、ここらへんについて簡素かつ正確に書いてある書籍等はないでしょうか?

それぞれの例外の説明を読むしかないのでは・・・
0520デフォルトの名無しさんNGNG
>>516
float* array;
array = new float[x * y];

利用時は
array[x + (y * rangeX)];

0521517NGNG
>>519
レスありがとうございます。
out_of_range が(runtime_errorではなく) logic_error を継承しているのが
ちょっと解せなかったのですが、
そこらへんはあんまり気にしないほうが良いのでしょうか?

区間を表す場合に、「最小値」が「最大値」より大きい なんて場合には
どうすればいいのでしょうか?
0522デフォルトの名無しさんNGNG
雑談レスだけど、例外の適切な使い分けがなかなかわからねーなー。
0523デフォルトの名無しさんNGNG
適当にXXXExceptionクラスを作ってそれ投げてりゃ良いのよ。
0524デフォルトの名無しさんNGNG
>>520
やはりそれしかないんですか。
それでは、それを使おうと思います。

0525517NGNG
>>522
ですよねー。Java や C# などの後発の言語に比べて中途半端というか、
所詮後付け感は否めないですよねー。

>>523
やってると混乱してきちゃうので…。
中途半端に標準ライブラリに含めないで欲しかったですね。
そうすれば思い切って独自仕様で固められたのに。

>>524
(実は >>520 は私だったのですが)
あと、インデックスに使う値を管理するクラスを作ると楽かも?
でもそれをするとテンプレートとか使って「配列クラス」を作りたくなってしまうという罠!みたいな。
0526デフォルトの名無しさんNGNG
例外はクラスライブラリによって使い方が違ってくるから複数のクラスライブラリ使ってると
設計がかなり難しくなってくる。

Javaはライブラリもそろってるしメモリ食わなきゃそこそこいいんだが。
0527デフォルトの名無しさんNGNG
Hoge* HogeCreater::creat() {
 return new Hoge();
}

Hogeクラスのインスタンスを返す↑って使い方あってる?
メソッドを抜けるとオブジェクトが勝手に破棄されるとか?
0528デフォルトの名無しさんNGNG
>>527
されない。どこかでちゃんと解放してやれよ。
0529デフォルトの名無しさんNGNG
>>527
あってる
恐れている間違いはこういう感じだろう。

return &Hoge(); // 関数を抜けたら不正になるオブジェクトへのポインタを返している!!

>>528
質問の意図を読み間違えていると思われ。
0530デフォルトの名無しさんNGNG
>>529
多分お前がな。
0531デフォルトの名無しさんNGNG
Hoge& HogeCreater::creat() {
 return Hoge();
}

何も考えずこうした方が良いと思うが
0532デフォルトの名無しさんNGNG
>>531
だめぽ
0533デフォルトの名無しさんNGNG
勉強をかねて、Visual C++ でMFCではなくAPI主体のアプリを作ってます。
可変長の文字列というのはどのように扱うのが一般的なのでしょうか?

1.GlobalAllocなどのAPIを使う
2.C++標準ライブラリのcstringを使う
3.(便利そうだから?)MFCのCStringを使う
4.その他

今のところは数十から多くて数百文字なのであらかじめ多めに見積もって
おいてもだいじょうぶだとは思ってますが、なんとなく気分的にいやなんです。
0534デフォルトの名無しさんNGNG
>>514
bcc5.51, vc++6.0, gcc2.95.3-5どれもエラー
0535 ◆hMJAPH9PWA NGNG
>>531
自動変数のリファレンス反しちゃダメじゃん。
Effective C++の23項参照。
0536デフォルトの名無しさんNGNG
>>533
>2.C++標準ライブラリのcstringを使う
stringでは?
(2)がベターだと思われ。勉強がてら(1)してみるのもおもしろいかも。
0537デフォルトの名無しさんNGNG
(´-`).。oO(C++標準にcstringなんてあったっけ?)
0538デフォルトの名無しさんNGNG
>>537
煽りはスピードが命。
0539デフォルトの名無しさんNGNG
(´-`).。oO(string.hのC++版…可変長じゃねぇな)
0540533NGNG
レスありがとうございます
>>536
ありがとうございます 使ってみますです
>>537
stringでしたね 寝ぼけたこと言ってごめんなさいです
>>539
そうなんですか!? 少しパニくってきたけど
そのへんはがんばれば自己解決でけそうです
0541デフォルトの名無しさんNGNG
可変長文字列はstrdup()で確保してfree()で解放するのが常識だろ
strdup()の返り値はチェックしなくてすむしな
0542デフォルトの名無しさんNGNG
  ∧__∧
 (ミTдTミ) しくしくしくしくしくしくしくしくしくしくしくしく 
0543デフォルトの名無しさんNGNG
C言語で書かれたWindowsのスケルトンプログラムをC++で書き直しているところなのですが、
コールバック関数をクラスの中に入れると、どうしてもエラーが出てしまいます。

DirectXのサンプルプログラムを見てみると

基底のクラスで
class CD3DApplication
{
protected:
                :
  
static INT_PTR CALLBACK SelectDeviceProc( HWND hDlg, UINT msg,
WPARAM wParam, LPARAM lParam );

となっていました。そこで「SelectDeviceProc」をmsdnの検索キーワードにかけたのですが該当する
関数は見つかりませんでした。

誰か教えてください。
0544デフォルトの名無しさんNGNG
ちなみにエラーの内容は、

error C2440; '='; 'LRESULT(_thiscall test_app::*)(HWND, UINT, WPARAM, LPARAM)'から'WADPROC'に変換できません。

wc.hIconSm=NULL;
wc.cbClsExtra=0;
wc.cbWndExtra=0;
wc.lpfnWndProc=WndProc;<-----ここ

if( !RegisterClassEx(&wc) )
0545デフォルトの名無しさんNGNG
>>543
C++のメソッドは

A::hoge() -> hoge(A *this)

な感じになっています。
0546デフォルトの名無しさんNGNG
画像が貼れるチャットがあるよ
http://www.i-chubu.ne.jp/~tomomi-h/marion/navi/navi.cgi?links=20311
0547デフォルトの名無しさんNGNG
>>545 thanks

535はだだ今勉強中
0548デフォルトの名無しさんNGNG
ちゃんとstaticつけたか?
0549デフォルトの名無しさんNGNG
int *p(0);
がこけるんだけど、C++の仕様?それともVC6の制限?
ポインタはexplicitな宣言できないのかな?
でも、
int (*pf)(void)(0);
は通るんだなあ・・・
0550デフォルトの名無しさんNGNG
こけるって?
0551デフォルトの名無しさんNGNG
>>549
>int *p(0);
コンパイル通りませんけど。
0552デフォルトの名無しさんNGNG
typedef int* INTP;
INTP p(0)
は?
0553デフォルトの名無しさんNGNG
CとC++のどちらからでも勉強できるのですか?
0554デフォルトの名無しさんNGNG
>>549
それ、コンパイラには int *(p(0)); と解釈されてると思うんだがどうよ?
演算子の優先順位的に。
0555デフォルトの名無しさんNGNG
>>553
ええ、そうですよ。
0556デフォルトの名無しさんNGNG
>>555
まったくの初心者なんですが、プログラミング言語を勉強する前に何か本などを読んで方がいいのでしょうか?
0557デフォルトの名無しさんNGNG
まったくの初心者なら、スクリプト言語辺りを軽く触っておいてから
挑むのが良いかもれ知れませんね。
0558549NGNG
レスさんくす。
規格読んでたんだけど、それらしき記述は見つけられず。残念。
>>552
確かに、typedefしたら通りました。
>>554
なるほど。エラーメッセージが一緒だな。どうもそれみたい。
まあ、素直にふつうに宣言するのが無難だな。
0559デフォルトの名無しさんNGNG
typedefしても通らんぞ(gcc3.2)。
VC++がおかしいんじゃないの?
0560549NGNG
>>559
VC6では確かに通ったよ。
それはそうと、宣言じゃなく初期化だな。恥ずかしい・・・
0561デフォルトの名無しさんNGNG
>>560
ああ了解。拡張子を.cにしていました。スマソ。
そうか、int (*p)(0); は、int *p = 0; と同じなのね。
0562デフォルトの名無しさんNGNG
>>543
プロシージャにしたいメンバ関数を
static LRESULT CALLBACK WindowProc(HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam);
としてwc.lpfnWndProc = WindowProc;で何も問題無い

ちなみにstaticな関数なので、プロシージャの中からメンバにアクセスしたい場合は
プロシージャの最初のほうでWM_CREATEのlParamからlpCreateParamを拾って保持しておく必要がある

static 自作ウィンドウクラス* Instance = NULL;
if (Instance == NULL) {
 if(msg == WM_CREATE) {
  Instance = static_cast<自作ウィンドウクラス*>(reinterpret_cast<LPCREATESTRUCT>(lParam)->lpCreateParams);
 }
 return DefWindowProc(hWnd, msg, wParam, lParam);
}

アクセスする場合はInsctance->メンバ
0563デフォルトの名無しさんNGNG
仮想関数デストラクタについて質問。

C++ FAQ等を見ていると
class CA{
public:
CA();
virtual ~CA();
};
のように、
デストラクタが、仮想関数になってるのですが、
virtual にしても、しなくても変化が無いように見えますが
仮想関数にする意味があるんでしょうか?

0564デフォルトの名無しさんNGNG
>>563
C++ FAQ見れ
0565デフォルトの名無しさんNGNG
継承しないなら、関係ない。
0566563NGNG
>>564
それについて、
コンストラクタとちがって
virtualキーワードをつけて宣言できる。
としか書いてないのです。

つけても、つけなくても、
継承元デストラクタ→継承先デストラクタ
が呼ばれるのです。
オーバーライドしようと、継承先で~CA()と書いてもエラー出るし。
よくわからないので、おしえてください。
0567デフォルトの名無しさんNGNG
>>566
例えばclass CAから派生したclass CBがあったとして、そのポインタを
親のCAで表現しているとき

CA* cap = new CB;
delete cap;

とした時、~CA()も~CB()も仮想デストラクタにしておかないと、~CB()が
呼び出される保証はない。
0568566NGNG
>>567
うおお。
わかりました。
わかりすぎて、少し感動しました。
ありがとうございますー。
0569デフォルトの名無しさんNGNG
これが意図した動作かどうか確かめてみそ。

class CA {
public:
~CA() { std::cout << "~CA()\n"; }
};

class CB : public CA {
~CB() { std::cout << "~CB()\n"; }
};

int main()
{
CA* cap = new CB;
delete cap;
}
0570デフォルトの名無しさんNGNG
class CA {
public:
vittual ~CA() { std::cout << "~CA()\n"; }
};

class CB : public CA {
~CB() { std::cout << "~CB()\n"; }
};

int main()
{
CA* cap = new CB;
delete cap;
return 0;
}

は OK? NG?
0571デフォルトの名無しさんNGNG
>>570
OKですよ。基底クラスのデストラクタが仮想デストラクタになると、
それ以降継承されたクラスのデストラクタはデフォルトで(というか
強制的に)仮想デストラクタになるから。
0572デフォルトの名無しさんNGNG
お、vittualはvirtualですよね。念のため。
0573デフォルトの名無しさんNGNG
Effective-C++のP78〜84には、基底クラスのデストラクタを仮想デスト
ラクタにするべき時とそうでない時についての考察が書かれている。

大まかに言えば、継承するつもりのないクラスのデストラクタは仮想に
すべきでなく、継承するつもりならば仮想デストラクタにしておけば安心
であるというような内容。
0574570NGNG
#define vittual virtual
逝ってくる・・・

571 アリガ�`
0575デフォルトの名無しさんNGNG
クラスに少なくとも1個の仮想関数が含まれていれば、仮想デストラクタ
を宣言すること、となっている。
0576デフォルトの名無しさんNGNG
なんでコンパイルできないの?

class CA {
public:
virtual ~CA() = 0;
};

class CB : public CA {
public:
~CB() { std::cout << "~CB()\n"; }
};

class CC : public CB {
public:
~CC() { std::cout << "~CC()\n"; }
};

int main()
{
CA* cap = new CC;
delete cap;
}
0577デフォルトの名無しさんNGNG
>>576
純粋仮想関数であってもデストラクタの場合は実体が必要。
だから

CA::~CA() {}

などの定義を行えばよい。
0578デフォルトの名無しさんNGNG
>>577
即レスありがとうございますぅ。でもどうしてデストラクタの場合だけ
実体がないとエラーになるのでしょうか?C++3rdのどの当たりにその
ような事が書いてあるかわかりますか?
0579デフォルトの名無しさんNGNG
腐ってんね。
0580デフォルトの名無しさんNGNG
>>578
Effective-C++のP83にそのような事が書いてある。

デストラクタは純粋仮想関数の中でも特別な扱いで、基底クラスのデストラクタ
の呼び出しをコンパイルしてしまうため、リンク時にエラーになるとある。

他の純粋仮想関数ではこうはならない。
0581デフォルトの名無しさんNGNG
>>580
どうもありがとうございます。もう少しデストラクタについて勉強
してみます。
0582デフォルトの名無しさんNGNG
class hoge {
public:
 virtual void huga() = 0;
};
void hoge::huga()
{
 cout << "huga" << endl;
}
0583デフォルトの名無しさんNGNG
>>582
その場合huga()はどうやって呼び出すの?
0584デフォルトの名無しさんNGNG
class hage: public hoge {
public:
 void huga() {}
 void age() { hoge::huga(); }
};
int main()
{
 hage sage;
 sage.age();
 return 0;
}
0585デフォルトの名無しさんNGNG
>>584
なるほど・・・・こうなると、純粋仮想関数も糞もあったもんじゃないですね。
直接呼び出せなくなっているだけで間接的には呼び出せるのか。
0586デフォルトの名無しさんNGNG
>>561
g++3.0でこんな実験をやってみた。
typedef int *intp;
const int *x(0);
としておくと、
int *y(0), int (*y)(0), int *(y(0)), int (*y(0)), intp y(0)
は全部同じエラー(const外し)になって、
intp y = intp(x);
は通った。intp(x)はCスタイルの(intp)xと同じになるみたい。
参考までに。
0587デフォルトの名無しさんNGNG
int main()
{
 int i(); //default constructor?
 i = 0; //oh error!
 return 0;
}
0588デフォルトの名無しさんNGNG
>>586
> const int *x(0);
え?
0589588NGNG
> const int *x(0);

これ何でコンパイル通るの?
* 演算子より () 演算子の方が優先順位高いはずだけど・・・。
0590543NGNG
>>562さん 

詳しい説明ありがとうございました。

そのおかげで何とかできました。

今は、自作関数をC++に書き直してているのですがまた分からない事があったらよろしくお願いします。
0591デフォルトの名無しさんNGNG
const int * x = 0;
0592588NGNG
>>591
いや、const int (*x)(0); ならそうなるのもわかるんだけど。
const int *x(0); なのにそうなるのなら理由がわからない。
0593587NGNG
>>589
xは0で初期化され、その型はconst int *である、と読めると思うが?
それよりint (*x)(0);が通るのが不思議。*xが0で初期化される、と
読まれて、エラーになりそうなものだが、int *x = 0;と同じように
解釈されている。まあint *x = 0;だって、普通の優先順位で考えたら
*xが0になりそうなものだが。・・・今試してみたら、
int (*x) = 0;
が通ったよ。
0594デフォルトの名無しさんNGNG
>>589
変数宣言の所の * とか [] とか () とかは演算子ではないと思うが。
コンストラクタ呼び出しの()はともかく。
0595588NGNG
>>593
int (*func)(int arg); って例があるもんだから。
・・・あれ? 余計混乱してきたような・・・。
>>594
うーん、「そういうものだ」 と思い込むしかないのか・・・。
0596ageNGNG
vc6.0のデバッグで関数に飛ぶと 
シンボル this
値    error変数にスタックフレームが必要です
という のが表示されてしまっています。

これはどのような時に表示されるのでしょうか?
特に実行がおかしいわけではないのですが気になってしょうが
ありません。
0597デフォルトの名無しさんNGNG
>>596
標準スタックフレームの生成を外しているとか。
0598デフォルトの名無しさんNGNG
大抵の関数には、突入時に、自動変数領域の確保や
引数の取り出し用に、ebp,espを操作します。
スタック操作が完了していない場合、
「変数にはスタックフレームが必要」が出てくると思われます。

class A{ public:int Val;
void setA(int v)
{Val = v; }
void setB(int v)
{
Val = v;
}};
int main()
{A a;
a.setA(2);
a.setB(55);
}
ウオッチウインドウにthisを追加して、上のコードをステップ実行すれば、
大体わかるとおもいます。混合モードをステップ実行するのも良いでしょう。
0599デフォルトの名無しさんNGNG
Visual Fortranで作成したプログラムをVC++上で走らせるにはどうしたらいいですか?
一応C++に移植したのですが変な動作するので、あきらめてフォートランの方のを
使おうと考えているのですが。
0600デフォルトの名無しさんNGNG
>>599
答えられる奴は神
0601デフォルトの名無しさんNGNG
>>599
DLLにするのが賢い気がする。
0602デフォルトの名無しさんNGNG
>>599
そりゃ、忠実に移植するしかないだろ。
0603デフォルトの名無しさんNGNG
こんにちは。質問させてください。

C言語で
struct main_data{
double z
}data;
(struct main_data*)malloc(sizeof(struct main_data)*810000)
というふうに構造体を作りメモリを確保し、

for(int i=0; i<900; i++){
for(int j=0; j<900; j++){
(data+j+i*900)->z = nodata;
}}

としたものがあります。

それをC++で
struct main_data{
double z[810000];
}data;
とし、newでメモリを確保したなら、
↑のfor文を書くならどうすればよいでしょうか?

どなたかよろしくお願いします。
0604デフォルトの名無しさんNGNG
>>603
C++でもmalloc使える。
0605デフォルトの名無しさんNGNG
てゆーかさ、メモリブロックをまとめて「配列として」確保したんだから、Cでも
for(int i=0; i<900; i++){
for(int j=0; j<900; j++){
data[j+i*900].z = nodata;
}}
とするのが普通だと思うんだが。
0606デフォルトの名無しさんNGNG
fill(&z[0], &z[810000], nodata);
0607603NGNG
>>604、605
レスありがとうございます。

すいません、書き漏れ。
C++で、
struct main_data *data0;
data0 = &data
としています。
自分は
data0->z[j+i*900] = nodata;
だと思うのですが、いかかでしょうか?
0608デフォルトの名無しさんNGNG
aha?
0609デフォルトの名無しさんNGNG
クラステンプレート内で仮想関数を宣言することに意味は見出せますか?
0610デフォルトの名無しさんNGNG
あは♪
0611デフォルトの名無しさんNGNG
>>609
割と。
0612デフォルトの名無しさんNGNG
>>611
具体例キボンヌ
0613デフォルトの名無しさんNGNG
> struct main_data{
> double z[810000];
> }data;

普通に

struct main_data{
double z[900][900];
}data;
じゃいかんのか?
0614デフォルトの名無しさんNGNG
       /■ヽ
      (´Д`)
  (( ─━OO━─ ))
        ∪∪
0615603NGNG
>613
多分いいと思いますが、いまさら書き直す気力がありません。。。
0616デフォルトの名無しさんNGNG
>>612
ATL の CWindowImplBaseT とか。
0617デフォルトの名無しさんNGNG
>>602
C から FORTRAN 側の関数を呼べるんじゃないかなぁ。VC++ は知らんが、
その昔 UNIX でやった覚えがある。
0618デフォルトの名無しさんNGNG
class explicit_class
{
public:
virtual explicit_class(){};//error
virtual ~explicit_class(){};
virtual explicit_class(const explicit_class&){};//error
virtual explicit_class& operator=(const explicit_class&) = 0;
virtual explicit_class* operator&() = 0;
virtual const explicit_class* operator&() const = 0;
};

コンパイルできないんだけど、やっぱり無理なんでしょうか?
0619デフォルトの名無しさんNGNG
コンストラクタにvirtual宣言?
0620デフォルトの名無しさんNGNG
>>619
サンクス
コンストラクタにはvirtual宣言できないのね。
コンストラクタの記述の強制はできないのか...。
//修正
class explicit_class
{
public:
explicit_class(){};
explicit_class(const explicit_class&){};
...後は同じ
};

class A :public explicit_class
{
public:
A(){}
A(const A& i){*this = i;}
~A(){}
A& operator=(const explicit_class& i){return *this;}//両方必要
A& operator=(const A& i){return *this;}//両方必要
A* operator&(){return this;}
const A* operator&() const{return this;}
};

int main()
{
A a,b;
a=b;
}
0621デフォルトの名無しさんNGNG
>>599
Fortranしらないんで、適当だけど
#define IF if(
#define THEN ){
#define ENDIF }
とかする。
0622デフォルトの名無しさんNGNG
>>621
そういう事は絶対にやめれ。
0623デフォルトの名無しさんNGNG
timeGetTime() ってどのくらいはかれるんでしょうか?一時間とかいけます?
0624デフォルトの名無しさんNGNG
>>623
WIN32API行き
0625デフォルトの名無しさんNGNG
vector について(?)です

class CTEST
{
  LPSTR  m_var ;
public:
  CTEST::CTEST() { m_var = new CHAR[10]; } ;
  CTEST::~CTEST() { delete [] m_var; } ;
  void operator = ( LPSTR lps ) { strcpy(m_var, lps); } ;
};

// 処理
...
 vector<CTEST>  vecTest ;
 CTEST      cTmp ;

 for ( long i=0; i < 10; i++ )
 {
   cTmp = "(・∀・)" ;
   vecTest.push_back( cTmp ) ;
 }

とすると、3回目の push_back で例外がボーン・・・
(→ HEAP[FORDEBUG.exe]: Invalid Address specified to RtlValidateHeap( 00370000, 00370FE0 )

ただし、メンバを LONG にしたり CHAR m_var[10] とかの場合は問題なしです。
動的に確保したものはダメなんでしょーか?
0626デフォルトの名無しさんNGNG
>>625
void operator = ( const CTEST& ) { ... } ;

こっちの代入演算子を定義してないからじゃないかな?
0627デフォルトの名無しさんNGNG
なぜ代入演算子の戻り値が void なんだ?
コピーコンストラクタもないし突っ込みどころ満載だな。
例外の原因は new CHAR[11] かな。
0628625NGNG
>>626 >>627
ありが�d。
解決しますた。

1. コピーコンストラクタが無いからデフォルトコピーコンストラクタが呼ばれる
2. メンバをそのままコピー
3. デストラクタであぼーん
ということですか。。。

下を追加したら動きました。

  CTEST::CTEST( const CTEST& cc)
  {
    m_var = new char[10];
    strcpy(m_var, cc.m_var) ;
  } ;
  CTEST &operator = ( const CTEST& cc)
  {
    if (this != &cc)
    {
      m_var = new char[10];
      strcpy(m_var, cc.m_var);
    }
    return *this;
  } ;
0629デフォルトの名無しさんNGNG
"(・∀・)" は char[10] に収まるの?
0630デフォルトの名無しさんNGNG
>>629
Shift-JIS で 8 バイトですが何か?
0631625NGNG
>>629
ぎりぎり入るけど
strcpy なのでアウトでしたね。
ていうか 初期化もしてなかったし・・・
回線切って首つってきます。
0632デフォルトの名無しさんNGNG
STL使っているなら素直にstring使えば。
0633デフォルトの名無しさんNGNG
class T { class N{}; };

↑で定義される T::N を、
class T; みたいに名前の宣言だけってできますか?
class T::N; だとエラーになります。
0634デフォルトの名無しさんNGNG
>>633
>できますか?
試しなさいよ。

構造体と事情は一緒ではなかったかい?
0635633NGNG
> 試しなさいよ。
> 構造体と事情は一緒ではなかったかい?

事情が同じなら class T::N; で試した段階で
宣言できて欲しいところですが。
エラーになるデスヨ。
0636デフォルトの名無しさんNGNG
>>635
T クラスが事前に定義されていないと T::N のように限定することはできなかったと思う。

0637その1NGNG
class Class_Test079{
public:
class Class_Test080;
class Class_Test081;
class Class_Test080{
public:
Class_Test081* m_pointer;
Class_Test081* Func(){cout<<"\nClass_Test080::Func"<<endl;return m_pointer;}
}hoge;

class Class_Test081{
public:
Class_Test080* m_pointer;
Class_Test080* Func(){cout<<"\nClass_Test081::Func"<<endl;return m_pointer;}
}hage;
};
0638その2NGNG
int
main(){//確認用
class Class_Test079 a;
a.hoge.m_pointer = &a.hage;
a.hage.m_pointer = &a.hoge;
a.hoge.m_pointer->Func()->Func()->Func()->Func()->Func()->Func()->Func()->Func()->Func()->Func()
return 0;
}
0639その2'NGNG
おっとmainのFunc()にセミコロンが抜けた。

こういうことがやりたかったのか?
0640デフォルトの名無しさんNGNG
私の悩み、聞いてくれます?
C覚えて、その後Java覚えて、再びCのプログラム書こうと
してるけどJavaの悪い癖(参照)がついてしまって、なかなか
ポインタが使えません・・・
リスト構造関連の優秀なWebページを教えていただけませんか?
あ、「猫でも分かる・・・」は勘弁してください。デムパ嫌いですから。
0641デフォルトの名無しさんNGNG
>>629
6バイトでいけるんちゃうか?
0642デフォルトの名無しさんNGNG
>>640
> 私の悩み、聞いてくれます?
> デムパ嫌いですから。

そうですか。それは大変ですね。
0643デフォルトの名無しさんNGNG
>>640
ここはC++相談室ですが?
0644633NGNG
>>639
うーん、class T が定義されてるヘッダをインクルードせずに、
T::N の名前を使いたい・・・。
こうして書いてみると、できなくてあたりまえのような気がしてきたり。
0645デフォルトの名無しさんNGNG
メンバに含めるって事はサイズがわからなきゃダメだから
宣言だけでは無理だよ
0646639NGNG
というかnamespaceの問題だと思う。
T::ときたらTの名前空間はコンパイラが知っていなければ
ならない。
0647名無しさん@EmacsNGNG
継承とポインタをからめたんだけど:

class Base {
 int a;
};

class Derived : public Base {
 int b;
};

void
aho(Derived *p)
{
 Base *p1 = p;
 Base b;
 *p1 = b;
}

で、 *p に Base の instanceが入っちゃうじゃん!!
っていうのは問題じゃないの?
型安全性が... とか考えちゃうんだけど。

0648デフォルトの名無しさんNGNG
>>647
class Base
{
public:
  Base() { a = 1; }
  virtual void print() { cout << "Base: " << a << endl; }
protected:
  int a;
};

class Derived: public Base
{
public:
  Derived() { a = 3; b = 5; }
  void print() { cout << "Derived: " << a << ", " << b << endl; }
private:
  int b;
};

void aho(Derived *p)
{
  Base *p1 = p; cout << "p1->print(): "; p1->print();
  Base b; cout << "b.print(): "; b.print();
  *p1 = b; cout << "p1->print(): "; p1->print();
}

Base 分のメンバだけはコピーされる。
Derived 分のメンバはそのまま。
それが問題というなら問題だけど、そうでないならどうでもいいと思う。
0649デフォルトの名無しさんNGNG
Baseの代入演算子をprivateあるいはprotectedにしとけば
一応回避はできるね。

その手の本を読むと、「コピーコンストラクタと代入演算子は
定義するか、あるいはprivateにせよ」と書いてある。
0650デフォルトの名無しさんNGNG
typedef使えばいいんじゃん。
#include<iostream>

struct a{
struct b{
b(){ std::cout << "test"; }
};
};
typedef a::b b;

void f(){
class c{};//関数内のクラスはfinalです
}

int main()
{
a A;
b B;
//c C;//これはコンパイルできない
}
0651デフォルトの名無しさんNGNG
>633
T::Nを必要とする部分をテンプレートにしてまえば、
前方宣言要らへんのとちゃう?
0652デフォルトの名無しさんNGNG
>>647
もちろん問題だが、もしそれを解決しようと思ったら常に

 そのポインタが指してるデータの型は、本当は何?

っつーのをチェックする必要がある。これはコストが大きいから、C++ では
敢えて危険な方をデフォルトにしてる。

C++ だと継承を使っているオブジェクトに関しては、値のコピーはふつー
認めないように operator=() を private にしておく。ポインタのコピー、ある
いは参照を常に使い、操作はメンバ関数 (往々にして virtual) で。
0653デフォルトの名無しさんNGNG
> そのポインタが指してるデータの型は、本当は何?

これを言語レベルでやるなら、VB の Variant 型を実装する事になるな。
void* ポインタに対して任意のメソッドが使えたりして。
0654名無しさん@EmacsNGNG
>>648 それは確認したんで、主張としては弱いかと思ったんだけど。
>>649,652 やぱーり知られた問題で解決法があったんだねえ。
たしかに copyを制限して、フツーの OOPLみたいにするのがいいんだろうね。

あと、 int (*)(const T&) と int (*)(T&) の間のキャストとか
vector<const T> と vector<T> の関係とか気になったのだけど、
ここらもおしてしるべしかしらん。

void* を int* に変換できなかったり、多重継承したクラスのポインタを
親クラスのポインタにすると値が変わっちゃうぐらい気を使ってるんだから
そこらへんもなんとかなってほしかった C & Haskell使いでした。
0655デフォルトの名無しさんNGNG
>>654
関数ポインタは、いずれもキャスト可能。しかも C 時代の遺物だから
実行時型情報は使えないので危ないことこの上ない。C++ 的には、
関数オブジェクトを使うのがお奨めかと。

> そこらへんもなんとかなってほしかった
まぁ、過去との互換性の問題とか何とか、いろいろしがらみ多い言語
だから。

コピー禁止に関しては boost を入れて boost::noncopyable を継承する
のが楽。#inculde と合わせても 2 行で済むし。
0656デフォルトの名無しさんNGNG
メンバー変数を配列にすることはできないんでしょうか?
0657デフォルトの名無しさんNGNG
class Hoge
{
 int hogehoge[100000];
};
ならできるけど、そういう話じゃなくて?
0658デフォルトの名無しさんNGNG
>>657
すいません、説明不足でした。

hairetu[10000]={ m_member1 , m_member2 , ................. }

みたいなことをやりたいんです。
メンバ変数を連番にしているのでfor文とかで使いたいと
思ったのですが。。
0659デフォルトの名無しさんNGNG
>>658
657 にすればいい話じゃなくて?
どうしても名前付き変数名とインデックスを使い分けたいなら、union にでもすれば。
0660659NGNG
「名前付き変数名」 って何かおかしいけどナー。
0661デフォルトの名無しさんNGNG
>>658
…
(・∀・)?
0662デフォルトの名無しさんNGNG
>メンバ変数を連番にしているのでfor文とかで使いたい
配列の立場は・・・?
0663デフォルトの名無しさんNGNG
>>658
なにしたいんだかよくわからん

struct hoge {
int arr[100] ;
} ;
ならば
hoge h={1,2,3,4} ;
または
hoge i={{1,2,3,4}} ;

それとも
struct hoge {
int a1 ;
int a2 ;
int a3 ;
} ;
で
int hoge::*p[3]={&hoge::a1,&hoge::a2,&hoge::a3} ;

とか
0664デフォルトの名無しさんNGNG
>>658
enumで定数を定義して定数と要素数に対応した
処理で決着というオチが見えるのだが。
0665デフォルトの名無しさんNGNG
class Hoge {
 int m_member1;
 int m_member2;
 ...
 int m_member10000;
}

という 「定義済みの」 class があって、そのメンバを 「外部から」 配列で
使いたいという話か? なら、

   設 計 か ら や り 直 し て く れ 。

どうしてもと言うなら
int *hairetu[10000] = { &m_member1, &m_member2, ... &m_member10000 };
for(int i = 0; i < 10000; i++)
 DoSomething(*hairetu[i]);

でも繰り返すが、

   設 計 か ら や り 直 し て く れ 。

そもそも連番のメンバ名なんか使うな。
くれぐれも、設計からやり直してくれ。

COBOLer のにほいがぷんぷんと・・・
0666デフォルトの名無しさんNGNG
>>657-665
大人なんだから望みをかなえてやれヨ!

#include "boost/preprocessor/repetition/repeat.hpp"
#include "boost/preprocessor/punctuation/comma_if.hpp"
#define MEMBER_MAX 10000
#define MACRO(z,n,d) BOOST_PP_COMMA_IF(n) d##n
class A {
public:
int BOOST_PP_REPEAT(MEMBER_MAX, MACRO, m_member);
};
int main() {
A a;
int hairetu[MEMBER_MAX] = {BOOST_PP_REPEAT(MEMBER_MAX, MACRO, a.m_member)};
return 0;
}
0667デフォルトの名無しさんNGNG
>>666
658 の望みは叶えられない方が周りが幸せなんだが。
つーか、class 定義いじれるなら union でいいだろ。
0668デフォルトの名無しさんNGNG
JDK1.4を入れてたんだけど
さっきインターネットしてたら、1.2がインストールされて、デフォルトが1.2になっちまったよ。。
どうすれば1.4に戻るの?コントロールパネルのJava-Plug Inをどうにかするの?
0669デフォルトの名無しさんNGNG
>>668
ここはC++スレッド
0670デフォルトの名無しさんNGNG
ID「C++」でますた…
0671デフォルトの名無しさんNGNG
>>670
どこ
0672デフォルトの名無しさんNGNG
クラスを作成してその中で配列を使うとき、

class A{

public;
char a[70][2];
................
}
として
コンストラクタで初期化するときに

a[70][2]={"aa","bb",......}

というように一度に初期化はできないんでしょうか?
0673デフォルトの名無しさんNGNG
>>672
言ってる意味分からん。
どうでもいいが、文字2つを文字列として扱うなら、 a[70][3] じゃねーの?
0674デフォルトの名無しさんNGNG
>>672
普通,
const char default_a_table[70][3?] = {
 "aa",
 "bb",
};
コンストラクタ
memcpy(a, default_a_table, sizeof(a));
0675デフォルトの名無しさんNGNG
コンストラクタでクラス内で使用したい変数を new した際に、
new できずに返り値として NULL が返った場合どういった処理をすればよいのでしょうか?
クラスの使用者に安全に使ってもらうためにはどうしたらよいのでしょうか。
例外を投げたりして教えるのでしょうか?
0676デフォルトの名無しさんNGNG
newは新規作成できない場合std::bad_allocを投げますが…
NULLで判断するのは一昔前の話では
0677デフォルトの名無しさんNGNG
VCを使っているのですが、出力結果を標準出力から
テキストファイルに変更するにはどうしたらいいでしょうか
0678デフォルトの名無しさんNGNG
freopen(stdout, "ファイル.txt", "wt");
0679677NGNG
"wt"というのは何ですか。
すいませんが教えてください。
0680デフォルトの名無しさんNGNG
>>679
VC使ってるならコードをコピってF1押せ。
特定の関数のフラグなんか、2chで聞くよりヘルプ見たほうが早いだろ
0681デフォルトの名無しさんNGNG
(・∀゚) <っ…コメントネェヨ
0682デフォルトの名無しさんNGNG
2つ構造体同士のコピーについて質問です。
typedef struct { // 1
char * tekitou; // 2
}DATA; // 3
DATA * original; // コピー元 4
DATA * copy; // コピー 5

original = new DATA; // 6
/* 本来データはあらかじめ存在する値
ここでは適当に作っただけ */

char input[]="sage"; // 元の構造体を適当につくる 7
original->tekitou=(char *)malloc((strlen(input)+1)); // 8
strcpy(original->tekitou,"sage"); // 9

// original を copy にコピーする
copy = new DATA; // 10
copy->tekitou=(char *)malloc( ?????? ); // 11

11行目でも領域確保はどのようにしたらよいのでしょう?
strlen(original->tekitou) でも sizeof(original->tekitou) でもだめですよね。sage という文字数を判別するにはどーしたらよいのでしょうか?
0683デフォルトの名無しさんNGNG
↑省略されて見るの面倒ですが、マジで困ってるのでどなたかおねがいします
0684デフォルトの名無しさんNGNG
C++と全然関係ないない。sage
0685デフォルトの名無しさんNGNG
>>676
ありがとうございました。
new(nothrow) すると例外投げずにできるんですね。
0686デフォルトの名無しさんNGNG
失礼します。相談したいです。

構造体のメモリ確保に関しての質問です。
プログラム開始後、
自分の指定した数だけ構造体を作りたい時はどうすればよいですか?


例えば
cout<<"データ数は?\n";
cin >> num;
などとした後

struct data{
double a[10000];
double b[10000];
double c[10000];
}data,*datap;
datap = &data;
このような構造体をnumの数だけ確保したいとき、
どうしたらよいでしょうか?

datap = new data ???????;
↑??????らへんの書き方がよくわかりません。

どなたかよろしければアドバイスお願いします。
0687デフォルトの名無しさんNGNG
クラス名とインスタンス名が同じ名前になってるぞ。

struct Data{...
}data,*datap;
datap = new Data [num];
delete [] datap;
0688デフォルトの名無しさんNGNG
>>687
書き間違えていましたね。
アドバイスありがとうございましたー
0689686NGNG
686の者です。
すいません、書き方間違えていました。
numの分だけ構造体メンバーの配列を増やしたいでした。
つまり
struct Data{
double a[10000*num];
double b[10000*num];
double c[10000*num];
}data,*datap
という感じで。
ただ、この形じゃあコンパイルがとおらないので、
どなたかよい方法教えていただけませんか?
0690デフォルトの名無しさんNGNG
素直にvector使っと毛
0691デフォルトの名無しさんNGNG
>>689

struct Data{
Data(int num){
a=new double[10000*num];
b=new double[10000*num];
c=new double[10000*num];
}
double* a;
double* b;
double* c;
...
0692686NGNG
>>690
さきほどvectorについて調べました。
まだ初心者なのでなかなか難しそうです。
その方法しかなければ勉強するしかないのでがんばります。
0693686NGNG
>>691
おー!ありがとうございます。
早速試してみます。
0694デフォルトの名無しさんNGNG
文字列と整数をキーにしたオブジェクトを溜め込むのにmapを使って、

struct key {
string name;
int num;
};

typedef map<key, ClassName> ClassTable;

このような宣言ってありですか?
とくにstruct keyのここでの使いっぷりってどうなんでしょ?
0695デフォルトの名無しさんNGNG
keyには適切な比較演算子、代入演算子、コピーコンストラクタが
定義されていればなんでもいいんじゃなかろうか。
0696デフォルトの名無しさんNGNG
>>694
> とくにstruct keyのここでの使いっぷりってどうなんでしょ?

1. Assignable, すなわち Key 型の変数 t, u に対して t = u を実行すると、
 t と u が等しくなり、その式の戻り値は Key& 型である。

2. map テンプレートクラスの第三引数 Compare (デフォルトでは std::less<key_type>) に
 よって、厳密な弱い順序づけ (strict weak ordering) がなされる。すなわち
 Key 型の変数 t, u は

  t と u が等しい <=> !Compare(t, u) && !Compare(u, t) が真

 である。

これが条件。

ダメな例を挙げると const int みたいに代入不可能であるとか、auto_ptr
のように代入後の値が異なってしまうもの。それから Compare を

 t <= u

みたいな定義にするのもダメ。これだと

 !Compare(t, t) && !Compare(t, t) = !(t <= t) && !(t <= t) =
 !ture && !true = false && false = false

となってしまい、2 の条件に反するから。
0697686NGNG
>>691
ちょっとうまくできません。
これはメモリを確保するために、
構造体のポインタをこう定義しているのですか?

構造体メンバの動的配列のやり方って無理なんですかね。。。
0698デフォルトの名無しさんNGNG
その num の値はどうやって供給するつもりなんよ?
num が const なら >>689 のままでいけるし、変数なんだったら
>>691 のようにするしかあるめぇ。
0699デフォルトの名無しさんNGNG
686

 何 が や り た い ん で す か ?
0700686NGNG
>>698
numはcin>>numで供給するつもりでした。
>>699
もうちょっと勉強します。
0701686NGNG
本日はここまでです。
お疲れさまでした!
0702デフォルトの名無しさんNGNG
:-)
0703デフォルトの名無しさんNGNG
template <std::size_t Size>
struct data{
double a[Size];
double b[Size];
double c[Size];
};

data<num> data_instance;

…ってnumは変数か。std::vector<>使えばいいんでないの?
0704デフォルトの名無しさんNGNG
クラスを継承するときの関数のオーバーロードについて質問させて下さい。

下のようなクラスAとその継承クラスBを作りました。
Bのインスタンスを作成したとき、
BのコンストラクタではB::func(theta)を用いて処理を行って欲しいのですが
なぜかA::func(theta)が呼び出されてしまうようです。
どのように書けば意図した動作をしてくれるのでしょうか…?


class A{
protected:
virtual void func(double theta)=0;
public:
A(double theta){func(theta)を使った処理}
};

class B:public A{
protected:
virtual void func(double theta){オーバーライドさせたい処理}
public:
B(double theta):A(theta){;}
};
0705 ◆hMJAPH9PWA NGNG
コンストラクタ内では仮想関数は呼べないはずだよ。
A*を返す擬似コンストラクタを使えばいい。

// こんな感じで。
A* A::create(){
A* self = new A;
func(...);
return self;
}
0706デフォルトの名無しさんNGNG
mapの値に抽象クラスを入れるのは無理?
0707 ◆hMJAPH9PWA NGNG
普通に無理でしょ…値が作れたら抽象クラスじゃなくなっちゃうよ。
抽象クラスのポインタなら行けるだろうけど。
0708デフォルトの名無しさんNGNG
vector<int> *vect;
ってなんなの?
0709デフォルトの名無しさんNGNG
>>708
vectはstd::vector<int>を指すポインタ。
0710デフォルトの名無しさんNGNG
>>880
qsort()ならsearch.hをインクルードしてるから大丈夫だよ。
0711デフォルトの名無しさんNGNG
>>710は誤爆です。ス マ ソ
0712デフォルトの名無しさんNGNG
>>708
vector<int>objectを将来指すであろうpointerのdeclaration。
0713デフォルトの名無しさんNGNG
>>708の宣言のあと、

vect = new vector<int>;
vect->push_back(1);

とかでいいんですか?
使い方は。
0714デフォルトの名無しさんNGNG
>>713
STLスレッドにおいで。議論がされてるよ。
0715デフォルトの名無しさんNGNG
>>714
stlスレ見ました。
誘導ありがとうございますた。
0716デフォルトの名無しさんNGNG
下みたいに、参照に null pointer を代入するのって、規格上許されてる?
g++ だとコンパイルできて期待通り動くんだけど、実装依存なんてことも
あるんでしょうか。

#include <iostream>
int main()
{
int& ri = *((int*)0);
if (&ri == 0) {
std::cout << "null reference" << std::endl;
}
}
0717デフォルトの名無しさんNGNG
*((int *)0);

これってポインタなのか?
ポインタを間接参照しているようにみえるが。
0718716NGNG
>ポインタを間接参照しているようにみえるが。
そう。まさしくそう見えるので不安なわけです(w
0719デフォルトの名無しさんNGNG
規格はどうだか知らないけど、VC のリスティング見ると内部的にポインタに
なってるみたいだね。

int *p = (int*)0;
if (p == 0) { ...

と同じ処理になってる。
*p や ri を使おうとすると、たちどころにアクセス違反になる。
0720デフォルトの名無しさんNGNG
C++3rdの5.5には初期化子は左辺値であればいいみたいなことが
書いてあるけども
0721 ◆hMJAPH9PWA NGNG
*((int*)0)はnull pointerを参照している事にはならないんだろうか。
0722716NGNG
720> 初期化子は左辺値であればいいみたいな
つまりは、&(*((int*)0)) が有効な式になるかどうかってことかな。
0723720NGNG
ということだと思うんですけども。
単項の * って左辺値つくり出んじゃなかったっけ、、
0724デフォルトの名無しさんNGNG
参照への代入に限って違うとか。
0725デフォルトの名無しさんNGNG
int main()
{
int &r = *((int*)0); //平気
int c = *((int*)0); //だめぽ
int &rr = r; //こっからダミー
int cc = c;
return 0;
}
0726デフォルトの名無しさんNGNG
castは新しいのをね。
0727デフォルトの名無しさんNGNG
みなさん、コンストラクタから例外投げてますか?

今までは「絶対に」投げてはいけないと思っていましたが、例外を投げても良い場合もあるんだという考え方もあるようで、

どっちが正しいのかよくわかんない。。。

 ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdndeepc/htm/deep02172000.asp

を読みましたが良くわかりませんでした。誰か頭の良い人、フォローしてください。
0728デフォルトの名無しさんNGNG
exceptional C++ を読みましょう >>727

0729デフォルトの名無しさんNGNG
exceptional C++ は買ったが読めないす。誰かフォローして。(今日はもう終電なので帰ります)
0730デフォルトの名無しさんNGNG
>>727
そのページに
> 例外をスローすべき十分な理由があるなら、進んでその例外を
> スローして、それを文書化すればよいのです。例外をスロー
> するのが当然の場面で、例外のスローを回避する方法を
> 発明する必要はありません。複雑にすることで、制限された
> バージョンのクラスを誰かが誤用する危険よりもかえってひどい
> 保守の悪夢が生まれてしまいます。
と書いてあるではないか。

というか、あなたが何故『「絶対に」投げてはいけない』と思うのかが謎なのだが。
0731デフォルトの名無しさんNGNG
main()
{
  const unsigned N = 1;
  try{ for(;;) new int[N]; }
  catch( ... ){}
}

↑のプログラムが、Aborted(core dumped) になってしまいます。
なにが起こっているんでしょうか?

N = 1024 にしたら無言で終了しました。(これが期待の動作)
環境は、 cygwin g++-3.1.1 です。
0732デフォルトの名無しさんNGNG
後始末の処理にもヒープメモリを必要とするからじゃないの?
0733731NGNG
ちょっと調べてみたんだけど、
漏れの結論は
「std::bad_allocを投げるのに動的メモリを必要とするようなg++の実装がクソ」
になりました。
・・・いいのかなぁ?
0734デフォルトの名無しさんNGNG
>>727
例外安全にしたければ Pimpl パターンを使えってこった。
0735デフォルトの名無しさんNGNG
>>734
いつも思うんだが・・
pimplってどう発音してる? ぴーいんぷる? ぴんぷる?
0736デフォルトの名無しさんNGNG
C++ FAQでは、コンストラクタでスローしろと書いてあったような記憶がある…
0737デフォルトの名無しさんNGNG
>>735
漏れはぴーいんぷる。

>>736
漏れも C++ FAQ でそういう話見た気がする。
0738デフォルトの名無しさんNGNG
デストラクタでthrowする香具師はドキュソ。とりあえずそれだけでいい
んじゃないすか。>727

0739デフォルトの名無しさんNGNG
>>735
俺はぴーいんぷり。

>>727
普通に投げる。何か問題ある?
0740デフォルトの名無しさんNGNG
>>727
例外は、戻り値がない コンストラクタ で一番威力を発揮するもんだろうが。
>>735
ぴーいんぷる
0741デフォルトの名無しさんNGNG
>>738
前から思ってたんけど 香具師 をきちんと辞書で調べたか?
0742デフォルトの名無しさんNGNG
>741
既出の読みはガイシュツではない。とか言い出す予感
0743デフォルトの名無しさんNGNG
2ちゃん用語でウンチク語りだすのか(w
恥ずかしいなぁ。まあ2ちゃん用語自体恥ずかしいが。
0744困っていますNGNG
マウスでドラッグ選択した部分の描画を拡大縮小する良い方法ありませんか?!参考になるものでも結構です。
お願いします。
0745デフォルトの名無しさんNGNG
StretchBlt()
0746デフォルトの名無しさんNGNG
>>743
2ちゃん内では別に恥ずかしくない
0747デフォルトの名無しさんNGNG
むしろ 「(w」 りの方が恥ずかしい
0748デフォルトの名無しさんNGNG
り?
0749デフォルトの名無しさんNGNG
自分の為のライブラリ、作ってますか?
0750747NGNG
漏れも恥ずかしい
0751デフォルトの名無しさんNGNG
>>747
(w
0752デフォルトの名無しさんNGNG
ちょっとMFC系の質問なのですが、(あえてC++)
CString s; に1文字格納されているとして、
それを char 型の変数に代入するにはどうすればよいのでしょうか?
0753デフォルトの名無しさんNGNG
なにが「あえて」だ!ドシロウトめ!s[0]だ!読んだらすぐ氏ね!
0754デフォルトの名無しさんNGNG
>752
char buf
_tcscpy(&buf, s);
こうすれば、代入できます。

>753
しぬのはてめえだよ。ドシロウト。
char に CStringが直接代入できるわけねーだろ!
試してみろ!
素人もいます。公開掲示板では以後、言葉を慎むように。

0755デフォルトの名無しさんNGNG
>>754
お前が氏ねよ!!
s[0]をcharに代入すると書いてあるだろう!お前の目はふしあなか?(プ
0756デフォルトの名無しさんNGNG
s は CString で宣言されていますよ。上では。
0757752NGNG
>754
有難うございます。
黙ってみていてすいません。
本当に初心者ですが、これからもよろしくお願いします。
0758デフォルトの名無しさんNGNG
アカン。ネタなのかマジなのか判らなくなってきた。

とりあえず>>752はCStringの[]演算子が何を返すかマニュアル見て来た方がいいぞ。
君はネタではないと信じているぞ。
0759753NGNG
>>754
じつはMFC使ったことなくって今試してみたんだけど(って言うか試すまでもなく)
_tcscpyだとメモリ破壊してんじゃねえか!?
0760デフォルトの名無しさんNGNG
754 晒し age
0761デフォルトの名無しさんNGNG
おいおい、charに入れるんだぞ。TCAHRじゃねーぞ。
754は_tcscpyを使ってるくせになんでcharなんだ(致命的ミスは別にして)。
CString::operator[]もTCHARを返すだけだぞ。

char c;
CString s("a");
USES_CONVERSION;
c = T2A(s.GetBuffer(1))[0];
・・・たぶん、752が求めてるのはこんなんじゃないだろうな。
つーか、すれ違いだバカ野郎!
0762デフォルトの名無しさんNGNG
761だが、GetBufferのパラメータは3以上にしろ。バカ野郎。
0763デフォルトの名無しさんNGNG
おまえら、面白すぎだバカ野郎
0764デフォルトの名無しさんNGNG
newで作ったポインタを破棄する関数を作ろうと、
CMyWnd* pWnd = new CMyWnd;

DelObject(pWnd);

DelObject(CMyWnd* pWnd){
delete pWnd;
}

としたんですが、これで正しく破棄されてるんでしょうか?
0765デフォルトの名無しさんNGNG
>>764
そのコードの通りに実行されるなら (途中で DelObject() の実行の阻害に
なるような事をしていなければ) 破棄される。
CMyWnd ではなく、自作の簡単なクラスを使って確認してみればいい。
0766デフォルトの名無しさんNGNG
VC6SP5用Loki
ttp://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport

既出?
0767C++なんだけどNGNG
どうして4度目のprintf()の行をコメントアウトすると
エラーが発生しなくなるんですか?

#include <iostream.h>

void f(char str){str++;}

main(){
char *str, **pp;
str = new char[5];
strcpy(str, "abc");
*pp = str;

f(*str);
printf("%#x %s\n", *pp, *pp);
f(*str);
printf("%#x %s\n", *pp, *pp);
f(*str);
printf("%#x %s\n", *pp, *pp);
f(*str);
printf("%#x %s\n", *pp, *pp);

delete [] str;
}
0768質問!!NGNG
ベクターファンクションのプログラムでOperation+とOperation-のファンクションはどうやって作ったらいいか、分かる方返信お願いしますううう。
0769デフォルトの名無しさんNGNG
>ベクターファンクションのプログラム
意味不明

>Operation+とOperation-のファンクション
意味不明
0770デフォルトの名無しさんNGNG
>767
ppはどこを指してるのかな?

# ただポインタがわかってないだけで、全然C++じゃないけどな
0771デフォルトの名無しさんNGNG
http://pc3.2ch.net/test/read.cgi/tech/1036597434/355
か?
0772C++なんだけどNGNG
*pp = str;
によって、ppは、char*型のstrのアドレスを指しているんでしょ?
0773デフォルトの名無しさんNGNG
やっぱポインタの基本からやり直しなさい
0774デフォルトの名無しさんNGNG
char *str;
*str = 'A';

↑こうした時の動作については、どんな本にも書かれていると思うが。
0775デフォルトの名無しさんNGNG
ゆんゆん。
0776デフォルトの名無しさんNGNG
(´-`).。oO(漏れがあっちのスレで教えた事をもー忘れたのか。。。)
0777C++なんだけどNGNG
ppの容量が確保されてないから
*ppも使えないってことかな?
0778デフォルトの名無しさんNGNG
DJGPP
http://www.delorie.com/djgpp/

C++コンパイラらしいけど、どうよ?
0779デフォルトの名無しさんNGNG
>>778
なんかえらく懐かしい記がする。よく知らんけど
0780デフォルトの名無しさんNGNG
DOSエクステンダ時代に有名だったねえ
0781デフォルトの名無しさんNGNG
>>778

これのおかげで 98 時代に UNIX のゲームで遊べた。
商用のコンパイラは高かったし、98 用のバイナリは殆ど無かったし。
0782デフォルトの名無しさんNGNG
range_error と out_of_range の使い分けの仕方を教えてください。
0783デフォルトの名無しさんNGNG
>>778
一瞬、 djbcpp に見えた。

>>782
http://www.coyotegulch.com/algorithm/cpp/exceptions.html
これじゃ参考にならんかね?
0784778NGNG
俺も全然知らないんだけどstroustrupのwebサイト見てたら見つけたんで気になった。
0785デフォルトの名無しさんNGNG
質問です。VC++ 6 で
コンストラクタの初期化リスト中で this を使うと

(this が) ベースメンバ初期化リストで使用されました。

という警告が出るんですが、これって何故いけないのでしょうか?
検索して調べたあるページには

非静的メンバ関数の中でのみ有効な this ポインタが基本クラスの初期化リストで使用された

という意味だと書いてあったのですが、コンストラクタですから
非静的ですし、問題ないと思うのですが…。

何がいけないのか、どういう事に注意するべきなのか教えてください。
よろしくお願いします。
0786デフォルトの名無しさんNGNG
>>785
初期化リストは、コンストラクタの内側じゃないんだと思います。
0787786NGNG
動作に問題がないならとりあえず、#pragma warning(disable:4355) で
黙らせていいんじゃないですか?
0788デフォルトの名無しさんNGNG
>>785
まだ初期化が完了していないオブジェクトへのポインタを使ってることになるからだろ。

初期化済みのオブジェクトを期待している関数の引数に
コンストラクタの中から this を渡してもコンパイルは通ってしまう。
0789デフォルトの名無しさんNGNG
>>785
致命的なのは、渡した this 経由で派生クラスの仮想関数を呼ぶ場合やね。

class CallFoo;
class Base {
  CallFoo call_foo_;
public:
  Base() : call_foo_(*this) {}
  virtual void foo() = 0;
};

class Deriv {
public:
  virtual void foo() {}
};

class CallFoo {
public:
  CallFoo(Base& obj) { obj.foo(); }
};

Deriv deriv;  // Base::foo() を呼んで実行時エラーで止まる。

コンストラクタの実行が終わるまでは this が指すのは Deriv クラスの
インスタンスとは限らない。Base クラスの初期化リストを実行する場合
は、まだ this は Base クラスのインスタンスになってる。
0790デフォルトの名無しさんNGNG
蛇足。

>>789の場合だと、Base::Base()の中で this->foo(); しても落ちるね。

Javaと違うから両方やってる人は要注意
0791デフォルトの名無しさんNGNG
落ちるかどうかは環境によるだろ
何事もなくベースのfooが呼ばれるコンパイラもある。
0792デフォルトの名無しさんNGNG
>791
Base::foo() が純粋仮想関数でも?

もし Base::foo() が単なる仮想関数なら、何事もなく Base::foo() が呼ばれるのは
確かだが。ただし、プログラマの意図と異なる可能性が高い。
0793785NGNG
皆さんレスありがとうございます。
>>786
確かにコンストラクタの内側ではないですね。
VC++ 用のプラグマの指定は教えてもらえて助かりました。
後少しで警告を我慢し続けなければいけないところでした。

>>788
そういえばそうですね。(今回は)参照に設定する為に渡すんだったので、
対象側のコンストラクタで渡す側のメンバを触る事まで気が回りませんでした。

>>789
これは気をつけないといけませんね。

>>791
報告:参照に代入して、構築完了後に使う限りでは
VC++6.0, Borland C++, g++ のいずれでも問題ありませんでした。

みなさんありがとう。
0794785NGNG
age てしまいました。スミマセン。

>>792
その場合はどう考えても落ちますよね。
0795785NGNG
お世話になってます。 >>785 です。またも質問です。
テンプレート引数にメンバ関数を渡したくて下記のようにしました。

#include <iostream>
template<typename T, void (T::*Use)()>
class Hoge
{
public: void Bomber(T arg) { (arg.*Use)(); }
};
class CFoo
{
public: void Use() { std::cout << "使われますた。"; }
};
int main()
{
CFoo honya;
honya.Use();

Hoge<CFoo, CFoo::Use> chome;

chome.Bomber(honya);

return 0;
}

Borland C++ だとちゃんとコンパイルできるのですが
vc++ 6.0 だと 'Hoge' : テンプレートの仮引数 'Use' が無効です。
g++ 2.95.3-5 だと テンプレート引数を `CFoo::Use' から `void (CFoo::*)()' に変換できない。
になってしまいます。テンプレートの宣言はコンパイル通るみたい(文法違反ではない)のですが
使う部分で実際の関数を指定すると駄目になってしまうみたいです。
この場合、解決方法はありますでしょうか?よろしくお願いいたします。
0796デフォルトの名無しさんNGNG
d3d8.hくれ
0797デフォルトの名無しさんNGNG
>795
&CFoo::Use
0798デフォルトの名無しさんNGNG
>>795
VC++6でtemplateを使いまくろうというのがそもそも間違いだと思う。

解決法1 : VC++.NET を使う。
解決法2 : rebind風

template<typename T>
struct HogeTmpl {
 template<void (T::*Use)()>
 class Hoge
 {
  public: void Bomber(T arg) { (arg.*Use)(); }
 };
};

HogeTmpl<CFoo>::Hoge<CFoo::Use> chome;
0799785NGNG
みなさんレスありがとうございます。

>>797
おぉ!g++ で動きました!やっぱり関数ポインタはテンプレートに渡すときも
アドレスを取る書き方じゃないと駄目なんですね。

>>798
ぬぉ!rebind 風なら VC++6.0 でも動きました!
しかし頻繁に使いたい物なので利用者側がネストしたインスタンスを書かなければならないのは微妙ですね…。

時代遅れの VC++6 はそろそろ切り捨てるべきなんでしょうか…。
ともあれ、みなさんありがとうございました。
0800デフォルトの名無しさんNGNG
ダイナミックリンクライブラリ
の作り方を説明してるページってないですかね?
猫でもわかるC++をみてもわからないのですよ。
0801デフォルトの名無しさんNGNG
質問します。newで領域を確保するプログラムを作成しているんですが
こういう系統のものってnewを行う順番によっては例外がでるものなんでしょうか?
今作っているプログラムは、newをする場所を少し手前に持っていくと
正常に動いたりするんですが・・・
0802785NGNG
VC++ 逝ってよし!!かもの >>785 です。
助言に従って VC++7 Standard も実験環境に加えたのですが、
本当にやりたかった事をしようとすると VC++7 でも駄目でした。

template<typename T>
struct HogeTmpl{
 template<void (T::*Use)()>
 class Hoge{
  public: void Bomber(T arg){
   (arg.*Use)();
  }
 };
};
class CFoo{
 public: void Use() { std::cout << "使われますた。"; }
 public: HogeTmpl<CFoo>::Hoge<&CFoo::Use> chome;
};
void main(){
 CFoo foo;
 foo.chome.Bomber(foo);
}
BCC, g++ のいずれでも通るのに VC++ は 6pro 7std では

VC7 'CFoo::Use' : 外側のクラスのメンバは型名、スタティック、または列挙子ではありません。
VC6 認識できない型 'CFoo' が使われています。

となってしまいます。何か解決方法はありますでしょうか?
頼ってばかりで申し訳ないのですが、どうかよろしくお願いいたします。
0803デフォルトの名無しさんNGNG
>>801
それは99.999999999%キミのプログラムミスだから心配しなくていいよ。
0804785NGNG
たまには人の質問にも答えてみたり
>>801
例外って bad_alloc とかでしょうか?
それともシステムの例外?
ちょっと状況を判断するには情報が少なすぎる気がします。

シンプルにしたソースとか提示すると答える人もわかり易くて、
レスがつきやすいと思いますよ。
0805デフォルトの名無しさんNGNG
#if false //だめぽ
#endif

bccとgccはOKなのですがvc++だけ通りません
#if 定数式 改行
こういう仕様だと思ってたのですが
標準としてはbcc, gccとvc++のどちらが正しいのでしょうか?
0806デフォルトの名無しさんNGNG
>800
それは、処理系毎のスレに行って聞いた方が良いと思われ。VC あたりだと
ウィザードでプロジェクト作るのが一般的だし。
0807デフォルトの名無しさんNGNG
>>805
通るが?
>Microsoft (R) 32-bit C/C++ Optimizing Compiler Version 12.00.8804 for 80x86
>Microsoft(R) 32-bit C/C++ Standard Compiler Version 13.00.9466 for 80x86
0808807NGNG
お、C++モードだと通らんのか。スマソ
0809785NGNG
>>807
ウチでは通らない模様。

VC++6 #if ディレクティブ内には、式が存在しないか、定数の評価をしませんでした。
VC++7 整数定数式が無効です。

g++ はプリプロセスの順番が コメントの除去→マクロ展開、ディレクティブ処理
なのに VC++ は
マクロ展開、ディレクティブ処理→コメントの除去
らしいのは以前ぜんぜん関係ない事でハマって確認済み。


# 私の質問の方は進展なし…。誰かヘルプミーです。
0810デフォルトの名無しさんNGNG
>>802
これじゃだめか?
class CFooBase {
public: void Use() { std::cout << "使われますた。"; }
};
class CFoo : public CFooBase {
public: HogeTmpl<CFooBase>::Hoge<&CFooBase::Use> chome;
};
0811810NGNG
これならVC7でも通るね。
#include <iostream>
#include <functional>
class CFoo {
public: void Use() { std::cout << "使われますた。"; }
public: std::mem_fun_t<void, CFoo> chome;
public: CFoo() : chome( std::mem_fun(&CFoo::Use) ) {}
};
int main(){
CFoo foo;
foo.chome(&foo);
return 0;
}
0812デフォルトの名無しさんNGNG
class base {
public:
 virtual base& operator=(const base&) = 0;
};

class derived : public base {
public:
 derived& operator=(const derived& d) {}
};

これが駄目なのを今知って驚いたんですがどういう風に理解すればいいでしょうか。
0813デフォルトの名無しさんNGNG
継承前提のクラスを代入可能にするというのはあんまり見ないなあ。
代入とかするってことは値のように使う、という意図だろうし・・・
0814デフォルトの名無しさんNGNG
>>812
純粋仮想関数が正しくオーバーライドされてないからエラーが出る。
戻り値も仮引数も全く同じ型の関数が必要。
0815812NGNG
ども。

>>813
"baseから派生するクラスは代入演算を持つのだ"という点をはっきりさせる
ところ意図があります。そんだけです・・・。

>>814
とりあえず戻り値は違っていても↓は通りますね。(gcc-3.2)

class base {
public:
 virtual base& operator=(const base*) = 0;
};

class derived : public base {
public:
 derived& operator=(const base* b_ptr) {}
};
0816デフォルトの名無しさんNGNG
>>815
但し、代入演算子関数は、継承されないという性質を持つため純粋仮想関数と
宣言しない方がよい。コンストラクタとデストラクタも純粋仮想関数からは除外
すべき。
0817デフォルトの名無しさんNGNG
下に示すように、抽象クラスのメンバは自動的に代入してくれないので、
手動で代入しなければならず、なかなか厄介だよ。

class base {
public:
virtual const base& operator=(const base&) = 0;
int j;
};

class derived : public base {
public:
const base& operator=(const base& d) { j = d.j; return d; }
int i;
};

int main()
{
derived d, e;

e.i = 111;
e.j = 222;
d = e;
std::cout << e.i << " " << e.j << std::endl;
std::cout << d.i << " " << d.j << std::endl;
}
0818812NGNG
>>816
りょかい。"すべき"と言ってもらえると安心できます。
おやすみなさい。
0819デフォルトの名無しさんNGNG
>>818
「すべき」と書くといかにも語弊がありそう。実は、コンストラクタとデストラクタと
代入演算子関数を純粋仮想関数と宣言すると、リンカエラーになる処理系が
あるらしい。
0820デフォルトの名無しさんNGNG
C++の入門書をやっていて、
「floatを返しcharを受け取る関数へのポインタを返し、intを引数とする関数へのポインタを宣言せよ」
という問題があって、

float *(char) Func1(int i){ /* 処理1 */ } // <--☆
float Func2(char c){ /* 処理2 */ }
int main()
{
float *(char) (*fp1)(int); // 'fp1'が問題に対する答え
fp1 = Func1;
float (*fp2)(char);
fp2 = fp1(109);
float f;
f = fp2('H');
}

としたのですが☆の部分で「宣言が正しく終了していない」というエラーが出ます。
何が間違っているのでしょうか。
0821デフォルトの名無しさんNGNG
>>820
float XXXX(char); // 「floatを返しcharを受け取る関数
float (*XXXX)(char) // へのポインタ
float (*XXX(YYY))(char) // を返し
float (*XXX(int i))(char) // intを引数とする
float (*Func1(int i))(char) { /*処理1*/ } // 関数 = Func1
// へのポインタ」 にするにはFunc1の部分をさらに分解しよう。

つーかね、typedefを使えと。
0822デフォルトの名無しさんNGNG
俺ならこうする。
typedef float (*c2f)(char);

c2f Func1(int i)
{
 ...
}
0823デフォルトの名無しさんNGNG
ついでに言うと
float *(char) Func1(int i)
は、
float *
でfloatのポインタになってしまうので、
(char)
は何のことだかわからないので、
絶対間違っていると判んなきゃダメだと思うぞ。
0824デフォルトの名無しさんNGNG
そんな事言わずに教えてくれよ。
気になって気になっておがで不眠症なんだ。
0825824NGNG
誤爆
0826デフォルトの名無しさんNGNG
>>824
なんだかこっちが気になるな…(*´Д`)
おがってのも…
0827デフォルトの名無しさんNGNG
>>826
824じゃないけど「おかげ」のtypo
0828デフォルトの名無しさんNGNG
かな打ちマンセー
0829デフォルトの名無しさんNGNG
"カナ"当の半角カナの文字列を'kana'のようなローマ字に直すプログラムを作っています。

char buf[256];
memset(buf,'\0',256);
char roma[8];
while (*str != '\0'){
  ConvertOne(*str,roma);//これは一文字づつ'カ'→'ka'等に変換する関数
  strcpy(roma,"test");
  sprintf(buf,"%s%s",buf,roma);
  str++;
}

このようにしてみたのですが、
これだと'パ'や'ガ'など一文字だけでは
判別できない文字を直すことができません。
なにかよい方法はないでしょうか?
0830デフォルトの名無しさんNGNG
>>829
そのような入力を想定しながら作り直せ。
0831デフォルトの名無しさんNGNG
>>829
オートマトンを使って、濁音や半濁音になる可能性のあるカナを
別処理。
0832デフォルトの名無しさんNGNG
とある教授は,彼の授業用ノートに「オートマント」と書かれている為,毎年「オートマント」と板書する。
1つ上1つ下2つ↓のやつらに聞いて確かめた。
それが教授のネタかどうかは定かではない。
0833820NGNG
>>821
とてもわかりやすい答え、ありがとうございます。
おかげさまでコンパイルできました。
>>822
アドバイスありがとうございます。
なるほど、こんなtypedefの使い方があるとは知りませんでした。
勉強になりました。
0834デフォルトの名無しさんNGNG
>>832
アドバイスありがとうございます。
なるほど、こんなオートマントの使い方があるとは知りませんでした。
勉強になりました。
0835デフォルトの名無しさんNGNG
それ本当に教授かよ
0836デフォルトの名無しさんNGNG
CppUnit 1.8 で、「きちんと例外が投げられるかどうか調べる」というのはマクロかなにかでかけますか?

0837デフォルトの名無しさんNGNG
>>836
クエスチョンありがとうございます。
なるほど、こんな人任せの質問の仕方があるとは知りませんでした。
勉強になりました。
0838デフォルトの名無しさんNGNG
>>837
死
0839デフォルトの名無しさんNGNG
>>836
どこで調べたいんだ?
投げた側か受け取り側か。
0840bloomNGNG

http://www.agemasukudasai.com/bloom/
0841デフォルトの名無しさんNGNG
>>839
受け取り側ッス
0842デフォルトの名無しさんNGNG
こんにちは。よろしければ教えてください。

現在、VC++のサンプルプログラムのチャット

プログラムをサーバ側とクライアント側のプログラム

を同一マシンで動かそうとしているのですが、

クライアントが接続するときに接続拒否をされているようです。

私のOSはWIN98ですが、やっぱりこれが原因でしょうか?

サーバー機能がないOSだからでしょうか? よろしくお願いします。
0843デフォルトの名無しさんNGNG
>>841
それってハンドラ内に普通にチェック用マクロ書けばいいだけちゃうん?

>>842
Norton Internet Seculity とか

その手のファイアウォールツール入れてたり

しませんかーーーー?
つーか間に改行入れるのやめい。
0844デフォルトの名無しさんNGNG
επιστημ氏が2ちゃんねらな予感な感じを受けるのは私だけでしょうか…
0845デフォルトの名無しさんNGNG
>>844
アラブ人?
0846デフォルトの名無しさんNGNG
えぴすてーめーは、毎回ちょっとづつ名前を変えているという噂がある。
この前は、επιστη µ だった(嘘
0847デフォルトの名無しさんNGNG
http://www.trickpalace.net/cppll/

お前らエイピステーメですよ
0848デフォルトの名無しさんNGNG
s/イ//;
0849デフォルトの名無しさんNGNG
エピさん見てるなら返事してー
0850επιστηχ ◆IGEMrmvKLI NGNG
みなさんこんにちわ。
エピステーキーです。

読み方知らないけど「きー」を変換してね。
0851デフォルトの名無しさんNGNG
>>850 �A点
0852επιστηχ ◆IGEMrmvKLI NGNG
>>851
       ∧         ∧          ∧
        / ヽ      / ヽ_       / .∧
     /   `、   _/   `、⌒ヾ⌒ヽ/  ∧
    /       ̄ ̄/  u (.....ノ(....ノ   / ヽ
    l:::::::::        |           u .:(....ノノ
   |::::::::::  -=・=- / ̄ ̄ヽ        ::::::::::::::/`ヽ
   .|:::::::::::::::::  \_(___..ノ   u  ::::::::::::::::::::(....ノノ
    ヽ:::::::::::::::::::  \/ヽ  u    ::::::::::::::::::::::::::::ノ
0853デフォルトの名無しさんNGNG
       ∧         ∧          ∧
        / ヽ      / ヽ_       / .∧
     /   `、   _/   `、⌒ヾ⌒ヽ/  ∧
    /       ̄ ̄/  u (.....ノ(....ノ   / ヽ
    l:::::::::        |           u .:(....ノノ
   |::::::::::  -=・=- / ̄ ̄ヽ        ::::::::::::::/`ヽ
   .|:::::::::::::::::  \_(___..ノ   u  ::::::::::::::::::::(....ノノ
    ヽ:::::::::::::::::::  \/ヽ  u    ::::::↑::::::::::::::::::ノ
                       |
               επιστηχ◆IGEMrmvKLI
0854デフォルトの名無しさんNGNG
エピステーメーさんがブラインドタッチできないとは知らなかったなぁ…。
0855デフォルトの名無しさんNGNG
VC++で

int a=30;
printf("%d",a);

を TextOutなどで実現するにはどうすればいいですか?
0856デフォルトの名無しさんNGNG
TextPrintf("%d",a);
0857デフォルトの名無しさんNGNG
sprintf
0858デフォルトの名無しさんNGNG
>>844-854

悪意を感じるぞ。匿名をいいことに挑発するのは卑怯!
(俺は本人じゃないし、cppllにも加入してない)
0859デフォルトの名無しさんNGNG
無理でした
それとも書き方が悪かったのかなぁ?
もうすこしちゃんとした書き方教えてください。
0860デフォルトの名無しさんNGNG
秘密!
0861854NGNG
>>858
エピステーメーがタッチタイプできないってのはてーめーがCマガの連載で
語ってた事だし、むしろ漏れは彼の熱心な読者だしー。

上のヤツはしらんが。
0862デフォルトの名無しさんNGNG
ヱビスビールですが何か?
0863デフォルトの名無しさんNGNG
つまらん。
0864デフォルトの名無しさんNGNG
>>855
std::ostringstreamなどはいかがだろうか。
だめぽ?(ρ_;)
0865デフォルトの名無しさんNGNG
BOOL TextOutFormat(HDC hDC, int nXStart, int nYStart, const char *fmt, ...)
{
 va_list vargs;
 va_start(vargs, fmt);
 const size_t BufSize = 8192;
 char *buf = new char[BufSize + 1];
 buf[BufSize] = '\0';
 BOOL ret = TextOut(hDC, nXStart, nYStart, buf, _vsnprintf(buf, BufSize, fmt, vargs));
 va_end(vargs);
 delete[] buf;
 return ret;
}

TextOutFormat(NULL, 7, 8, "%d", 1234);
0866デフォルトの名無しさんNGNG
すみません、SGIのMIPSpro C++ 7.3ユーザーなのですが、
C標準ヘッダの取り込みが
#include <cctype>
などのように指定しても上手くいきません(file unavailable)

もちろん-LANG:std付けてます。
つうか/usr/include/CC以下にそんなの無いし。
かといってctype.hを取り込むと、namespaceが::で(゚д゚)マズーなんですが...。

プラットフォームdependな質問で申し訳ありませんが、詳しい方お願いします。
0867デフォルトの名無しさんNGNG
ファイル名 cctype.h
namespace std
{
#include <ctype.h>
}

スクリプトで生成すれ。もちろん標準 C ヘッダとその他の標準 C++ ヘッダは分けて。
0868867NGNG
ファイル名は cctype だった須磨祖
0869867NGNG
ぜんぜん関係ないんだけどさ、dynamic_cast と VISITOR は
一般的にどちらが速度早い?

あまりにも頻繁にベースからサブを探り出す必要があるので VISITOR のトリックで
どうにかしようと思ってるんだけど、速度的には不利なのかなぁ?
0870866NGNG
>>867
マジですか!?

いや確かにその方法は一瞬脳裏をよぎったんですが、
まさかそんなことはあるまい(((((((;゚д゚)))))))
と自己否定してました。

最新のコンパイラなのにぃぃぃ
0871デフォルトの名無しさんNGNG
gccでSDLを使っています。初心者用の初期化サンプルを試したのですが
オブジェクトファイルが出てエラーになります。

#include <stdlib.h>
#include "SDL.h"

int main(int argc, char *argv[])
{
if ( SDL_Init(SDL_INIT_AUDIO | SDL_INIT_VIDEO) < 0 ) {
fprintf(stderr, "Unable to init SDL: %s\n", SDL_GetError());
exit(1);
}
atexit(SDL_Quit);
return(0);
}
0872デフォルトの名無しさんNGNG
>>871
そうですか。

つか、エラーメッセージくらい貼れってばさ。
0873871NGNG
すいません。続きです。
エラーは
make -k
gcc test.cpp -o test -Wall -I/usr/include/SDL
/tmp/ccqiKxRn.o: In function `main':
/tmp/ccqiKxRn.o(.text+0xc): undefined reference to `SDL_Init'
/tmp/ccqiKxRn.o(.text+0x20): undefined reference to `SDL_GetError'
/tmp/ccqiKxRn.o(.text+0x4c): undefined reference to `SDL_Quit'
collect2: ld returned 1 exit status
make: *** [test] エラー 1
0874871NGNG
あれ?全部書いてるのに転送されてない…?
連続ですいません。makefileは
test : test.cpp
gcc test.cpp -o test -Wall -I/usr/include/SDL
0875デフォルトの名無しさんNGNG
>>873
そのエラーは関数のプロトタイプだけで本体が定義されてない時に
出るエラー。
0876 NGNG
http://www2a.kagoya.net/~adults-toybox/sample1.wmv
http://www2a.kagoya.net/~adults-toybox/sample2.wmv
http://www2a.kagoya.net/~adults-toybox/
0877871NGNG
???文が途切れてますすいません…。
gccの前にはちゃんとタブ入ってます。
ライブラリもちゃんとインストールされてます。
GTK等の他のライブラリは正常に動作します。
どうなってるんでしょうか?
0878デフォルトの名無しさんNGNG
>>877
ライブラリはリンクしなきゃ。
`sdl-config --libs` もいれて。sdl-config が正しく
設定されていればそれでとおるとおもうけど。
0879871NGNG
>>875
ありがとうございます。
テストコードはコンパイルできたのでmakeの仕方がおかしいみたいでした。
本体の定義を読み込みかたを探して来ます。
0880デフォルトの名無しさん NGNG
CMyClass** pMyClass;
pMyClass[0] = new CMyClass;
pMyClass[1] = (以下続く)
という配列の要素をnewで確保したのですが、
終了処理のところで
delete [] *pMyClass;
とやると実行時エラーが出ます。
一度にdeleteする方法があったら教えてください。
0881デフォルトの名無しさんNGNG
>>880
・pMyClass[0]ってちゃんと確保されてるの?
・delete[] *pMyClassに対応するnewってどこにある?

ポインタを勉強しませう。
0882デフォルトの名無しさんNGNG
CMyClass** pMyClass;
pMyClass[0] = ..

あれ?pMyClassの実体は?
0883デフォルトの名無しさんNGNG
new [] でないと delete [] はできないんじゃなかった?
0884デフォルトの名無しさんNGNG
素人はboost::shared_ptrでも使っとけ
0885880NGNG
>>880
書き忘れでした...(汗)
正しくは、CMyClass** pMyClass[4]; です。
pMyClass[0],pMyClass[1]...には一応インスタンスがあり
メンバ関数も呼び出せているのですが、delete時にエラーが出ます。

>>883
基本クラスのポインタで派生クラスを管理している状態なので、
new [] は使っていませんでした。
ただdelete pMyClass[0];...と一つづつdeleteしてもエラーが出ます。
何か根本的な理解不足でしょうか?
それともdeleteするタイミングが悪いのか...
0886デフォルトの名無しさんNGNG
ほとんどの処理系が new=malloc、delete=free だとすると、880 がやろうと
してる事は大間違いだな。
0887デフォルトの名無しさんNGNG
>>885
CMyClass* pMyClass[4];
じゃなくて、CMyClass**なのか?
0888デフォルトの名無しさんNGNG
>>885
>正しくは、CMyClass** pMyClass[4]; です。
ほんとに?
CMyClass* pMyClass[4];
じゃなくて?
0889デフォルトの名無しさんNGNG
質問シロート君。
エラーって何の事だい?
0890デフォルトの名無しさんNGNG
>>885
これならわかるが。

class CMyClass {};

int main()
{
CMyClass** pMyClass;

pMyClass = new CMyClass*[4];
for (int i = 0; i < 4; i++)
pMyClass[i] = new CMyClass;
//
for (int i = 0; i < 4; i++)
delete pMyClass[i];
delete[] pMyClass;
}
0891デフォルトの名無しさんNGNG
>>871
http://game.2ch.net/test/read.cgi/gamedev/1005469181/l50
に行ってあげて。
0892880NGNG
>>887
すいません、さらに書き間違いをしていました。
CMyClass* pMyClass[4]; でした。

>>889
deleteを呼ぶときになると、アプリケーションエラーのダイアログが出て
「・・・メモリが"read"になることはできませんでした。」
という例外エラー?(←間違ってたらすみません)が出ます。

>>890
ソースを示していただいて、ありがとうございます。

頭の中が混乱していて、いろいろご迷惑をおかけしました。
まだnewとdeleteや配列について全然理解不足だということを痛感しました。
レス下さった方々、本当に感謝です。勉強になりました。
0893デフォルトの名無しさんNGNG
>>892
> メモリが"read"になることはできませんでした。

どっかでメモリを壊している。
0894デフォルトの名無しさんNGNG
>>892
その場合の正解は、たぶんこうだ。

std::auto_ptr<CMyClass> pMyClass[4];
for (int i = 0; i < 4; ++i)
  pMyClass[i].reset( new CMyClass );

delete を自分で書かないように心がけるのがコツだ。
0895デフォルトの名無しさんNGNG
class hoge{...};
class hage:public hoge{...public:void poge();...};
int procA(){
...
 hoge *p=new hage;
 ((hage *)p)->poge();
...
}
は安全ですか?(poge()はhogeの仮想関数ではありません)
あとC++キャストの載ってるいい本を教えてください
0896デフォルトの名無しさんNGNG
age忘れました
0897デフォルトの名無しさんNGNG
確実にhageのインスタンスであることが分かっている場合はstatic_cast
他のクラスのインスタンスである可能性がある場合はdynamic_cast
0898 NGNG
λ...... ここ変だよ・・        λ......       λ......
  λ......            λ...... 失敗だったネ…
 λ......      λ......
        λ......                  λ...... 逃げていく…
    λ......             λ......
                λ......
 λ......       λ......          λ...... みんな逃げていく…
λ...... ここ変だよ・・        λ......       λ......
  λ......            λ...... 失敗だったネ…
 λ......      λ......
        λ......                  λ...... 逃げていく…
    λ......             λ......
                λ......
 λ......       λ......          λ...... みんな逃げていく…
0899デフォルトの名無しさんNGNG
>>895
ATL はソレでいっぱいです。
0900デフォルトの名無しさんNGNG
クラス名(例:Onigiriクラス)が
COnigiriの場合は、普通のクラス
IOnigiriの場合は、インターフェースクラス

みたいなプリフィックスありますが、
オリジナル(?)で

TOnigiri ・・・ テンプレートクラス。内部の型を設定して使う。
BOnigiri ・・・ 継承して使う用(Base)。ウインドウ(コールバック部分)やスレッドクラスみたいなやつ

みたいな感じで
勝手にやっていいのでしょうか?
もし、開発チーム内でこんなことされたら勘弁と思う人とか居ます?

あと、
構造体名の場合は、SOnigiriでいいのでしょうか?
何かプリフィックすあったら教えてください。


0901デフォルトの名無しさんNGNG
I くらいは許すがあとは全部却下。
0902デフォルトの名無しさんNGNG
>>898
ATL はソレでいっぱいです。
0903デフォルトの名無しさんNGNG
>あとC++キャストの載ってるいい本を教えてください

Effective C++ or More effective C++ or its both!
0904デフォルトの名無しさんNGNG
エピさんとこに載ってるよ < C++スタイルキャスト
0905デフォルトの名無しさんNGNG
>>900
テンプレートかつインターフェイスだった場合にはどうするね?
TIXxx や ITXxx という手もあるが
旅行者を表すインターフェイス
ITraveler とかがあったり
Java Virtual Machine を表すクラス
CJVM とかがあったら大混乱だよね?

ってわけで俺はテンプレートはサフィックスにしてる(CXxxxTemplateとか)

あと、チーム内なら勝手にやるのはご法度だろ。
周りの了解を得てからだな。
俺的には C と I 以外は却下だけど。
0906デフォルトの名無しさんNGNG
これは平気?
http://ccp14.semo.edu/ccp/ccp14/ftp-mirror/howardflack/pub/soft/crystal/fox/tmp/Anders.pdf
0907デフォルトの名無しさんNGNG
ヤヴァすぎ
0908デフォルトの名無しさんNGNG
>>900
TはなんかVCLっぽいしBはなんかBeOSのAPIっぽいので却下。

…というのは半分冗談にしても、
テンプレートは最初から template やら <> がくっついてるので
名前で区別する必要は無い気がする。継承の方は、
Ixxx にするとか AbstraceXxxx にするとか。
0909908NGNG
×Abstrace ○Abstract
0910デフォルトの名無しさんNGNG
>>906
俺は既に落としたので通報しますた
0911デフォルトの名無しさんNGNG
☆ チン        ハラヘッタ〜
      ハラヘッタ〜
☆ チン  〃 Λ_Λ   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ヽ ___\(\・∀・)< concrete keywordまだー??
    \_/⊂ ⊂_)_ \____________
  / ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
  |  ̄  ̄ ̄ ̄  ̄ ̄:| :|
  |            |
0912デフォルトの名無しさんNGNG
そういうのを
「西部労働レストラン」
っていうんです!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0913デフォルトの名無しさんNGNG
>>910
あんた 「すれ立てるまでもない」 スレにも居なかったか?
0914910NGNG
ああ、いかにも俺はその805だが…(*ノノ)
0915デフォルトの名無しさんNGNG
始めまして。質問です。
X *a;などと宣言したあと、(Xはクラス)
aの配列のメモリを一つずつ確保するにはどうしたら良いでしょうか?
本来、a = new X[個数];と宣言すれば済むのですが、
aの個数がファイルを読み終わるまでわからないため、
forのループ内で一つ一つ確保したいのです。
a[i] = new ???;みたいな感じで。
ご教授宜しくお願いします。

0916デフォルトの名無しさんNGNG
new(ptr) X
0917デフォルトの名無しさんNGNG
>>915
2回目だよな?
0918デフォルトの名無しさんNGNG
>>917
初めてですけど、、、

>>916
(ptr) はどうすればいいのでしょうか><?
0919デフォルトの名無しさんNGNG
嘘吐きsage
0920デフォルトの名無しさんNGNG
>>915
vecor<X>
じゃだめなのかね。
0921デフォルトの名無しさんNGNG
vector<X>ね
0922デフォルトの名無しさんNGNG
>>915
ポインタ勉強せーよ
0923デフォルトの名無しさんNGNG
X *a;
new(a)X; //replacement構文キタ?
0924デフォルトの名無しさんNGNG
>>923
だから、その a がいくつ必要かわからないって話だろ。
vector でいいじゃん。
0925デフォルトの名無しさんNGNG
これってSTL使わないと出来ないようなことなんですか?
0926923NGNG
>aの個数がファイルを読み終わるまでわからないため、

ファイルを読んで個数を得てからX *a = new X[n];ではだめなのかね?
0927デフォルトの名無しさんNGNG
単純に遅いだろ
0928デフォルトの名無しさんNGNG
vectorとか言うc++では初めて聞くものをやろうとしてみてるんですが
何かコンパイルが遅くなるのが気になります。。。大丈夫なのでしょうか?

>>926
一応可能ですが、
個数得るだけじゃなく、そのファイルの途中で配列に(ファイルの)内容を代入させるため
ファイルを2度読むはめになっちゃうのです(TT)
それしかないですかね?
0929デフォルトの名無しさんNGNG
>928
> vectorとか言うc++では初めて聞くものをやろうとしてみてるんですが
コードを書き始める前に、プログラミング言語 C++ ぐらいは読んどけ。
0930デフォルトの名無しさんNGNG
>>929
http://www.pro.or.jp/~fuji/computerbooks/c/cpp.strou.html
これ図書館で借りてきたんですが載ってないですTT
0931デフォルトの名無しさんNGNG
基礎本には STL が載っていない事が多いと思う。
0932デフォルトの名無しさんNGNG
>>928
ヘッダー覗いてみればわかるけど、膨大な template を処理してる。
多少はガマンすること。
0933デフォルトの名無しさんNGNG
http://www.ascii.co.jp/books/detail/4-7561/4-7561-1895-X.html
これには載ってるだろう。
>>930のは古いかな。
0934デフォルトの名無しさんNGNG
C++のコンパイルは遅い。これ常識。
0935デフォルトの名無しさんNGNG
g++なんかは特に遅い
0936デフォルトの名無しさんNGNG
遅いのが嫌ならC++なんか使うな。
0937デフォルトの名無しさんNGNG
実際そのほうがいいのかもしれない。
0938デフォルトの名無しさんNGNG
>>933
「STL(標準テンプレートライブラリ)に関する情報を新たに加筆。」 とか書いてあるな。
0939デフォルトの名無しさんNGNG
STL が嫌なら手動でリストにでもすればいいのでは?

独自リスト → std::list となって結局最後に std::vector 使う事になるような気もするが。
0940デフォルトの名無しさんNGNG
いや、自分で作るにしても、別にリストなんかにはしないけどなあ。
アクセスが不便じゃん。
0941デフォルトの名無しさんNGNG
ライブラリがインターフェースとしてstl使うのはどうかと思った。
0942デフォルトの名無しさんNGNG
誰が次スレ行きますよ?
0943デフォルトの名無しさんNGNG
どこに次スレが立つよ?
0944デフォルトの名無しさんNGNG
>>950
義務を負うこと。
0945945NGNG
新スレが尻上がりました。速やかな移行をおながいします。
http://pc3.2ch.net/test/read.cgi/tech/1038031395/l50
0946デフォルトの名無しさんNGNG
1000
0947デフォルトの名無しさんNGNG
ほほう、>>950 になると >>944 お墨付きの重複スレが立てられるって事だな。
0948デフォルトの名無しさんNGNG
      _人人人人人人人人人人人人人人_
        >    な なんだってー!!    <
        ̄^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^Y^ ̄
        _,,.-‐-..,,_       _,,..--v--..,_
    /     `''.v'ν Σ´        `、_,.-'""`´""ヽ
    i'   / ̄""''--i 7   | ,.イi,i,i,、 、,、 Σ          ヽ
.     !ヘ /‐- 、u.   |'     |ノ-、 ' ` `,_` | /i'i^iヘ、 ,、、   |
    |'' !゙ i.oニ'ー'〈ュニ!     iiヽ~oj.`'<_o.7 !'.__ ' ' ``_,,....、 .|
.   ,`| u       ..ゝ!     ‖  .j     (} 'o〉 `''o'ヽ |',`i
_,,..-<:::::\   (二> /      !  _`-っ  / |  7   ̄ u |i'/
. |、 \:::::\ '' /        \ '' /〃.ヽ `''⊃  , 'v>、
 !、\  \. , ̄        γ/| ̄ 〃   \二-‐' //`
0949デフォルトの名無しさんNGNG
えへへ
0950デフォルトの名無しさんNGNG
            < `ヽ  , '´ ̄ >
             ,.    ´ ̄ ` </ー- 、
            //,         ヽ\  ヽ
          '´ / .' / /,       ゙\ヽ.  ゙
          ( !/ i/(( リ |l〈 | ヽヽ.   |ヽ) )  i
           ヽY/!,ィ'il  'Tヽ, l i  l く(ヽ  !
           / l lr1,  ヒ1l | | ,.'  )' ) ノ
            , ' /ヽ´ ー `" ,| l´   ( l !   
         i(( {.   ` ーァ く,| |、    ヽト、
         ヽ. ヽ. '77´/ l'´/,! l' ヽ    ノ )
            ゙/ ,'/ /.† ! ! リ ノ 〃ヽ  ( ((
           〈ヽ. i !/、/|_!.l'(. !i  \ `ー-ヽ
    ,     / ヽ.∧ ヽ./  `,ー ' ヽ.  ヽ  /}
    lヽヽ._/  /   !      /l_    ヽ.  / .し '´
    ヽ`   ,. '     ,'  ー- /≪フノ    ヽ     二
       ー-'      /     '´ \`く_,. へ  ` ー 、 ヽ
           /     \ ヽ  ̄ ヽ〉
             / /  i     \ \ノリ_ノ
           /, '   l       `  `ー- 1
         , ' / /   !     ヽ     ノ
       く/   /   l     ヽ   ,.'´
0951デフォルトの名無しさんNGNG
ageるよ〜
0952デフォルトの名無しさんNGNG
>>950
次スレよろしく。
0953デフォルトの名無しさんNGNG
>952
>945
0954デフォルトの名無しさんNGNG
>>953
>>944
0955デフォルトの名無しさんNGNG
保守
0956埋子NGNG
埋め。
0957デフォルトの名無しさんNGNG
梅
0958埋造NGNG
埋め。
0959埋造NGNG
一日、一埋め。
0960デフォルトの名無しさんNGNG
強力
0961債務不履行の名無しさんNGNG
ume
0962デフォルトの名無しさんNGNG
松
0963デフォルトの名無しさんNGNG
丈
0964債務不履行の名無しさんNGNG
とく
0965デフォルトの名無しさんNGNG
ふね
0966埋造NGNG
今日もまた埋める。
0967デフォルトの名無しさんNGNG
あまぐり
0968デフォルトの名無しさんNGNG
むいて
0969デフォルトの名無しさんNGNG
      |        ___|_              |   |
   _ー|ー-ー      | _      ヽ \    |     |
     __|_」      ̄~| ̄    /         レ    |
    / |ノ ^ヽ     _.、|    <               ノ
    (_ノ| ノ    ∠_ノ\    \            /

.         _」__               ̄──
          _|   \  |    ヽ      /
         (ノ^|.       |     |    |
           (_._」    レ     /     \


                       ●
                ヽ(;´Д`)ノ
0970デフォルトの名無しさんNGNG
      |        ___|_              |   |
   _ー|ー-ー      | _      ヽ \    |     |
     __|_」      ̄~| ̄    /         レ    |
    / |ノ ^ヽ     _.、|    <               ノ
    (_ノ| ノ    ∠_ノ\    \            /

.         _」__               ̄──
          _|   \  |    ヽ      /
         (ノ^|.       |     |    |
           (_._」    レ     /     \


               ●
                ヽ(´Д`;)ノ
0971デフォルトの名無しさんNGNG
ほい。

○
  ミ∴
  ∴∴
0972デフォルトの名無しさんNGNG
ホントウニ ムカレテ シマッタ Σ(゚д゚lll)ガーン
0973デフォルトの名無しさんNGNG
これは、終わりそう
0974デフォルトの名無しさんNGNG
>>969-971
ワラタ
http://pc3.2ch.net/test/read.cgi/tech/1026793823/973-975
0975デフォルトの名無しさんNGNG
>>974
引用する範囲が正しくない。
http://pc3.2ch.net/test/read.cgi/tech/1026793823/972-976
0976デフォルトの名無しさんNGNG
>>975
おいおい、俺はこのスレと同じ部分だけを抜粋したんだよ。
0977デフォルトの名無しさんNGNG
>>975
976 を含め忘れたくせに何を偉そうに。
0978デフォルトの名無しさんNGNG
>>977
ん?975じゃないが,含まれてるぞ?
0979977=975NGNG
すまん、宛先間違い。
976 宛て。
0980埋造NGNG
やっぱり埋め。
0981デフォルトの名無しさんNGNG
>>979
ああ分かった。

俺=>>972=>>974 なんで,
自分のレスを含めて「ワラタ」と言うと自作自演になってしまうので恥ずかしかったから省いたんです。
許してちょ。
0982デフォルトの名無しさんNGNG
0983デフォルトの名無しさんNGNG
0984埋造NGNG
あと少し。
埋め。
0985デフォルトの名無しさんNGNG
俺も手伝うぜ。
一日人埋め
0986デフォルトの名無しさんNGNG
me too
0987デフォルトの名無しさんNGNG
memory too few
0988デフォルトの名無しさんNGNG
umeume
0989デフォルトの名無しさんNGNG
umauma
0990デフォルトの名無しさんNGNG
mamatonton
0991デフォルトの名無しさんNGNG
nullpo
0992デフォルトの名無しさんNGNG
mou = dame + po
0993デフォルトの名無しさんNGNG
eclipse-CDTのわかりやすい使い方のホームページ
誰か作って
0994デフォルトの名無しさんNGNG
onogiri washowy
0995埋造NGNG
今日で最後かな。
埋め。
0996デフォルトの名無しさんNGNG
うめ
0997デフォルトの名無しさんNGNG
ちんぴょろすぽーん
0998デフォルトの名無しさんNGNG
チンポコビンビン
0999デフォルトの名無しさんNGNG
まんこくさい
1000デフォルトの名無しさんNGNG
ageて終わり
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。