C++相談室 part12
レス数が1000を超えています。これ以上書き込みはできません。
0001アフォルトの名無しさん
NGNGあなたにぴったりの言語、C++。
・・・いいやエレガントなソースを目指せゴルァ!!
(・∀・).。o(関連URLは >>2-3 辺り) アヒャ
0002アフォルトの名無しさん
NGNGC++ 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アフォルトの名無しさん
NGNGVisualC++相談室 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(^・^)v
NGNG0005デフォルトの名無しさん
NGNG#error (・∀・)
#endif
abcと同名のシンボルは無いはずだけど全ての処理系で通る(falseで)!
大ハケーン?
0006デフォルトの名無しさん
NGNG規格嫁
0007アフォルトの名無しさん
NGNG何度も書き込むな。
前スレのレスはちゃんと読んだのか?
http://pc3.2ch.net/test/read.cgi/tech/1032345774/945-949
第一そんな下らない事で得意になるな。
・・・ネタ?
0008デフォルトの名無しさん
NGNGZ
0009デフォルトの名無しさん
NGNG乙カレー
0010アフォルトの名無しさん
NGNG4 は違う。
0011デフォルトの名無しさん
NGNG【C++】Boost使い集まれ!
http://pc3.2ch.net/test/read.cgi/tech/1033830935/
0012デフォルトの名無しさん
NGNGGeneric Programming with C++ Template
http://pc3.2ch.net/test/read.cgi/tech/1008593126/
0013アフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGそこでデバックを選択したら、Vidual C++6.0が起動し保存ダイアログが出たので保存を選択しました。(この時、保存先を指定することは出来ませんでした。)
この場合、データは何処に保存されているのでしょうか?
宜しくお願いします。
0015デフォルトの名無しさん
NGNGなるほど、ここは隔離用インターネットだったのですね
001614
NGNGWordはWord2000です。
症状はこれと似ています。
http://www.geocities.co.jp/SiliconValley-SanJose/8677/win95/pslg1612.html
0017デフォルトの名無しさん
NGNG禿げしくスレ違いな上に、おそらくは板違い。カエレ!
0018アフォルトの名無しさん
NGNGまあ、はっきり言えば隔離かもね (インターネットという言いまわしはグー)。
STL は使う使わないでソースコードの性格が変わるし、質問も然り。
STL バリバリのところに C++ 初心者は入っていけないだろうし、STL スレも
初歩レベルの情報を交えるべきでないと思う (5、14 みたいのも来るし)。
0019デフォルトの名無しさん
NGNG乙
0020デフォルトの名無しさん
NGNGPerlより簡単だけど。
0021デフォルトの名無しさん
NGNGコンテナだけならね。
0022デフォルトの名無しさん
NGNG0023デフォルトの名無しさん
NGNGhttp://www.asahi-net.or.jp/~wg5k-ickw/html/online/gcc-2.95.2/gcc_6.html
0024デフォルトの名無しさん
NGNGコンテナだけって?
0025デフォルトの名無しさん
NGNGvector<T>やらmap<T,U>を使うだけなら猿でもできる(もちろん使ったほうが
良いのだが)。vector<T>::iteratorやらなにやらでコンテナの内容にアクセスする
のも、当然サルでもできる。
その先が、ややハードル高い。20や24は<algorithm>で定義される各種
アルゴリズムを正確につかいこなしたり、bind1st,2ndと組み込みの述語関数
を組み合わせてプログラム書いたりを苦もなくできますか?
俺は目が慣れるまでに結構時間が必要だったけどね。関数型言語の経験があれば
"perlより簡単"なのかもしれんが・・・
0026デフォルトの名無しさん
NGNGmem_fun1_tの使いどころを教えてください
とか言ってみるテスト
002720
NGNG0028デフォルトの名無しさん
NGNGここでそう煽ることに何の意味が?
僕は馬鹿です と言っているのかな。
0029デフォルトの名無しさん
NGNG0030デフォルトの名無しさん
NGNG0031男子高校生
NGNGなんか(・∀・)イイね。
0032デフォルトの名無しさん
NGNGperlのスパゲティコード読むよりはるかに簡単じゃい。
0033デフォルトの名無しさん
NGNG20がSTL知らないということだけが客観的事実ってことで。
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNG0036アフォルトの名無しさん
NGNGC++ のスパゲティコードだって似たようなもんじゃ。
>>33
同意。
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNGMSの製品
0040デフォルトの名無しさん
NGNGmozilla
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG0043デフォルトの名無しさん
NGNG0044デフォルトの名無しさん
NGNGvoid main(int argc,char *argv[])
というのがあるじゃないですか。それで、
argcが1を返すとはどういう意味でしょうか?
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNG0050デフォルトの名無しさん
NGNG0051デフォルトの名無しさん
NGNGでは、
if(argc<=1){ exit(-1); }
って書くじゃないですか。
とうこということは、argvに自分のパスが入っているので、
必ず終了することになるんですか?
0052アフォルトの名無しさん
NGNGとりあえず main() を void で書くのはやめろ。
>>51
その通り。
実際に引数が指定された場合は、argc は 2 以上になる。
0053デフォルトの名無しさん
NGNGでも、なんでですか?変わった気はしない…。
if(argc<=1){ exit(-1); } なんですけど、
よくサンプルコードに書いてあるじゃないですか?
無意味なんじゃないですか?
0054デフォルトの名無しさん
NGNG0055デフォルトの名無しさん
NGNGmfc.exe command
ってかんじに。
0056デフォルトの名無しさん
NGNG�U�Uこの半角記号が打てないので
プログラムを書くのに困っています。
キーボードの右下の�Uのキーを押しても¥が出てくるだけです
どうすれば、英数半角でこの記号が打てるようになるのか
教えてください
0057デフォルトの名無しさん
NGNG0058デフォルトの名無しさん
NGNG0059デフォルトの名無しさん
NGNG0060デフォルトの名無しさん
NGNGif文の分岐予測ペナが大きいと聞いたんでビット演算で回避できないかやってみたんです。
int A,B,C;(B,Cには適当な値)
A=(B-C);
if(A>=0) A=0;
を、
A=((A>>31)&A);
にしてみたんですけど、素直にif文使った方が僅差で早かったです…。
これって他のCPUでも同じ結果になるんですかね?(ウチはDuron1.2G)
可読性も考えると、素直にif文…かな?
0061アフォルトの名無しさん
NGNGmain() が int を返さないなら、そのソースがどんなに酷似していても
C/C++ ではない。
>>56
それれ半角で書くとカタカナの "ヲ" だ (英字フォントでは "�U" になる)。
この文字をプログラムで使えなくて困ることは無いはずだが?
"|" (Shift + "\") ではないのか?
>>58
printf() 使うのに <stdio.h> インクルードしない人ですか?
0062デフォルトの名無しさん
NGNG0063アフォルトの名無しさん
NGNGありがとう
0064デフォルトの名無しさん
NGNGboost::formatも出来たし、printfはバイバイキーン。
0065デフォルトの名無しさん
NGNG>>60
分岐予測はCPUによって実装が異なるだろうから
結果は微妙に変わってくるかもしれないけど、
よほど意地悪なor運の悪い状況でない限り、
ペナルティ多発ってことはないんじゃないでしょうか。
>A=((A>>31)&A);
同一レジスタに対する読み書きが連続することによる
ペナルティもあります。
素直にif文に一票。
0066デフォルトの名無しさん
NGNG�U�Uこの半角記号が打てないので
プログラムを書くのに困っています。
キーボードの右下の�Uのキーを押しても¥が出てくるだけです
どうすれば、英数半角でこの記号が打てるようになるのか
教えてください
0067デフォルトの名無しさん
NGNG0068デフォルトの名無しさん
NGNG0069アフォルトの名無しさん
NGNG単純にアセンブリに直すと、
; 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デフォルトの名無しさん
NGNGshiftを押しても出ないので質問してるのですが
0071デフォルトの名無しさん
NGNGオプションパラメタが一つもない時。
0072デフォルトの名無しさん
NGNG0073デフォルトの名無しさん
NGNGPC初心者
http://pc.2ch.net/pcqa/
0074デフォルトの名無しさん
NGNG0076アフォルトの名無しさん
NGNG> 分岐命令がパイプラインストールになる可能性は、コンパイラを使っている限り
> 考えなくて良い。
これは、コンパイラさえ使っていれば最良のパフォーマンスが得られると言う意味
ではないので念の為。
真に洗練されたアセンブリ使いの最適化には、どんなコンパイラも敵わない。
(漏れはコンパイラに敵わないが・・・)
そうではなくて、>>60 のように一見意味の読み取れないようなコードを書くと、
コンパイラがすでに想定している最適化を適用できずベタなマシン語を吐き出し
てしまうので止めた方がいいと言う事。
0077デフォルトの名無しさん
NGNGhttp://www.kh.rim.or.jp/~nagamura/misc/stroustrup-interview.html
0078デフォルトの名無しさん
NGNGそれってC++挫折組の捏造記事。
って何年前のネタだよ。
0079デフォルトの名無しさん
NGNGhttp://www.research.att.com/~bs/bs_faq.html#IEEE
0080デフォルトの名無しさん
NGNGああ、これ探してたんだ。ありがとう。
でも今読むと古臭いね。テンプレートについて
何か言わなければだめだよね(藁
0081もも
NGNGプログラムをC++で作ってください。ちなみにヘロンの公式、z=(a+b+c)/2
S=(z*(z-a)*(z-b)*(z-c))の平方根です。どなたかよろしくお願いします。
0082デフォルトの名無しさん
NGNG逝ってよし
0083デフォルトの名無しさん
NGNGそういうのは相談とは言わん。(・∀・) カエレ!
http://pc3.2ch.net/test/read.cgi/tech/1021862587/l50
0084デフォルトの名無しさん
NGNGpublic:
A(){::_beginthread(func,0,(void*)this);}
void func(void){}
};
これは何故エラーになるのですか?
また、メンバ関数をマルチスレッドには出来ないのですか?
0085デフォルトの名無しさん
NGNGA::func() -> func(A this)
func(A this) != func()
0086もも
NGNG0087デフォルトの名無しさん
NGNGそう言う高いレベルの問題ではない。
0088デフォルトの名無しさん
NGNGclass 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デフォルトの名無しさん
NGNGunsigned _stdcall A::func(void* a) { return 0; }
で、この関数からメンバにアクセスしたい場合は
A* Instance = reinterpret_cast<A*>(a);
Instance->メンバ
0090デフォルトの名無しさん
NGNG{
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メンバ変数m_bContinueは何のために・・・?
static関数をインライン宣言しているのは何のために・・・?
しかも再帰構造になっているのは何のために・・・?
0092デフォルトの名無しさん
NGNG0093デフォルトの名無しさん
NGNGANSI C++ や ISO C++ に準拠しているようですが、
Loki とか Boost とか何の手も入れることなくコンパイルできますか?
使っている方がいたら教えてください。
0094デフォルトの名無しさん
NGNG0095デフォルトの名無しさん
NGNGコンストラクタは「未構築」なので不定(たいていはベースクラスのものですよね)
なのは理解しています。
ちなみにデストラクタは virtual にしています。
デストラクトチェーン中にわざわざ vptr を書き換えているのでしょうか?
ちなみに CodeWarrior for Windows 7.0 で確認した状態では
ベースクラスの関数が呼び出されてしまいます。
0097デフォルトの名無しさん
NGNG保守が難しくなるってんでうちは標準ライブラリしか使わせてもらえないよ。
0098デフォルトの名無しさん
NGNG保守が難しくなるってんでうちは独自ライブラリしか使わせてもらえないよ。
0099デフォルトの名無しさん
NGNG(以下略
0100デフォルトの名無しさん
NGNG(-_-
0101デフォルトの名無しさん
NGNG保守が難しくなるってんでうちは紙と鉛筆しか使わせてもらえないよ。
0102デフォルトの名無しさん
NGNG何万年後の保守が難しくなるってんで、うちは象形文字一筋。
0104デフォルトの名無しさん
NGNG>デストラクトチェーン中にわざわざ vptr を書き換えているのでしょうか?
そういうこと。
コンストラクト時は基底クラスのコンストラクト直後に派生クラスの vptr に
書き換える。デストラクト時は逆に基底クラスのデストラクト直前に vptr を
基底クラスのものに書き換える。だから、「不定」ということはない。
0106デフォルトの名無しさん
NGNG{
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文字列クラスを使う
0108デフォルトの名無しさん
NGNGAを構築した後、fname の参照元に対する変更に追随する必要があるなら前者だし、
影響を受けてはいけないなら後者だな。
#VCでは _strdup だな。
0109デフォルトの名無しさん
NGNG0110デフォルトの名無しさん
NGNGコピーコンストラクタむっちゃ忘れてました・・・
代入演算子もですよね
private:
A(const A& a){}
A& operator=(const A& a){}
って事でひとつ・・・
で、何が言いたかったかというと
>>108氏が言及しているような事で、
前者だと参照元がなんかの拍子で書き替わってしまったら〜
という危険性は無いのかなという疑問でした
>>107が正解ですかね・・・
0111デフォルトの名無しさん
NGNGconst char*だからなんとなく変な気がするけど、
通常のクラスで考えてみるといいよ
前者、後者どちらもあり得るけど
値型に近いもの(文字列とか)なら後者にすることが多いねえ
011293
NGNGLoki-lib みたら、Intel C++ Compiler は、素の Loki 呼ぶようになってたよ。
Intel C++ Compiler 検討してみようかな…
>>96
ありがとう。参考になりました
0113デフォルトの名無しさん
NGNGそう、文字列クラスを使うのが正解。
遅延評価してくれる文字列クラスなら
あなたの出した2つの例のいいとこどり(↓)ができる。
文字列のコピー元の内容が変わらなければ、ディープコピーが行われることはない。
文字列のコピー元の内容が変われば、その時点で複製が作成される。
0114デフォルトの名無しさん
NGNGというクラスがあって、
const A a;
A *pa;
pa = (A *)&a;
上のキャストはExceptional C++によると、新しいキャストに置き換えられない
と書かれているんですが(const_castすると未定義になるらしい)。
つまり & で取ったconstポインタはconst_cast出来ないと言うことですか?
0115デフォルトの名無しさん
NGNG単に、引数で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レスthanks.
constで宣言&初期化したオブジェクトはconst_castできないんですね。
いままでconst_castすれば何でもconstをはずせると思ってました。
。
0118デフォルトの名無しさん
NGNGfriend class F;
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNGレスありがとう。
>friend class F;
と書くと、VC6やBCC5.5.1ではfriendが利かないんです。
やっぱりtemplate parameters cannot be friends が正しいんですかね?
0121デフォルトの名無しさん
NGNG質問までの経緯としては,
1.あるソースを読んでいたら
delete pA;
pA = NULL;
という2行があった.
2.今までてっきりNULLがセットされるものだと思ってた自分がいて,
焦る.セットされることを前提でif(pA)とかしてたし.
3.MSDNやWebでそのことを明言してるフレーズを見つけられず.
といった流れです.
言語仕様ではどのようになっていたかご存知の方がいたら教えてください.
0122デフォルトの名無しさん
NGNGされない。
というか、
deleteはpAの型に応じたデストラクタを、引数pAをのせて呼び出すだけ。
無用なバグの回避のために、deleteの直後にNULLを代入するのはよい習慣。
0123121
NGNGレスありがとうございます!
以前書いたコードもチェックした方が良さそうですね.
もやもやが解消されてすっきりしました.
>>無用なバグの回避のために、deleteの直後にNULLを代入するのはよい習慣。
はい,心掛けるようにします.
0124デフォルトの名無しさん
NGNG> deleteの直後にNULLを代入するのはよい習慣。
俺はそうは思わない。無駄なコードは読み手に誤解を与える場合がある。
それに以下のような場合、NULLを代入するためだけにconstを外す必要が
あるが、constですむものをconstにしないのは悪い習慣である。
A *const pA = new A;
delete pA;
pA = NULL;
0125デフォルトの名無しさん
NGNGとされてるね。こっちは事情が違うけど、無駄な参照を減らすのは
よいことだと思う。
0126デフォルトの名無しさん
NGNG自分でdeleteなんて書かなくていいようにするのがもっとよい習慣。
0127デフォルトの名無しさん
NGNG事情違いすぎ
0128デフォルトの名無しさん
NGNGつーか、const なポインタを delete するような状況って
それをメンバとして持つオブジェクトのデストラクト時
くらいしか思いつかんが。
0129デフォルトの名無しさん
NGNGポインタ自体の const と delete には何の関係もないと思いますが
何か勘違いしてません?
0130デフォルトの名無しさん
NGNG余計なことを考えずにすむし。
0131デフォルトの名無しさん
NGNGNULLを代入するとどうしてバグ回避になるんですか?
0132デフォルトの名無しさん
NGNG>>121
0133デフォルトの名無しさん
NGNGあ、玄人の皆さんはしなくていいですよ。
0134デフォルトの名無しさん
NGNGありがとうございます。見落としていました。
メンバ変数とかをdeleteをしたときに、NULLを入れておくようにするのですね。
0135デフォルトの名無しさん
NGNG0136デフォルトの名無しさん
NGNGvoid safe_delete(T*& ptr)
{
delete ptr;
ptr = static_cast<T*>(0);
}
0137デフォルトの名無しさん
NGNGキャストしなくても 0 は明らかにヌルポインタなのだが。
0138C++使い(定期)
NGNG基本
ブ厚いけど持っておくと(・∀・)イイ!
◎ プログラミング言語 C++ 第三版
普通
◎ Effective C++
◎ More Effective C++
◎ Effective STL
◎ Exceptional C++
Hな方
◎ Modern C++ Design
0139デフォルトの名無しさん
NGNG◎Optimizing C++
0140デフォルトの名無しさん
NGNG0141デフォルトの名無しさん
NGNGどうしたらいいですか?
0142デフォルトの名無しさん
NGNGん?C++が人生に影響与えるほど疲れたか?
取り敢えず精神神経科にいって薬出してもらいなさい。
0143デフォルトの名無しさん
NGNGどっかで見た話題だな、と思ってたのだが思い出した。
http://www.kmonos.net/wlog/
の10/9にそのネタが。
>>138
憂鬱本も入れといてホスィ。
0145デフォルトの名無しさん
NGNG呼び出し先で新たに領域確保したいのですが、単純型だと出来るのですけど
構造体になった途端同じコード使い回しているのに出来なくなってしまいます
どなたかアドバイスを宜しくお願いします
0146デフォルトの名無しさん
NGNG?
0147デフォルトの名無しさん
NGNG0148デフォルトの名無しさん
NGNGvoid 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デフォルトの名無しさん
NGNG0150デフォルトの名無しさん
NGNGHRESULTが返ってきているためのエラーかもね。
0151デフォルトの名無しさん
NGNGVC6のメモリウィンドウで*vertexdatが違うところを指していて
*vertexdat+0が実際の場所を指しています
これはメモリウィンドウのせいかもしれませんが、気になります
0152147=149=150 ◆o615kFadeE
NGNGnew と delete []をペアでつかっているの?new[]じゃなくて。
0153デフォルトの名無しさん
NGNGnew[]です間違えました御免なさい
http://jp.y42.briefcase.yahoo.co.jp/bc/nas6_2001/lst?&.dir=/Projects&.src=bc&.view=l&.last=1
うpしたので心優しく時間もある方見てみてください
行数はあまりないので宜しくお願いします
0154デフォルトの名無しさん
NGNGパスワード求められるよ?
0155デフォルトの名無しさん
NGNGあれゲストでは入れませんか?ちょっと待っててください
0156デフォルトの名無しさん
NGNG0157デフォルトの名無しさん
NGNGサーバーがビジーで開けんよ?
0158デフォルトの名無しさん
NGNGもう行き詰って…
例えば手元に100個のデータファイルがあるとします。
その100個のデータファイルひとつひとつに
同じフィルタをかけたいのです。
そこで
ifstream in(****, ios::in | ios::binary);
ofstream out(####, ios::out );
filter();
こんな感じのプログラムをつくっているのですが、
この****と####をファイルごとに変えたいのです。
どのようにすればよいでしょうか?
argvで100個ファイル名を打ち込むとか無しで。
自動的に行いたいのです。
1000個になってもファイル数だけ指定するだけで
簡単に処理できるようにしたいです。
よろしくお願いします。
0159153
NGNG0161158
NGNGレスありがとうございます。
ファイル名に規則性をもたせることはできます。
自分の勉強不足かもしれませんが、
ifsteramの****部分には例えば"test1.dat"というような
きちんとしたファイル名を指定をしないと読み込めないみたいなのです。
そうするとtest2.dat、test3.dat、test4.dat…test100.datと続くとき、
どうループをまわせばよいのかと。
0162153
NGNGsprintf(s,"%d.dat",i);
strcat(str,s);
じゃ駄目ですか
0163158
NGNGありがとうございます。
ちょっとやってみます。
0164デフォルトの名無しさん
NGNG{
std::string s("file");
s += boost::lexical_cast<std::string>(n);
s += ".???";
ifstream ifs(s.c_str());
...
0166157
NGNGこのコードを見る限りでは 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;
でいいんじゃない。
どのような結果を期待していたのかが解らないので、これ以上はなんとも言えない。
0167153
NGNG0168153
NGNGhageの方が実際の実装予定関数でそっちは可変長で実装するので
newで確保->newでサイズ増やして再確保->・・・
が必要なのです
で多分hageはメモリエラーしてそうな気がしてきました
(グローバルにしても落ちたので)
がんばってバグ取りします
レスありがとうございました
0169157
NGNGそんな貴方に std::vector。
typedef vector<VERTEX> Vertices;
Vertices v(n) n = 要素数
v.resieze(newsize) 拡大(縮小にも使える)
v[index].x 要素アクセス
0170158
NGNGできました〜
ありがとうございました。
0172デフォルトの名無しさん
NGNG0173デフォルトの名無しさん
NGNG0174147=149=150 ◆o615kFadeE
NGNGVERTEX *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デフォルトの名無しさん
NGNGifstream stream("filename", ios::binary);
while (!stream.eof()) {
処理1
stream.read(reinterpret_cast<char*>(&rec), SIZ);
}
とやると、一番最後のレコードを2回読んでしまいます。
どうすれば一番最後のレコードを1回しか読まないようにできますか?
0176デフォルトの名無しさん
NGNG{
// ...
if (!stream.read(...))
break;
}
0177デフォルトの名無しさん
NGNGありがとうございます。ということは、レコードがない所でreadを
実行しないとEOFが検出されないようですね。助かりました。
0178デフォルトの名無しさん
NGNGおいおい。
EOF の発生条件は C の fread() や fgets() 等でも同じでないかい?
ファイルの終端を超えて読もうとしない限り EOF にならない。
0179デフォルトの名無しさん
NGNG×ファイルポインタがファイルの終端に到達した
○ファイルの終端を越えてreadしようとした
でOKですか?
0180デフォルトの名無しさん
NGNGうむそうですね。fread()などはファイルの終端に達していても
読み込んだバイト数を返しますからね。
>>179
そのようです。
0181デフォルトの名無しさん
NGNG〜なんとか.rc というファイルができて、レイアウトなどはできたようなのですが、
これを既存のソースからどう呼び出せばいいのか、わかりません。
サンプルが載っているページ等でもいいので、どなたかヒント戴けませんでしょうか。
(ダイアログの使い方は、VBで言うところのInputBoxみたいな感じです。text入力欄とok、cansel)
0182デフォルトの名無しさん
NGNG★初心者にVisual C++を教えるスレ★
http://pc3.2ch.net/test/read.cgi/tech/1030985362/l50
VisualC 相談室【8】
http://pc3.2ch.net/test/read.cgi/tech/1022499000/l50
0183182
NGNGこっちね。
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デフォルトの名無しさん
NGNG0186デフォルトの名無しさん
NGNG0187デフォルトの名無しさん
NGNGあちこちこぴぺすんな!
0188名無しさん
NGNGいつまでも古いコードを吐いてもらっちゃ困るしな。
0189デフォルトの名無しさん
NGNGif (nanikano_pointer)
{
// not null
}
else
{
// nurupo
}
でいいの?
あと、NULLは、<iostream>に定義されてるの?
0190デフォルトの名無しさん
NGNGNULLを0と断定するのは危険。
とでも言っておこう。
0191デフォルトの名無しさん
NGNG規格でnull pointerは「偽」とみなされることになってる。
0192デフォルトの名無しさん
NGNGへぇ、つまんない・・・。
0193デフォルトの名無しさん
NGNG{ return 0; } // ok.
0194デフォルトの名無しさん
NGNG必ず呼ぶようにするのは、どうするのです?
<pre>
class A {
A() {
いろいろ処理
}
void Init( int i ) {
いろいろ処理
}
}
class B : public A {
B() {
いろいろ処理
Init( 100 ); <----これを必ず書いてはしい
}
}
</pre>
ドキュメントに書いとく事しかできないのですかな。
0195デフォルトの名無しさん
NGNG{
A(int n);
};
0196デフォルトの名無しさん
NGNGダメなら、デバッグビルドのときはフラグでInitを呼んだかチェックするように
するとか・・・
0197デフォルトの名無しさん
NGNG0198デフォルトの名無しさん
NGNGオーバーロード機能のせいですか?
オーバーロードは汚いとは思わないけど、
lambdaやinterfaceが無いから汚くせざるを得ない、って事はあるかもね。
0200デフォルトの名無しさん
NGNGそのクラスのメンバ関数を呼び出しても
基本的にはOKと思ってるんですが、
問題になる場合はどんな時なんでしょうか?
0201デフォルトの名無しさん
NGNGそこでそのクラスのコンストラクタが呼び出されると、、
0202デフォルトの名無しさん
NGNG先生 「頑張れば、だんだん、覚えられるようになるよ。」
女子生徒「で、でも・・・。先生は全部暗記してるんですか?」
先生 「もちろん。受験生のときに、なんとか暗記したよ。」
女子生徒「いいなぁ。先生の脳みそ、わたしにも分けてほしいな。」
先生 「ははは。脳みそは無理だけど僕の遺伝子だったらあげてもいいよ。
僕の遺伝子には、今まで勉強してきたことがすべて記憶されてるんだよ」
これがあれば、簡単に合格できるかもよ。」
女子生徒「え〜。それ、欲しい、欲しい。どうすれば、先生の遺伝子もらえるの?」
先生 「そうか・・・。じゃあ、スカートとルーズソックスはそのままでいいから
パンティをぬいでごらん。」
女子生徒「はい、脱ぎました。早く、先生の優秀な遺伝子をください。」
先生 「そんなにせかさなくても、たっぷり分けてあげるから。
それじゃあ、始めるよ。ハァハァ・・・。」
女子生徒「あっ・・・。先生・・・。も、もっと・・・。」
0203デフォルトの名無しさん
NGNG(Cast)Class.forName("className").newInstance();
ってどうやるの?
0204デフォルトの名無しさん
NGNGそれをやるとどうなるのかをまずかけ。
C++を知っている奴がみんなJAVAを知っているわけじゃないだろ。
0205デフォルトの名無しさん
NGNGhttp://www.garret.ru/~knizhnik/cppreflection/docs/reflect.html
を突っ込む。
0206デフォルトの名無しさん
NGNGそのクラスではまだ実装されてない純粋仮想関数を呼び出すとヌルポで落ちる
0207デフォルトの名無しさん
NGNG感動した!
0208デフォルトの名無しさん
NGNG感動した!
0209デフォルトの名無しさん
NGNGボッキサゲ!
0210デフォルトの名無しさん
NGNG生成される条件(あるいはされない条件)について判りやすく説明しているサイトってないですか?
0211デフォルトの名無しさん
NGNG0212デフォルトの名無しさん
NGNG0213デフォルトの名無しさん
NGNGされる条件。
・(コピーコンストラクタ|代入演算子)が宣言されていない
・全てのメンバ変数がそのクラスのスコープで(コピーコンストラクト可能|代入可能)
・派生元が、そのクラスのスコープで(コピーコンストラクト可能|代入可能)
以上。
0214デフォルトの名無しさん
NGNGなかったらforでチマチマやってくしかないでしょうか。
0215デフォルトの名無しさん
NGNGチマチマやる関数を作りましょう。
0216デフォルトの名無しさん
NGNG0217デフォルトの名無しさん
NGNGnamespace {
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デフォルトの名無しさん
NGNGexplicit 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デフォルトの名無しさん
NGNG0220デフォルトの名無しさん
NGNG0221デフォルトの名無しさん
NGNGstatic_cast dynamic_cast const_cast とか、使うべきですか?
これを、使うことによって、メリットってあるのかな?
人のソースとか、読んでると、ほとんどの人が、Cキャスト。
0222デフォルトの名無しさん
NGNG仕事ならば、そこのコーディング規約に従う。
趣味あるいはコーディング規約を作る立場ならば、
C++キャストが適した場所には必ず使う。
0223デフォルトの名無しさん
NGNG漏れはCキャストは使わないが、コーディング標準を決めるときは
・dynamic_castは代用できないから使わざるを得ない
・(constをどうしてもはずさなければならないならそのようにしてもいいが、Cキャストではなく)const_castを使え
・あとは好きにしたら?
くらいにしている。逆に、数値計算っぽい箇所でのstatic_cast強要は少し
可愛そうかな(タイプ数的に)、とも思う。
0224223
NGNG・type safetyのありがたさ
・const objectのありがたさ
をわかってもらった上で、223の規約を適用します。
放っておくと無意味なキャスト、無意味なconstはずしで積み上げてきた各種の保証がぼろぼろになるから...
0225デフォルトの名無しさん
NGNG0226デフォルトの名無しさん
NGNG0227153
NGNG亀レススマソ
デバグしていただいてありがとうございました
0228デフォルトの名無しさん
NGNG0229デフォルトの名無しさん
NGNG予想通りに働かないのですが、なぜなんでしょうか?
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あと、std::string s = a;は s(a) ; とせんとコンパイルでけん。
0231229
NGNGサンクス。
やっぱ、VC++.NETのバグの気がしてきた。
0232デフォルトの名無しさん
NGNGto::operator const char*() があるからって
暗黙に
std::string s = a.operator const char*();
してくれるんだっけ?
0233デフォルトの名無しさん
NGNGいいような。
229 に関しては、ostream への operator<< を実装すべきだ。
0234デフォルトの名無しさん
NGNGcoutが複数のoperator overloadがあると
どれが選ばれるか分からんような...
0235デフォルトの名無しさん
NGNGBCCだと型を明示しろっつーコンパイルエラーが出る
確か「cout << static_cast<目的の型>(to)」で問題ないはず
0236デフォルトの名無しさん
NGNG一体何で混乱する?
何も考えずに operator<< が呼ばれる。
その前に明示的に型キャストを指定していれば別だ。
# 漏れ的には、229 の std::cout << a; で、何で to::operator const char* () と、
# それに続けて ostream::operator<<(const void *) が呼ばれるのか分からん。
# まあ VC のバグなんだろうな・・・。
あと、ややどうでもいいか゜ 229 が何で std::endl をつけないのか不思議だ。
0237236
NGNG逝ってきます・・・
0238デフォルトの名無しさん
NGNG> 一体何で混乱する?
> 何も考えずに operator<< が呼ばれる。
どの operator<< が呼ばれるの?
具体的な宣言まで一緒に書いてみてよ。
0242241
NGNGという事かな。
0243デフォルトの名無しさん
NGNGC風キャストに使う理由が見出せない。
C++のキャストの方が意図・区別がし易い。
0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNG0247デフォルトの名無しさん
NGNG0248デフォルトの名無しさん
NGNG0249デフォルトの名無しさん
NGNG間違っていると思います。
0250デフォルトの名無しさん
NGNG厨房と爺はメソッドをconstにしないし、引数をconstにしないんだからしょうがない。
0251デフォルトの名無しさん
NGNG0252デフォルトの名無しさん
NGNGdobleとintの間の変換をしょっちゅうやるような場所だったら、
Cキャストの方が楽だし、そういう場面では危険も少ないとは
思う。それ以外なら問答無用でC++キャストにするけど。
0254デフォルトの名無しさん
NGNG0255デフォルトの名無しさん
NGNG未定義…
(・∀・)イクナイ!
0256デフォルトの名無しさん
NGNG1, 接頭辞m_をつける
2, 接尾辞_をつける
3, んなもんつけない(で、メンバ関数の引数とかぶるときはthis->をつかう)
俺は2か3で迷ってるんだけど…。(最近は2)
1は使ったことない。
0257デフォルトの名無しさん
NGNG漏れは、自分だけで書くなら常に 3。
共同の場合は相談に応じて。
仕事の場合はしょうがないから規約に従う。
0258デフォルトの名無しさん
NGNG人に見せるときは1か3、だなぁ。接尾辞 _ って
目立たないので、あんまり付ける意味が感じられなくて。
0259デフォルトの名無しさん
NGNGそうでない場合は気分によるな・・・どれでも別に構わないし
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNG0262デフォルトの名無しさん
NGNGいつごろから使われだしたんだろ。
0263デフォルトの名無しさん
NGNG漏れの場合は Exceptional C++ を読んでから。
0264デフォルトの名無しさん
NGNGなんか理由かいてあるの?
0265デフォルトの名無しさん
NGNG0266263
NGNG接尾辞_については特に。「個人的なおすすめ」とだけ。
あの本好きなので習ってみただけっす。
>>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デフォルトの名無しさん
NGNG0269名無しさん
NGNGクラスにするくらいなんだから、意味づけしろよ。
0270デフォルトの名無しさん
NGNG終了。
0271デフォルトの名無しさん
NGNGしかも 269 は 「一番アホ」 と表現する程でもない
0272271
NGNG269 は 「一番アホ」 と表現する程でもないどころか、言っている内容は
至極まともだ。
ただの揚げ足取で、269 の本論は全く覆せていない。
つーか例示にしても a じゃなくて Something とかにしとけ。
0273デフォルトの名無しさん
NGNG2 6 7 必 死 だ な
0274デフォルトの名無しさん
NGNG0275デフォルトの名無しさん
NGNGと言うより、本当のプロパティのように扱えない以上、Get/Set は
つけるべきとまでは言わんが、そうしても良いと思うがどうよ?
0276デフォルトの名無しさん
NGNG0277デフォルトの名無しさん
NGNG>>276
0278デフォルトの名無しさん
NGNG正直、コーディング規約が統一されてればどっちでも良い。それより int を
渡すのに、わざわざ参照使ってる方が気になる(w
(まー、今時のコンパイラなら最適化かければ結果的には変わらんだろうが)
0279デフォルトの名無しさん
NGNGClass::GetA() const、になっていないのも気になって夜も眠れない。
0280デフォルトの名無しさん
NGNG0281デフォルトの名無しさん
NGNG記憶していますが、その際の叩く理由は何でしたっけ?C++には関係なし?
0282デフォルトの名無しさん
NGNG0283デフォルトの名無しさん
NGNG0284デフォルトの名無しさん
NGNG0285デフォルトの名無しさん
NGNG自明
0286デフォルトの名無しさん
NGNG0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNG0289デフォルトの名無しさん
NGNGそれがルーティンワークというものだ
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNG0292256
NGNG接尾辞_はタイプ数が減るから好き。
this->はちょっと長い。
m_はそもそもなんか格好悪い。mってマゾですか(藁
0293デフォルトの名無しさん
NGNGメンバです。アホですか?
0294デフォルトの名無しさん
NGNGキター!!!!
0295デフォルトの名無しさん
NGNG{
int a;
public:
int GetA() { return a; }
void SetA(int a) { this->a = a; }
};
とかやってるヤツは低脳
class A { public: int a; };
にしろ
0296デフォルトの名無しさん
NGNG内部で保存していたいデータと外から見えるようにしたいデータが著しく違う場合は?
たとえば、日付は内部では整数型で管理した方が都合が良いが外には文字列型で見せたいとか。
0297デフォルトの名無しさん
NGNGclass A{
B b;
};
class B{
A a;
};
みたいな
0298デフォルトの名無しさん
NGNGそれなら構造体にするのが普通だと思うんだが
0299デフォルトの名無しさん
NGNGポインタだったら可能。
class A {
B *b;
}
class B {
A *a;
}
0301デフォルトの名無しさん
NGNGa->b->a->b->a->b->a = a;
わけわかんねえ…
0302デフォルトの名無しさん
NGNGリンクリストとかツリーとかだとそういう構造になるけど…
0303デフォルトの名無しさん
NGNGその設計は100%誤りである。
0304デフォルトの名無しさん
NGNGツリーなら2つクラス用意せんでもいいんでないかい?
0305デフォルトの名無しさん
NGNG定義を述べるだけなら誰でもできる。
根拠もついでに示してくれ。
0306デフォルトの名無しさん
NGNG途中のでNULLポインタが混ざっててエラーを起こす罠
0307デフォルトの名無しさん
NGNG> ツリーなら2つクラス用意せんでもいいんでないかい?
「そういう構造になる」というのは、データが再帰的に
連なるって程度のことで、深い意味は無いです…
(ツリーだとノードとリーフで複数のクラスを使うことがよくあるとは思うけど)
0308デフォルトの名無しさん
NGNG0309デフォルトの名無しさん
NGNG0310デフォルトの名無しさん
NGNG0311デフォルトの名無しさん
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┌──────────┐
│ Cの知識 ┌────┼───────┐
| .|. . . |. . .C++.の知識.|
└─────┼────┘ . |
. └────────────┘
かぶる領域はある。
0314デフォルトの名無しさん
NGNG0316デフォルトの名無しさん
NGNGvoid (func)(){\
(hook)(); \
(base)::func();\
}
とでもしとけ。
0317デフォルトの名無しさん
NGNGだめだな当然(-_-)
0318デフォルトの名無しさん
NGNGだとちゃんと動くのに
fps = 1000 / (timeGetTime() - prev_time);
がゼロ除算エラーになるのは何故ですか・・・?
0319デフォルトの名無しさん
NGNGpublic:
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コンソールだったらの話だけど。
0322デフォルトの名無しさん
NGNGif(i%10==0) putchar('\n');
printf("%d ", i);
sleep(1);
}
0323デフォルトの名無しさん
NGNGマルチ野郎には何も教えてやらねえぞ。
0324デフォルトの名無しさん
NGNGboost::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デフォルトの名無しさん
NGNGfor(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デフォルトの名無しさん
NGNGsleepの分解能は秒である、と書いてあるが。
http://www.linux.or.jp/JM/html/LDP_man-pages/man3/sleep.3.html
0328デフォルトの名無しさん
NGNG> しかもsleepの分解能は秒か?
unix系は秒単位じゃなかったっけ?
0329デフォルトの名無しさん
NGNGを見ると、最初の行は全角で、後の行は半角だ。
なかなかの引っ掛け問題だな
0330デフォルトの名無しさん
NGNG0331デフォルトの名無しさん
NGNGを見ると文章には0〜99と書いているが、
表示例には、
最初の行が1〜9で、その次の行からは10〜19、20〜29・・・
になっている。
これも引っ掛けか?
0332デフォルトの名無しさん
NGNG「FileHandle << "なんたらかんたら" << endl;」(FileHandleはofstreamです)
を、プリプロセッサマクロによって使う使わないの切り替えをする事は可能ですか?
例えば普通は
#if defined(OUTPUT_LOG)
FileHandle << "なんたらかんたら" << endl;
#endif
みたいにすると思うんですが、その量が膨大なので
#define FileHandleで乗っ取って(?)処理しちゃうような
何か上手い方法はないかと思案中なんですが・・・
0333デフォルトの名無しさん
NGNG0334デフォルトの名無しさん
NGNG0335デフォルトの名無しさん
NGNGの定義を直接、書き換えてしまう。
0336デフォルトの名無しさん
NGNGFileHandle(厳密にはofstreamのラッパークラス)はユーザーにも公開していて
ユーザーが明示的に呼び出した場合は通常通りの操作をしたいのです
というのも、あるサブシステムを作っていて
そのエラーログを吐き出すのにFileHandleを使っているのですが
ユーザーから「標準のエラーログは邪魔くさいから有り無し変えられるようにして」と
仕様変更が入りまして・・・今更言うなよ・・・といったようなワケでして・・・
そのために1個グローバルなフラグを増やすのもアレですし
>>333氏の発想でもうちょっと考えてみます
0337デフォルトの名無しさん
NGNGこのままだとコンパイルすら通らないのでは。
fff() は CA::fff()
の間違いだとして…。分からん!
0338デフォルトの名無しさん
NGNGヨクヨメ
まぁ良く読んでもわからんがw
0339デフォルトの名無しさん
NGNG0340デフォルトの名無しさん
NGNGtimeGetTime() - prev_time
がゼロになってるからじゃないの?
0341デフォルトの名無しさん
NGNG本気でわからんか?
>>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 に投げてみろ。
0342341
NGNG追記。
浮動小数点演算のゼロ除算が一般保護例外にならないのは、浮動小数点数は
#INF 値つまり無限大を表現できるからだ。
だから整数の場合と違ってわざわざ一般保護例外にする必要が無い。
0343デフォルトの名無しさん
NGNGwin32環境ではゼロ除算と一般保護例外は別だよ。
他もそうだと思うけど。
0344デフォルトの名無しさん
NGNG1000.0fだとちゃんと動きます
デバッガでwatchしてみると
1000.0fの場合→正しいFPS値
1000の場合→unsigned int 0(0x0)
になります
もちろん初回計算時はprev_time = timeGetTime() - 10;
などとしてゼロ除算にならないように注意しています
更に、FPSを計った後Sleep(1)しているので
OSが仕様を踏襲している限り
(timeGetTime() - prev_time)がゼロになることはありえません
0345デフォルトの名無しさん
NGNG0346デフォルトの名無しさん
NGNGなら
DWORD tmp;
tmp = timeGetTime() - prev_time;
fps = 1000 / tmp;
とでもしとけ。
0347デフォルトの名無しさん
NGNGそれって・・・
それって・・・
エラーが発生してるんじゃなくて、単に整数演算の丸めで 0 になってるだけじゃ・・・
timeGetTime() - prev_time > 1000 の時どうなるか考えてみろ。
0348デフォルトの名無しさん
NGNG0349ちなみにソースの一部
NGNGvoid 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え・・・?
0351デフォルトの名無しさん
NGNG>更に、FPSを計った後Sleep(1)しているので
>OSが仕様を踏襲している限り
>(timeGetTime() - prev_time)がゼロになることはありえません
ありえません?
これだから・・・
0352デフォルトの名無しさん
NGNGFPS って普通 frames per second つまり 1 秒に何フレーム描画したかという
ベーンチマークのことで、実際に 1 秒きっかりを測って実際に何回レンダリング
できたかを測るものだろ。
決して、1 秒を 1 回のレンダリング時間で割った数値ではない。
0353デフォルトの名無しさん
NGNGあーはい・・・内部処理に49日とちょっとかかるとゼロになりますけど
>>352
それはわかっていますが、内部処理でfpsを見たりしているので
現時点での疑似FPSが必要なんです
/*いろいろ*/の部分で1秒毎に描画済みフレーム数調べる処理はしています
0354デフォルトの名無しさん
NGNGセンスのかけらも感じないな。
timeGetTimeは一回だけ呼び出せ。
こんな関数でstatic使うな。
そんな判定で除算を使うな。
0355デフォルトの名無しさん
NGNGで、347 の件はどーなったの?
0356デフォルトの名無しさん
NGNG0357デフォルトの名無しさん
NGNG除算とかの話なら、C++ でも範疇だろう。
それとも、C++ でも C と重なる機能は C スレへ逝けって?
0358デフォルトの名無しさん
NGNG>timeGetTimeは一回だけ呼び出せ。
定義することは誰でもできます
明確な理由を教えて下さい
>こんな関数でstatic使うな。
こんな関数でメンバ変数増やしたくありません
>そんな判定で除算を使うな。
どうやっても60FPSと指定したい場合は
どっかで1/60なり除算しないと無理だと思うんですが
プリプロセッサにやらせろって事ですか?
ユーザーが動的にFPSを指定したい場合は?
>>357
ゼロ除算になるのは何故?という質問が
FPSの計り方にズレてきている事を指しているんじゃないでしょうか
>>355
丸め誤差で変数fpsがゼロになったところで、
どこを見ても「任意/fps」の式はありませんが・・・?
0359デフォルトの名無しさん
NGNG問題はここ
if (fps < fps_limit) {
prev_time = timeGetTime();
return;
}
ここからreturnした場合、最後のSleep(1)が呼ばれないので
内部処理が1ms以内で終わった場合ゼロ除算になる
0360デフォルトの名無しさん
NGNG漏れは 354 じゃないけど 「timeGetTime() は一回だけ呼び出せ」 には賛成。
他の場合ならいざしらず、FPS 値が重要になるような局面では。
「こんな関数で static 使うな」 の意味だけど、static にする必要も無い
(当然メンバ変数にする必要も無い) ものが static になってるという事じゃ
ないの?
static DWORD prev_time = (timeGetTime() - 10); の初期化は 1 回しか
行われないけどいいの?
(もしかしてこれが今回の騒ぎの原因じゃあ・・・)
ヒープに確保しなければならないようなでかい領域を使わない限り、auto 変数の
速度上のコストって全くのゼロなんだけどな。
あと、355 にある 「347 の件」 は 349 のソースには全く関係無いんだけど、
「どこを見ても「任意/fps」の式はありませんが・・・?」 ってどう言う意味?
0361360
NGNG> 「こんな関数で static 使うな」 の意味だけど、static にする必要も無い
> (当然メンバ変数にする必要も無い) ものが static になってるという事じゃ
> ないの?
は取り消し・・・
0362デフォルトの名無しさん
NGNG解決しました
ありがとう
>>360
最後のヤツですが、ゼロ除算エラーが起きる事が問題だったので
fpsがゼロになることは一向にかまわないのですが、という意味です
0363354
NGNG解決すんなよ。そんな腐れコードさっさと捨てろ。
・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の算出でちょっとややこしくなってますが
0365354
NGNG> while (fps >= fps_limit) fps = 1000.0f / (timeGetTime() - prev_time);
> これは固定値だと意味をなさないどころか危険なコードになります
もともと無意味で危険な糞コードなんだよ。
そんなループいらねぇだろ。
> されません(させません)し、当然nocopyableです
> cEngineはさらに上位のラッパークラスに生成を管理されています
> そのラッパークラスを1プロセス内で2度生成した場合の動作は保証しませんが
貼り付けられたあのソースを見ただけでそこまで察しろってか。
> 除算は大幅にはぶけました
> が、いまどき除算がボトルネックになるようなCPUでゲームはしないでしょう
「除算しないと無理」とか言ってた奴のセリフかね。
つまらん負け惜しみしてねぇで、
除算をはぶく方法を頭に刻み込め。
> prev_time = now_time;
> これこそ間違ってるっぽいんですが・・・
んー?どこが?
まぁ貴様のやりたいことはいまいちつかめんから、そうかもしれんな。
> という至極単純なモノです
> 疑似FPSの算出でちょっとややこしくなってますが
負け惜しみはいらねぇから、
単純なことがややこしくなったらなんかおかしいと肝に銘じておけ。
0366デフォルトの名無しさん
NGNGこの処理がレンダリング処理のどんな場面で必要なのか想像がつかないよ・・・
364 は天才かも知れぬ
0367ゲーム会社勤務
NGNG> が、いまどき除算がボトルネックになるようなCPUでゲームはしないでしょう
ゴメン、突っ込ませて。
除算なんか多様してたらまともに動くゲームなんて無い。
こちとら、必死こいて最適化してんだ、ふざけんな。
0368デフォルトの名無しさん
NGNGアフォじゃねーのこいつ
0369デフォルトの名無しさん
NGNG0370デフォルトの名無しさん
NGNG0371デフォルトの名無しさん
NGNG0372デフォルトの名無しさん
NGNGtemplate<typename T> void hoge(T& foo) {}
template<> void hoge<char>(char& foo) {}
0373371
NGNGtemplate< typename T > void hoge(T& foo, int bar = 0) {}
template<> void hoge<char>(char& foo, int bar = 0) {}
だと駄目でした
0374371
NGNG0375デフォルトの名無しさん
NGNG0376デフォルトの名無しさん
NGNGナニソレ
ブキ?
0377デフォルトの名無しさん
NGNG0378デフォルトの名無しさん
NGNG0379デフォルトの名無しさん
NGNG0380デフォルトの名無しさん
NGNGtemplate<> void hoge<char>(char& foo, int bar) {}
にするとコンパイルできてしかも汎用テンプレートで与えられた
デフォルト引数を引き継ぐんだね。知らんかった。g++ 3.2
0381デフォルトの名無しさん
NGNGへー、それは猫耳。
0382デフォルトの名無しさん
NGNGVC6でも逝けた。奇跡だ(わら
0383デフォルトの名無しさん
NGNGすいません、T*& ってどういう動きをするのか教えてもらえますか?
例)
*どこかに typedef Class* LPCLASS; と設定されているものとする。
void func func( LPCLASS& cls ) // <- cls はナニ?
0384383
NGNGvoid func func => void func
0385デフォルトの名無しさん
NGNG0386デフォルトの名無しさん
NGNG/* pをいじる */
って私はよくやるけど。
0387386
NGNGです
0388デフォルトの名無しさん
NGNGtypedef 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デフォルトの名無しさん
NGNGfunc(p); //pの中身が変更される可能性がある!
cout<<p->msg()<<endl; //pがぬるぽだったらいやんなエラー
とか
0390デフォルトの名無しさん
NGNGAfxMessageBox("さいたまさいたまさいたま〜〜( ゚ ∀゚ )");
0392デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNGLPCLASS p = new Class();
0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNGスレ違い。
0397デフォルトの名無しさん
NGNG一般保護例外はメモリ関係でプロテクションに引っかかった場合だよな。
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デフォルトの名無しさん
NGNG0401デフォルトの名無しさん
NGNGヘッダーファイルでusing namespace std ; などを宣言して最後にこれを
撤回したいのですがどうすればよいでしょうか?
例えば
#include <string>
using namespace std ;
class myclass {
string str1 ;
} ;
みたいなのをヘッダーファイルに書いてcppファイルでこれをインクルードしたときに
using namespace std ;の宣言を無効にしておきたいのです。
コンパイラはVC++6です。お願いします。
0402デフォルトの名無しさん
NGNGそのヘッダファイル内の定義を新たに namespace ns で包んで、その中で
using namespace std すれば見かけ上は OK。
でも、後で using namespace ns とした時点で std も丸見えになるので
あんまし有効でない。
結局、ヘッダ内では面倒臭がらずに std:: 付けよう、というのが一般的
みたい。
いい方法があったら漏れも知りたい。
0404デフォルトの名無しさん
NGNG>>Comeauって$50で全部(コンパイラ、標準ライブラリ、リンカ、デバッガ)ついてくるんですか?
>>そうなら買ってみてもイイ!かも
>ついてこない。
>フロントエンドだけ。
デバッガはともかく、標準ライブラリとリンカも別売りなんでしょうか?
英文ちゃんと嫁って言われそうですが(汗
使用しているかたオシエテ
0405デフォルトの名無しさん
NGNGキレイキレイしましょ?
0406デフォルトの名無しさん
NGNGどうしたらちゃんと指すようにできますか?
ostringstream os;
os << "あいうえお";
const char* p = os.str().c_str();
0407デフォルトの名無しさん
NGNGconst char* p = s.c_str();
or
ostrstream os;
os << "あいうえお";
const char* p = os.str();
0408デフォルトの名無しさん
NGNG下のは危険な香りがするのですが...
0409デフォルトの名無しさん
NGNGc_str()の寿命は一時的だから、ポインタに代入して参照したら、
何を指しているか保証されないよ。
0410デフォルトの名無しさん
NGNGかけるソフトをVC++で作ろうと思っているのですが、FATやらなんらや
で良くわかりません。大まかで良いのでアドバイスをいただきたいです。
環境はWin2000のVC++6.0です。
よろしくお願いします
0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNG0413デフォルトの名無しさん
NGNGWIN32APIスレで聞いたほうがいいカモ。
でもあそこでもデバイスドライバの話は見たことないな・・・
0414デフォルトの名無しさん
NGNG0415デフォルトの名無しさん
NGNG専用の機械が必要。
0416デフォルトの名無しさん
NGNGVC++とDDKを使う。DDKはMicrosoftのサイトのどっかにある。
0417デフォルトの名無しさん
NGNGプロテクトノッチを上げる専用の機械か?(藁
0418デフォルトの名無しさん
NGNG0420デフォルトの名無しさん
NGNGnamespaceについてですが、
自作ライブラリが、他のライブラリと重複しないようにnamespaceを使ってみたんですが
STLの名前空間でのcoutは、
std::cout でも、cout
どっちでも使用できるようになっているのですが
自分で宣言した名前空間(例:namespace onigri)の中にある
関数(例: void wassyoi(); )は、
onigiri::wassyoi();
しか受け付けないみたいです(wassyoi();だけでは無理)。
他のライブラリと重複してない場合、wassyoi();だけで、
呼び出すことはできないのでしょうか?
自分なりに考えた方法は、
namespace onigiri
{
void wassyoi();
}
using namespace onigiri;
という風に、
ヘッダ内に、usingを無理やり入れてます。
これだと、あまり よくないような気がして。
0421デフォルトの名無しさん
NGNGそれでいいんだよ。>using
g++の2.xを使ってるのか? std:: なしでエラーにならんのは
単にg++の不具合。
0422420
NGNG何か、他に方法があったらご教授ください。
0423デフォルトの名無しさん
NGNG0424420
NGNG#include <iostream>
だと std空間で
#include <iostream.h>
だと グローバル空間みたいでした。
俺がアフォでした。
ごめんちゃい。
0425420
NGNG422は、気にしないでください。
どうも。
0426デフォルトの名無しさん
NGNGusing onigiri::wassyoi;
って感じに、個別にやったほうがいいと思われ。
0427デフォルトの名無しさん
NGNGするという目的もあるんだから、その名前空間を定義するヘッダ内で
using namespaceするなんて意味ないじゃん。
0428デフォルトの名無しさん
NGNGする癖を付けよう。
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNGmain() のあるファイルでも使っちゃ逝けないのか?
0431デフォルトの名無しさん
NGNGデフォって何?
0432デフォルトの名無しさん
NGNG0433デフォルトの名無しさん
NGNG0434デフォルトの名無しさん
NGNG怠け者がすること、って意味じゃないかな?
0435デフォルトの名無しさん
NGNG0436デフォルトの名無しさん
NGNGC++のとても簡単な事を全然思いつかないので、
どなたか教えてください。
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> C++のとても簡単な事
そう思うなら自分で回答してみては。
0438デフォルトの名無しさん
NGNG簡単だと思うのですけど、
自分で回答できなくて助けを求めています。
0439デフォルトの名無しさん
NGNG○ = +=
0440デフォルトの名無しさん
NGNGfor(int i=0; i<n; i++){
は,
for(int i=0; i<=n; i++){
な。
0441デフォルトの名無しさん
NGNGstd::accumulate(x,x+n,0)-std::accumulate(y,y+n,0)
0442デフォルトの名無しさん
NGNG頓珍漢
0443デフォルトの名無しさん
NGNGstring s1 = "A";
string s2 = "B";
if(s1 < s2)
としただけでだめです。stringのoperator <はちゃんと定義されていると
思うのですが、なぜだめなのでしょうか?
0444デフォルトの名無しさん
NGNG普通にできるが。
0445デフォルトの名無しさん
NGNG0446デフォルトの名無しさん
NGNG{
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「セミコロンはちゃんとあります」 って言われてもわからん。
そのエラーメッセージは何行目を指してたのよ?
エラーメッセージはプログラムのどこがどうおかしいかを教えてくれるもので、
あなたを困らせるものじゃないんだから、ちゃんと理解しなさい。
0448デフォルトの名無しさん
NGNGtry
{
コレの{の部分でエラーが出るのです
0449448
NGNG0450デフォルトの名無しさん
NGNGはっきり言ってわからん。
この文脈で考えられる事と言ったら try が変なものに #define されてるくらい
だが、そんな事無いだろうし。
つーか、エラーメッセージはエラーを示す唯一のメッセージなのに、何で全部
書いてくれないの?
エラーメッセージを、そんなにどうでもいい情報だと思ってる?
0451デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNG0453デフォルトの名無しさん
NGNGつくるとして、Tの名前どんなふうに命名しますか?
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNG0456デフォルトの名無しさん
NGNG0457デフォルトの名無しさん
NGNG0458デフォルトの名無しさん
NGNG0459453
NGNG〜Buf とか 〜s も考えたんですが、前者は感覚的に違う気がしたのと
後者はぱっと見て判断しにくいかなと。。Array がいいです。
ありがとうございます。
0461デフォルトの名無しさん
NGNG圧縮とか、固定小数点演算とかいろいろありますがな。
0462デフォルトの名無しさん
NGNG0463デフォルトの名無しさん
NGNGまともにプログラム組めるようになるとは思えないね。
0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNGvstr_type
0466デフォルトの名無しさん
NGNG1010 0000 0010 1000 = a028
ってなるのが全然わかりません。これは覚えなくてもよいですか?
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNGサンクス
0469デフォルトの名無しさん
NGNGint i = v.size();
みたいなことをVC++でやると 「size()の戻り値はint型じゃない」みたいな
ワーニングが出るがこういう場合、どう対処するのが普通なの?
1. intじゃなくてvector::size_typeを使う
2. size()の戻り値をintにキャスト
3. ワーニングを無視
0470デフォルトの名無しさん
NGNG1. が王道。
2. はどうしても符号付の数値が必要な場合のみ。
3. は絶対にするべきではない。
別解 4. 大抵は size_t で通じる。
0471デフォルトの名無しさん
NGNG3.は重要なwarningを見落としたりすると困るからちょっとイヤかも
0472デフォルトの名無しさん
NGNGsigned な数値を返す size() ってあるの?
0473デフォルトの名無しさん
NGNGわざわざunsignedを使うのはばかげている
という意見と
正の値しかとらない変数はunsignedを使うべき、間違って負の値が
入ることを防ぐことができる
という意見
あなたならDOUCH !?
0474デフォルトの名無しさん
NGNG0475デフォルトの名無しさん
NGNG「vectorのサイズ分ループをまわす」とかの場合、
1や4だとループのカウンタ用の変数もsize_tを使うことになるんですか?
ループのカウンタ用の変数がintだと結局終了条件でintとsize_tを比較
することになってしまいますよね。
0476デフォルトの名無しさん
NGNG> 「vectorのサイズ分ループをまわす」とかの場合、
vector<T>::iterator を使うことになります。
indexで回すなら当然size_tだな。
0477デフォルトの名無しさん
NGNG後からsize_tにしてハマったことならあるよ...
0478デフォルトの名無しさん
NGNG0479デフォルトの名無しさん
NGNGどういう理由付けなら全部intでもいいの?
0480デフォルトの名無しさん
NGNGsize_tを使うとわざわざvectorやlistでsize_typeをtypedef
している意味がないような。
かといってわざわざvector::size_typeと書くのは面倒だし、
コンテナを変更した時修正しないといけないし。
かといってそのためにテンプレート化するのもなんだし。
0481デフォルトの名無しさん
NGNGすべてsize_tで統一すべき
intは不要。使う奴はDQN。
0482デフォルトの名無しさん
NGNG>わざわざunsignedを使うのはばかげている
ってどういう意味?教えてちょ。
0483デフォルトの名無しさん
NGNG0484470
NGNGコンテナでループする時は、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デフォルトの名無しさん
NGNGsize_tでは問題になる可能性があるのなら size_tを使ったらいけない
ってことになるんじゃ??
0486デフォルトの名無しさん
NGNGその処理系で最大の符号なし整数型で受ければ何の問題もない
0487デフォルトの名無しさん
NGNGどうしてそう両極端に考えるんだ?
>>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 を使え。
0488487
NGNG×: 通の Class::size_type が size_t であることはまず無いから
○: 通の Class::size_type が size_t 以外であることはまず無いから
0489デフォルトの名無しさん
NGNG20.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しかしとてつもなく重いです。
CかC++あたりを勉強してWindowsのGUIプログラムでも作りたい物もあるし、
さらに変なものを作りたいのですが、とりあえず必要なものはなんでしょう?
エデッタ、コンパイラ(BCC32とかでいいのでしょうか?)、入門書みたいな本、自分
以外に必要な物はありますか?
なんとか C++ とか、高い物もいきなり必要なのでしょうか?
天才とかはありません…。
C/C++の違いは、、なんか++が付いていてお得そうなので、こちらに質問します、、
(これでいいのかな自分( ゚_゚ )?)
0491デフォルトの名無しさん
NGNGperlやってるんなら正規表現が欲しいだろうから、boostのregexとか
触ってみれば。
0492デフォルトの名無しさん
NGNG何か困った事が発生してから質問してください。
そうでないなら、まずは始めてください。
一番必要なのは、コードを書く事です。
ちなみに、C/C++ から GUI を扱うにはいろいろ覚える事があり、一朝一夕には
できません。
とにかく GUI をやりたいと言うなら、C/C++ は一旦置いといて HSP (無料)
あたりにでも手を出してください。
0493ふトンカ ◆wX94FutoNg
NGNG正規表現使う必要が出てくるまでにかな時間がかかりそうです。。
Perlですら最初の一応役に立つプログラムまで2ヶ月かかってますし
役に立たないプログラムならもっとすぐに書いていましたが…
0494デフォルトの名無しさん
NGNG掲示板だけならコンソールアプリケーションで十分だから、GUIはとりあえず
必要ないと思います。
C++のstd::stringを使えばバッファオーバーランの問題も避けられるはずです。
0495ふトンカ ◆wX94FutoNg
NGNGどちらかというと、GUIは後から、重い言語以外にもう1つ覚えたいといったところでしょうか
とにかく解説書なりページなり見て、
プログラム書いて書いて書きまくれということですね。
ではそうしたいと思います。
Perlの時はソースを改造→分からないから解説書→0から書けるように
なっているので、こういうやり方は初めてですが。
やってみたいと思います。
回答ありがとうございました。
0496デフォルトの名無しさん
NGNGクラスの数に比例する?とか、
多重継承すると???とか。
0497デフォルトの名無しさん
NGNG処理系依存?
単継承と重継承でパフォーマンステストしてみたら?
0498デフォルトの名無しさん
NGNGpublic:
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デフォルトの名無しさん
NGNGSingle::getInstance()->func()
でいいのでは?。
わざわざ呼ぶためのクラスを作る必要はないし、どこからでもアクセス
できるのがSingletonのメリット。
0500496
NGNGclass 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デフォルトの名無しさん
NGNGclass CMona;
class CGiko;
をつけくわえてみよう。
0504デフォルトの名無しさん
NGNG0505デフォルトの名無しさん
NGNGしなくてもいいラインセンスのライブラリってありませんか?
0506デフォルトの名無しさん
NGNGBerkeley DB
0507デフォルトの名無しさん
NGNGBerkeley DB はソース公開しない場合は有料だったと思ったが。
0508デフォルトの名無しさん
NGNGっていうかスレ違いだし。
0509デフォルトの名無しさん
NGNG0510デフォルトの名無しさん
NGNGそれとも、クラス設計から考え直すべきですか?
0511デフォルトの名無しさん
NGNGコンポジションならそういう例もあるんじゃない?
0512デフォルトの名無しさん
NGNGis-a法則は成り立つ?
委譲じゃ解決できない?
>>511
理解できないので詳しい説明お願いします
0513デフォルトの名無しさん
NGNGそんな風にたずねられたら、普通はヤメトケって言われるよ・・・
0514デフォルトの名無しさん
NGNGtypedef 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デフォルトの名無しさん
NGNG0516デフォルトの名無しさん
NGNGfloat** 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デフォルトの名無しさん
NGNG0519デフォルトの名無しさん
NGNG引数の範囲が数直線上の区間で表すようなものならば、out_of_rangeが
適切でしょう。そうでなくて、たとえばenumにないものを指定されたとか
NULLはダメなのにNULL突っ込んだとかはinvalid_argumentでしょう。
> あと、ここらへんについて簡素かつ正確に書いてある書籍等はないでしょうか?
それぞれの例外の説明を読むしかないのでは・・・
0520デフォルトの名無しさん
NGNGfloat* array;
array = new float[x * y];
利用時は
array[x + (y * rangeX)];
0521517
NGNGレスありがとうございます。
out_of_range が(runtime_errorではなく) logic_error を継承しているのが
ちょっと解せなかったのですが、
そこらへんはあんまり気にしないほうが良いのでしょうか?
区間を表す場合に、「最小値」が「最大値」より大きい なんて場合には
どうすればいいのでしょうか?
0522デフォルトの名無しさん
NGNG0523デフォルトの名無しさん
NGNG0524デフォルトの名無しさん
NGNGやはりそれしかないんですか。
それでは、それを使おうと思います。
0525517
NGNGですよねー。Java や C# などの後発の言語に比べて中途半端というか、
所詮後付け感は否めないですよねー。
>>523
やってると混乱してきちゃうので…。
中途半端に標準ライブラリに含めないで欲しかったですね。
そうすれば思い切って独自仕様で固められたのに。
>>524
(実は >>520 は私だったのですが)
あと、インデックスに使う値を管理するクラスを作ると楽かも?
でもそれをするとテンプレートとか使って「配列クラス」を作りたくなってしまうという罠!みたいな。
0526デフォルトの名無しさん
NGNG設計がかなり難しくなってくる。
Javaはライブラリもそろってるしメモリ食わなきゃそこそこいいんだが。
0527デフォルトの名無しさん
NGNGreturn new Hoge();
}
Hogeクラスのインスタンスを返す↑って使い方あってる?
メソッドを抜けるとオブジェクトが勝手に破棄されるとか?
0528デフォルトの名無しさん
NGNGされない。どこかでちゃんと解放してやれよ。
0529デフォルトの名無しさん
NGNGあってる
恐れている間違いはこういう感じだろう。
return &Hoge(); // 関数を抜けたら不正になるオブジェクトへのポインタを返している!!
>>528
質問の意図を読み間違えていると思われ。
0530デフォルトの名無しさん
NGNG多分お前がな。
0531デフォルトの名無しさん
NGNGreturn Hoge();
}
何も考えずこうした方が良いと思うが
0532デフォルトの名無しさん
NGNGだめぽ
0533デフォルトの名無しさん
NGNG可変長の文字列というのはどのように扱うのが一般的なのでしょうか?
1.GlobalAllocなどのAPIを使う
2.C++標準ライブラリのcstringを使う
3.(便利そうだから?)MFCのCStringを使う
4.その他
今のところは数十から多くて数百文字なのであらかじめ多めに見積もって
おいてもだいじょうぶだとは思ってますが、なんとなく気分的にいやなんです。
0534デフォルトの名無しさん
NGNGbcc5.51, vc++6.0, gcc2.95.3-5どれもエラー
自動変数のリファレンス反しちゃダメじゃん。
Effective C++の23項参照。
0536デフォルトの名無しさん
NGNG>2.C++標準ライブラリのcstringを使う
stringでは?
(2)がベターだと思われ。勉強がてら(1)してみるのもおもしろいかも。
0537デフォルトの名無しさん
NGNG0538デフォルトの名無しさん
NGNG煽りはスピードが命。
0539デフォルトの名無しさん
NGNG0540533
NGNG>>536
ありがとうございます 使ってみますです
>>537
stringでしたね 寝ぼけたこと言ってごめんなさいです
>>539
そうなんですか!? 少しパニくってきたけど
そのへんはがんばれば自己解決でけそうです
0541デフォルトの名無しさん
NGNGstrdup()の返り値はチェックしなくてすむしな
0542デフォルトの名無しさん
NGNG(ミTдTミ) しくしくしくしくしくしくしくしくしくしくしくしく
0543デフォルトの名無しさん
NGNGコールバック関数をクラスの中に入れると、どうしてもエラーが出てしまいます。
DirectXのサンプルプログラムを見てみると
基底のクラスで
class CD3DApplication
{
protected:
:
static INT_PTR CALLBACK SelectDeviceProc( HWND hDlg, UINT msg,
WPARAM wParam, LPARAM lParam );
となっていました。そこで「SelectDeviceProc」をmsdnの検索キーワードにかけたのですが該当する
関数は見つかりませんでした。
誰か教えてください。
0544デフォルトの名無しさん
NGNGerror 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デフォルトの名無しさん
NGNGC++のメソッドは
A::hoge() -> hoge(A *this)
な感じになっています。
0546デフォルトの名無しさん
NGNGhttp://www.i-chubu.ne.jp/~tomomi-h/marion/navi/navi.cgi?links=20311
0547デフォルトの名無しさん
NGNG535はだだ今勉強中
0548デフォルトの名無しさん
NGNG0549デフォルトの名無しさん
NGNGがこけるんだけど、C++の仕様?それともVC6の制限?
ポインタはexplicitな宣言できないのかな?
でも、
int (*pf)(void)(0);
は通るんだなあ・・・
0550デフォルトの名無しさん
NGNG0551デフォルトの名無しさん
NGNG>int *p(0);
コンパイル通りませんけど。
0552デフォルトの名無しさん
NGNGINTP p(0)
は?
0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNGそれ、コンパイラには int *(p(0)); と解釈されてると思うんだがどうよ?
演算子の優先順位的に。
0555デフォルトの名無しさん
NGNGええ、そうですよ。
0556デフォルトの名無しさん
NGNGまったくの初心者なんですが、プログラミング言語を勉強する前に何か本などを読んで方がいいのでしょうか?
0557デフォルトの名無しさん
NGNG挑むのが良いかもれ知れませんね。
0558549
NGNG規格読んでたんだけど、それらしき記述は見つけられず。残念。
>>552
確かに、typedefしたら通りました。
>>554
なるほど。エラーメッセージが一緒だな。どうもそれみたい。
まあ、素直にふつうに宣言するのが無難だな。
0559デフォルトの名無しさん
NGNGVC++がおかしいんじゃないの?
0561デフォルトの名無しさん
NGNGああ了解。拡張子を.cにしていました。スマソ。
そうか、int (*p)(0); は、int *p = 0; と同じなのね。
0562デフォルトの名無しさん
NGNGプロシージャにしたいメンバ関数を
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デフォルトの名無しさん
NGNGC++ FAQ等を見ていると
class CA{
public:
CA();
virtual ~CA();
};
のように、
デストラクタが、仮想関数になってるのですが、
virtual にしても、しなくても変化が無いように見えますが
仮想関数にする意味があるんでしょうか?
0564デフォルトの名無しさん
NGNGC++ FAQ見れ
0565デフォルトの名無しさん
NGNG0566563
NGNGそれについて、
コンストラクタとちがって
virtualキーワードをつけて宣言できる。
としか書いてないのです。
つけても、つけなくても、
継承元デストラクタ→継承先デストラクタ
が呼ばれるのです。
オーバーライドしようと、継承先で~CA()と書いてもエラー出るし。
よくわからないので、おしえてください。
0567デフォルトの名無しさん
NGNG例えばclass CAから派生したclass CBがあったとして、そのポインタを
親のCAで表現しているとき
CA* cap = new CB;
delete cap;
とした時、~CA()も~CB()も仮想デストラクタにしておかないと、~CB()が
呼び出される保証はない。
0568566
NGNGうおお。
わかりました。
わかりすぎて、少し感動しました。
ありがとうございますー。
0569デフォルトの名無しさん
NGNGclass 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デフォルトの名無しさん
NGNGpublic:
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デフォルトの名無しさん
NGNGOKですよ。基底クラスのデストラクタが仮想デストラクタになると、
それ以降継承されたクラスのデストラクタはデフォルトで(というか
強制的に)仮想デストラクタになるから。
0572デフォルトの名無しさん
NGNG0573デフォルトの名無しさん
NGNGラクタにするべき時とそうでない時についての考察が書かれている。
大まかに言えば、継承するつもりのないクラスのデストラクタは仮想に
すべきでなく、継承するつもりならば仮想デストラクタにしておけば安心
であるというような内容。
0574570
NGNG逝ってくる・・・
571 アリガ�`
0575デフォルトの名無しさん
NGNGを宣言すること、となっている。
0576デフォルトの名無しさん
NGNGclass 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純粋仮想関数であってもデストラクタの場合は実体が必要。
だから
CA::~CA() {}
などの定義を行えばよい。
0578デフォルトの名無しさん
NGNG即レスありがとうございますぅ。でもどうしてデストラクタの場合だけ
実体がないとエラーになるのでしょうか?C++3rdのどの当たりにその
ような事が書いてあるかわかりますか?
0579デフォルトの名無しさん
NGNG0580デフォルトの名無しさん
NGNGEffective-C++のP83にそのような事が書いてある。
デストラクタは純粋仮想関数の中でも特別な扱いで、基底クラスのデストラクタ
の呼び出しをコンパイルしてしまうため、リンク時にエラーになるとある。
他の純粋仮想関数ではこうはならない。
0581デフォルトの名無しさん
NGNGどうもありがとうございます。もう少しデストラクタについて勉強
してみます。
0582デフォルトの名無しさん
NGNGpublic:
virtual void huga() = 0;
};
void hoge::huga()
{
cout << "huga" << endl;
}
0583デフォルトの名無しさん
NGNGその場合huga()はどうやって呼び出すの?
0584デフォルトの名無しさん
NGNGpublic:
void huga() {}
void age() { hoge::huga(); }
};
int main()
{
hage sage;
sage.age();
return 0;
}
0585デフォルトの名無しさん
NGNGなるほど・・・・こうなると、純粋仮想関数も糞もあったもんじゃないですね。
直接呼び出せなくなっているだけで間接的には呼び出せるのか。
0586デフォルトの名無しさん
NGNGg++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 i(); //default constructor?
i = 0; //oh error!
return 0;
}
0588デフォルトの名無しさん
NGNG> const int *x(0);
え?
0589588
NGNGこれ何でコンパイル通るの?
* 演算子より () 演算子の方が優先順位高いはずだけど・・・。
0590543
NGNG詳しい説明ありがとうございました。
そのおかげで何とかできました。
今は、自作関数をC++に書き直してているのですがまた分からない事があったらよろしくお願いします。
0591デフォルトの名無しさん
NGNG0593587
NGNGxは0で初期化され、その型はconst int *である、と読めると思うが?
それよりint (*x)(0);が通るのが不思議。*xが0で初期化される、と
読まれて、エラーになりそうなものだが、int *x = 0;と同じように
解釈されている。まあint *x = 0;だって、普通の優先順位で考えたら
*xが0になりそうなものだが。・・・今試してみたら、
int (*x) = 0;
が通ったよ。
0594デフォルトの名無しさん
NGNG変数宣言の所の * とか [] とか () とかは演算子ではないと思うが。
コンストラクタ呼び出しの()はともかく。
0595588
NGNGint (*func)(int arg); って例があるもんだから。
・・・あれ? 余計混乱してきたような・・・。
>>594
うーん、「そういうものだ」 と思い込むしかないのか・・・。
0596age
NGNGシンボル this
値 error変数にスタックフレームが必要です
という のが表示されてしまっています。
これはどのような時に表示されるのでしょうか?
特に実行がおかしいわけではないのですが気になってしょうが
ありません。
0597デフォルトの名無しさん
NGNG標準スタックフレームの生成を外しているとか。
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一応C++に移植したのですが変な動作するので、あきらめてフォートランの方のを
使おうと考えているのですが。
0600デフォルトの名無しさん
NGNG答えられる奴は神
0601デフォルトの名無しさん
NGNGDLLにするのが賢い気がする。
0602デフォルトの名無しさん
NGNGそりゃ、忠実に移植するしかないだろ。
0603デフォルトの名無しさん
NGNGC言語で
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デフォルトの名無しさん
NGNGC++でもmalloc使える。
0605デフォルトの名無しさん
NGNGfor(int i=0; i<900; i++){
for(int j=0; j<900; j++){
data[j+i*900].z = nodata;
}}
とするのが普通だと思うんだが。
0606デフォルトの名無しさん
NGNG0607603
NGNGレスありがとうございます。
すいません、書き漏れ。
C++で、
struct main_data *data0;
data0 = &data
としています。
自分は
data0->z[j+i*900] = nodata;
だと思うのですが、いかかでしょうか?
0608デフォルトの名無しさん
NGNG0609デフォルトの名無しさん
NGNG0610デフォルトの名無しさん
NGNG0611デフォルトの名無しさん
NGNG割と。
0612デフォルトの名無しさん
NGNG具体例キボンヌ
0613デフォルトの名無しさん
NGNG> double z[810000];
> }data;
普通に
struct main_data{
double z[900][900];
}data;
じゃいかんのか?
0614デフォルトの名無しさん
NGNG(´Д`)
(( ─━OO━─ ))
∪∪
0615603
NGNG多分いいと思いますが、いまさら書き直す気力がありません。。。
0616デフォルトの名無しさん
NGNGATL の CWindowImplBaseT とか。
0617デフォルトの名無しさん
NGNGC から FORTRAN 側の関数を呼べるんじゃないかなぁ。VC++ は知らんが、
その昔 UNIX でやった覚えがある。
0618デフォルトの名無しさん
NGNG{
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デフォルトの名無しさん
NGNG0620デフォルトの名無しさん
NGNGサンクス
コンストラクタには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デフォルトの名無しさん
NGNGFortranしらないんで、適当だけど
#define IF if(
#define THEN ){
#define ENDIF }
とかする。
0622デフォルトの名無しさん
NGNGそういう事は絶対にやめれ。
0623デフォルトの名無しさん
NGNG0624デフォルトの名無しさん
NGNGWIN32API行き
0625デフォルトの名無しさん
NGNGclass 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デフォルトの名無しさん
NGNGvoid operator = ( const CTEST& ) { ... } ;
こっちの代入演算子を定義してないからじゃないかな?
0627デフォルトの名無しさん
NGNGコピーコンストラクタもないし突っ込みどころ満載だな。
例外の原因は new CHAR[11] かな。
0628625
NGNGありが�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デフォルトの名無しさん
NGNG0630デフォルトの名無しさん
NGNGShift-JIS で 8 バイトですが何か?
0632デフォルトの名無しさん
NGNG0633デフォルトの名無しさん
NGNG↑で定義される T::N を、
class T; みたいに名前の宣言だけってできますか?
class T::N; だとエラーになります。
0634デフォルトの名無しさん
NGNG>できますか?
試しなさいよ。
構造体と事情は一緒ではなかったかい?
0635633
NGNG> 構造体と事情は一緒ではなかったかい?
事情が同じなら class T::N; で試した段階で
宣言できて欲しいところですが。
エラーになるデスヨ。
0636デフォルトの名無しさん
NGNGT クラスが事前に定義されていないと T::N のように限定することはできなかったと思う。
0637その1
NGNGpublic:
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その2
NGNGmain(){//確認用
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こういうことがやりたかったのか?
0640デフォルトの名無しさん
NGNGC覚えて、その後Java覚えて、再びCのプログラム書こうと
してるけどJavaの悪い癖(参照)がついてしまって、なかなか
ポインタが使えません・・・
リスト構造関連の優秀なWebページを教えていただけませんか?
あ、「猫でも分かる・・・」は勘弁してください。デムパ嫌いですから。
0641デフォルトの名無しさん
NGNG6バイトでいけるんちゃうか?
0642デフォルトの名無しさん
NGNG> 私の悩み、聞いてくれます?
> デムパ嫌いですから。
そうですか。それは大変ですね。
0643デフォルトの名無しさん
NGNGここはC++相談室ですが?
0644633
NGNGうーん、class T が定義されてるヘッダをインクルードせずに、
T::N の名前を使いたい・・・。
こうして書いてみると、できなくてあたりまえのような気がしてきたり。
0645デフォルトの名無しさん
NGNG宣言だけでは無理だよ
0646639
NGNGT::ときたらTの名前空間はコンパイラが知っていなければ
ならない。
0647名無しさん@Emacs
NGNGclass Base {
int a;
};
class Derived : public Base {
int b;
};
void
aho(Derived *p)
{
Base *p1 = p;
Base b;
*p1 = b;
}
で、 *p に Base の instanceが入っちゃうじゃん!!
っていうのは問題じゃないの?
型安全性が... とか考えちゃうんだけど。
0648デフォルトの名無しさん
NGNGclass 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一応回避はできるね。
その手の本を読むと、「コピーコンストラクタと代入演算子は
定義するか、あるいはprivateにせよ」と書いてある。
0650デフォルトの名無しさん
NGNG#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デフォルトの名無しさん
NGNGT::Nを必要とする部分をテンプレートにしてまえば、
前方宣言要らへんのとちゃう?
0652デフォルトの名無しさん
NGNGもちろん問題だが、もしそれを解決しようと思ったら常に
そのポインタが指してるデータの型は、本当は何?
っつーのをチェックする必要がある。これはコストが大きいから、C++ では
敢えて危険な方をデフォルトにしてる。
C++ だと継承を使っているオブジェクトに関しては、値のコピーはふつー
認めないように operator=() を private にしておく。ポインタのコピー、ある
いは参照を常に使い、操作はメンバ関数 (往々にして virtual) で。
0653デフォルトの名無しさん
NGNGこれを言語レベルでやるなら、VB の Variant 型を実装する事になるな。
void* ポインタに対して任意のメソッドが使えたりして。
0654名無しさん@Emacs
NGNG>>649,652 やぱーり知られた問題で解決法があったんだねえ。
たしかに copyを制限して、フツーの OOPLみたいにするのがいいんだろうね。
あと、 int (*)(const T&) と int (*)(T&) の間のキャストとか
vector<const T> と vector<T> の関係とか気になったのだけど、
ここらもおしてしるべしかしらん。
void* を int* に変換できなかったり、多重継承したクラスのポインタを
親クラスのポインタにすると値が変わっちゃうぐらい気を使ってるんだから
そこらへんもなんとかなってほしかった C & Haskell使いでした。
0655デフォルトの名無しさん
NGNG関数ポインタは、いずれもキャスト可能。しかも C 時代の遺物だから
実行時型情報は使えないので危ないことこの上ない。C++ 的には、
関数オブジェクトを使うのがお奨めかと。
> そこらへんもなんとかなってほしかった
まぁ、過去との互換性の問題とか何とか、いろいろしがらみ多い言語
だから。
コピー禁止に関しては boost を入れて boost::noncopyable を継承する
のが楽。#inculde と合わせても 2 行で済むし。
0656デフォルトの名無しさん
NGNG0657デフォルトの名無しさん
NGNG{
int hogehoge[100000];
};
ならできるけど、そういう話じゃなくて?
0658デフォルトの名無しさん
NGNGすいません、説明不足でした。
hairetu[10000]={ m_member1 , m_member2 , ................. }
みたいなことをやりたいんです。
メンバ変数を連番にしているのでfor文とかで使いたいと
思ったのですが。。
0659デフォルトの名無しさん
NGNG657 にすればいい話じゃなくて?
どうしても名前付き変数名とインデックスを使い分けたいなら、union にでもすれば。
0660659
NGNG0661デフォルトの名無しさん
NGNG…
(・∀・)?
0662デフォルトの名無しさん
NGNG配列の立場は・・・?
0663デフォルトの名無しさん
NGNGなにしたいんだかよくわからん
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デフォルトの名無しさん
NGNGenumで定数を定義して定数と要素数に対応した
処理で決着というオチが見えるのだが。
0665デフォルトの名無しさん
NGNGint 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大人なんだから望みをかなえてやれヨ!
#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デフォルトの名無しさん
NGNG658 の望みは叶えられない方が周りが幸せなんだが。
つーか、class 定義いじれるなら union でいいだろ。
0668デフォルトの名無しさん
NGNGさっきインターネットしてたら、1.2がインストールされて、デフォルトが1.2になっちまったよ。。
どうすれば1.4に戻るの?コントロールパネルのJava-Plug Inをどうにかするの?
0669デフォルトの名無しさん
NGNGここはC++スレッド
0670デフォルトの名無しさん
NGNG0671デフォルトの名無しさん
NGNGどこ
0672デフォルトの名無しさん
NGNGclass A{
public;
char a[70][2];
................
}
として
コンストラクタで初期化するときに
a[70][2]={"aa","bb",......}
というように一度に初期化はできないんでしょうか?
0673デフォルトの名無しさん
NGNG言ってる意味分からん。
どうでもいいが、文字2つを文字列として扱うなら、 a[70][3] じゃねーの?
0674デフォルトの名無しさん
NGNG普通,
const char default_a_table[70][3?] = {
"aa",
"bb",
};
コンストラクタ
memcpy(a, default_a_table, sizeof(a));
0675デフォルトの名無しさん
NGNGnew できずに返り値として NULL が返った場合どういった処理をすればよいのでしょうか?
クラスの使用者に安全に使ってもらうためにはどうしたらよいのでしょうか。
例外を投げたりして教えるのでしょうか?
0676デフォルトの名無しさん
NGNGNULLで判断するのは一昔前の話では
0677デフォルトの名無しさん
NGNGテキストファイルに変更するにはどうしたらいいでしょうか
0678デフォルトの名無しさん
NGNG0679677
NGNGすいませんが教えてください。
0680デフォルトの名無しさん
NGNGVC使ってるならコードをコピってF1押せ。
特定の関数のフラグなんか、2chで聞くよりヘルプ見たほうが早いだろ
0681デフォルトの名無しさん
NGNG0682デフォルトの名無しさん
NGNGtypedef 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デフォルトの名無しさん
NGNG0684デフォルトの名無しさん
NGNG0685デフォルトの名無しさん
NGNGありがとうございました。
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デフォルトの名無しさん
NGNGstruct Data{...
}data,*datap;
datap = new Data [num];
delete [] datap;
0688デフォルトの名無しさん
NGNG書き間違えていましたね。
アドバイスありがとうございましたー
0689686
NGNGすいません、書き方間違えていました。
numの分だけ構造体メンバーの配列を増やしたいでした。
つまり
struct Data{
double a[10000*num];
double b[10000*num];
double c[10000*num];
}data,*datap
という感じで。
ただ、この形じゃあコンパイルがとおらないので、
どなたかよい方法教えていただけませんか?
0690デフォルトの名無しさん
NGNG0691デフォルトの名無しさん
NGNGstruct 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;
...
0692686
NGNGさきほどvectorについて調べました。
まだ初心者なのでなかなか難しそうです。
その方法しかなければ勉強するしかないのでがんばります。
0693686
NGNGおー!ありがとうございます。
早速試してみます。
0694デフォルトの名無しさん
NGNGstruct key {
string name;
int num;
};
typedef map<key, ClassName> ClassTable;
このような宣言ってありですか?
とくにstruct keyのここでの使いっぷりってどうなんでしょ?
0695デフォルトの名無しさん
NGNG定義されていればなんでもいいんじゃなかろうか。
0696デフォルトの名無しさん
NGNG> とくに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 の条件に反するから。
0697686
NGNGちょっとうまくできません。
これはメモリを確保するために、
構造体のポインタをこう定義しているのですか?
構造体メンバの動的配列のやり方って無理なんですかね。。。
0698デフォルトの名無しさん
NGNGnum が const なら >>689 のままでいけるし、変数なんだったら
>>691 のようにするしかあるめぇ。
0699デフォルトの名無しさん
NGNG何 が や り た い ん で す か ?
0701686
NGNGお疲れさまでした!
0702デフォルトの名無しさん
NGNG0703デフォルトの名無しさん
NGNGstruct 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){;}
};
A*を返す擬似コンストラクタを使えばいい。
// こんな感じで。
A* A::create(){
A* self = new A;
func(...);
return self;
}
0706デフォルトの名無しさん
NGNG0708デフォルトの名無しさん
NGNGってなんなの?
0709デフォルトの名無しさん
NGNGvectはstd::vector<int>を指すポインタ。
0710デフォルトの名無しさん
NGNGqsort()ならsearch.hをインクルードしてるから大丈夫だよ。
0711デフォルトの名無しさん
NGNG0712デフォルトの名無しさん
NGNGvector<int>objectを将来指すであろうpointerのdeclaration。
0713デフォルトの名無しさん
NGNGvect = new vector<int>;
vect->push_back(1);
とかでいいんですか?
使い方は。
0714デフォルトの名無しさん
NGNGSTLスレッドにおいで。議論がされてるよ。
0715デフォルトの名無しさん
NGNGstlスレ見ました。
誘導ありがとうございますた。
0716デフォルトの名無しさん
NGNGg++ だとコンパイルできて期待通り動くんだけど、実装依存なんてことも
あるんでしょうか。
#include <iostream>
int main()
{
int& ri = *((int*)0);
if (&ri == 0) {
std::cout << "null reference" << std::endl;
}
}
0717デフォルトの名無しさん
NGNGこれってポインタなのか?
ポインタを間接参照しているようにみえるが。
0718716
NGNGそう。まさしくそう見えるので不安なわけです(w
0719デフォルトの名無しさん
NGNGなってるみたいだね。
int *p = (int*)0;
if (p == 0) { ...
と同じ処理になってる。
*p や ri を使おうとすると、たちどころにアクセス違反になる。
0720デフォルトの名無しさん
NGNG書いてあるけども
0722716
NGNGつまりは、&(*((int*)0)) が有効な式になるかどうかってことかな。
0723720
NGNG単項の * って左辺値つくり出んじゃなかったっけ、、
0724デフォルトの名無しさん
NGNG0725デフォルトの名無しさん
NGNG{
int &r = *((int*)0); //平気
int c = *((int*)0); //だめぽ
int &rr = r; //こっからダミー
int cc = c;
return 0;
}
0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG今までは「絶対に」投げてはいけないと思っていましたが、例外を投げても良い場合もあるんだという考え方もあるようで、
どっちが正しいのかよくわかんない。。。
ttp://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdndeepc/htm/deep02172000.asp
を読みましたが良くわかりませんでした。誰か頭の良い人、フォローしてください。
0728デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNGそのページに
> 例外をスローすべき十分な理由があるなら、進んでその例外を
> スローして、それを文書化すればよいのです。例外をスロー
> するのが当然の場面で、例外のスローを回避する方法を
> 発明する必要はありません。複雑にすることで、制限された
> バージョンのクラスを誰かが誤用する危険よりもかえってひどい
> 保守の悪夢が生まれてしまいます。
と書いてあるではないか。
というか、あなたが何故『「絶対に」投げてはいけない』と思うのかが謎なのだが。
0731デフォルトの名無しさん
NGNG{
const unsigned N = 1;
try{ for(;;) new int[N]; }
catch( ... ){}
}
↑のプログラムが、Aborted(core dumped) になってしまいます。
なにが起こっているんでしょうか?
N = 1024 にしたら無言で終了しました。(これが期待の動作)
環境は、 cygwin g++-3.1.1 です。
0732デフォルトの名無しさん
NGNG0733731
NGNG漏れの結論は
「std::bad_allocを投げるのに動的メモリを必要とするようなg++の実装がクソ」
になりました。
・・・いいのかなぁ?
0734デフォルトの名無しさん
NGNG例外安全にしたければ Pimpl パターンを使えってこった。
0735デフォルトの名無しさん
NGNGいつも思うんだが・・
pimplってどう発音してる? ぴーいんぷる? ぴんぷる?
0736デフォルトの名無しさん
NGNG0737デフォルトの名無しさん
NGNG漏れはぴーいんぷる。
>>736
漏れも C++ FAQ でそういう話見た気がする。
0738デフォルトの名無しさん
NGNGんじゃないすか。>727
0739デフォルトの名無しさん
NGNG俺はぴーいんぷり。
>>727
普通に投げる。何か問題ある?
0740デフォルトの名無しさん
NGNG例外は、戻り値がない コンストラクタ で一番威力を発揮するもんだろうが。
>>735
ぴーいんぷる
0741デフォルトの名無しさん
NGNG前から思ってたんけど 香具師 をきちんと辞書で調べたか?
0742デフォルトの名無しさん
NGNG既出の読みはガイシュツではない。とか言い出す予感
0743デフォルトの名無しさん
NGNG恥ずかしいなぁ。まあ2ちゃん用語自体恥ずかしいが。
0744困っています
NGNGお願いします。
0745デフォルトの名無しさん
NGNG0746デフォルトの名無しさん
NGNG2ちゃん内では別に恥ずかしくない
0747デフォルトの名無しさん
NGNG0748デフォルトの名無しさん
NGNG0749デフォルトの名無しさん
NGNG0750747
NGNG0751デフォルトの名無しさん
NGNG(w
0752デフォルトの名無しさん
NGNGCString s; に1文字格納されているとして、
それを char 型の変数に代入するにはどうすればよいのでしょうか?
0753デフォルトの名無しさん
NGNG0754デフォルトの名無しさん
NGNGchar buf
_tcscpy(&buf, s);
こうすれば、代入できます。
>753
しぬのはてめえだよ。ドシロウト。
char に CStringが直接代入できるわけねーだろ!
試してみろ!
素人もいます。公開掲示板では以後、言葉を慎むように。
0755デフォルトの名無しさん
NGNGお前が氏ねよ!!
s[0]をcharに代入すると書いてあるだろう!お前の目はふしあなか?(プ
0756デフォルトの名無しさん
NGNG0757752
NGNG有難うございます。
黙ってみていてすいません。
本当に初心者ですが、これからもよろしくお願いします。
0758デフォルトの名無しさん
NGNGとりあえず>>752はCStringの[]演算子が何を返すかマニュアル見て来た方がいいぞ。
君はネタではないと信じているぞ。
0760デフォルトの名無しさん
NGNG0761デフォルトの名無しさん
NGNG754は_tcscpyを使ってるくせになんでcharなんだ(致命的ミスは別にして)。
CString::operator[]もTCHARを返すだけだぞ。
char c;
CString s("a");
USES_CONVERSION;
c = T2A(s.GetBuffer(1))[0];
・・・たぶん、752が求めてるのはこんなんじゃないだろうな。
つーか、すれ違いだバカ野郎!
0762デフォルトの名無しさん
NGNG0763デフォルトの名無しさん
NGNG0764デフォルトの名無しさん
NGNGCMyWnd* pWnd = new CMyWnd;
DelObject(pWnd);
DelObject(CMyWnd* pWnd){
delete pWnd;
}
としたんですが、これで正しく破棄されてるんでしょうか?
0765デフォルトの名無しさん
NGNGそのコードの通りに実行されるなら (途中で DelObject() の実行の阻害に
なるような事をしていなければ) 破棄される。
CMyWnd ではなく、自作の簡単なクラスを使って確認してみればいい。
0766デフォルトの名無しさん
NGNGttp://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
既出?
0767C++なんだけど
NGNGエラーが発生しなくなるんですか?
#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質問!!
NGNG0769デフォルトの名無しさん
NGNG意味不明
>Operation+とOperation-のファンクション
意味不明
0770デフォルトの名無しさん
NGNGppはどこを指してるのかな?
# ただポインタがわかってないだけで、全然C++じゃないけどな
0772C++なんだけど
NGNGによって、ppは、char*型のstrのアドレスを指しているんでしょ?
0773デフォルトの名無しさん
NGNG0774デフォルトの名無しさん
NGNG*str = 'A';
↑こうした時の動作については、どんな本にも書かれていると思うが。
0775デフォルトの名無しさん
NGNG0776デフォルトの名無しさん
NGNG0777C++なんだけど
NGNG*ppも使えないってことかな?
0778デフォルトの名無しさん
NGNGhttp://www.delorie.com/djgpp/
C++コンパイラらしいけど、どうよ?
0779デフォルトの名無しさん
NGNGなんかえらく懐かしい記がする。よく知らんけど
0780デフォルトの名無しさん
NGNG0781デフォルトの名無しさん
NGNGこれのおかげで 98 時代に UNIX のゲームで遊べた。
商用のコンパイラは高かったし、98 用のバイナリは殆ど無かったし。
0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNG一瞬、 djbcpp に見えた。
>>782
http://www.coyotegulch.com/algorithm/cpp/exceptions.html
これじゃ参考にならんかね?
0784778
NGNG0785デフォルトの名無しさん
NGNGコンストラクタの初期化リスト中で this を使うと
(this が) ベースメンバ初期化リストで使用されました。
という警告が出るんですが、これって何故いけないのでしょうか?
検索して調べたあるページには
非静的メンバ関数の中でのみ有効な this ポインタが基本クラスの初期化リストで使用された
という意味だと書いてあったのですが、コンストラクタですから
非静的ですし、問題ないと思うのですが…。
何がいけないのか、どういう事に注意するべきなのか教えてください。
よろしくお願いします。
0786デフォルトの名無しさん
NGNG初期化リストは、コンストラクタの内側じゃないんだと思います。
0787786
NGNG黙らせていいんじゃないですか?
0788デフォルトの名無しさん
NGNGまだ初期化が完了していないオブジェクトへのポインタを使ってることになるからだろ。
初期化済みのオブジェクトを期待している関数の引数に
コンストラクタの中から this を渡してもコンパイルは通ってしまう。
0789デフォルトの名無しさん
NGNG致命的なのは、渡した 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デフォルトの名無しさん
NGNGBase::foo() が純粋仮想関数でも?
もし Base::foo() が単なる仮想関数なら、何事もなく Base::foo() が呼ばれるのは
確かだが。ただし、プログラマの意図と異なる可能性が高い。
0793785
NGNG>>786
確かにコンストラクタの内側ではないですね。
VC++ 用のプラグマの指定は教えてもらえて助かりました。
後少しで警告を我慢し続けなければいけないところでした。
>>788
そういえばそうですね。(今回は)参照に設定する為に渡すんだったので、
対象側のコンストラクタで渡す側のメンバを触る事まで気が回りませんでした。
>>789
これは気をつけないといけませんね。
>>791
報告:参照に代入して、構築完了後に使う限りでは
VC++6.0, Borland C++, g++ のいずれでも問題ありませんでした。
みなさんありがとう。
0795785
NGNGテンプレート引数にメンバ関数を渡したくて下記のようにしました。
#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デフォルトの名無しさん
NGNG0797デフォルトの名無しさん
NGNG&CFoo::Use
0798デフォルトの名無しさん
NGNGVC++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;
0799785
NGNG>>797
おぉ!g++ で動きました!やっぱり関数ポインタはテンプレートに渡すときも
アドレスを取る書き方じゃないと駄目なんですね。
>>798
ぬぉ!rebind 風なら VC++6.0 でも動きました!
しかし頻繁に使いたい物なので利用者側がネストしたインスタンスを書かなければならないのは微妙ですね…。
時代遅れの VC++6 はそろそろ切り捨てるべきなんでしょうか…。
ともあれ、みなさんありがとうございました。
0800デフォルトの名無しさん
NGNGの作り方を説明してるページってないですかね?
猫でもわかるC++をみてもわからないのですよ。
0801デフォルトの名無しさん
NGNGこういう系統のものってnewを行う順番によっては例外がでるものなんでしょうか?
今作っているプログラムは、newをする場所を少し手前に持っていくと
正常に動いたりするんですが・・・
0802785
NGNG助言に従って 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それは99.999999999%キミのプログラムミスだから心配しなくていいよ。
0804785
NGNG>>801
例外って bad_alloc とかでしょうか?
それともシステムの例外?
ちょっと状況を判断するには情報が少なすぎる気がします。
シンプルにしたソースとか提示すると答える人もわかり易くて、
レスがつきやすいと思いますよ。
0805デフォルトの名無しさん
NGNG#endif
bccとgccはOKなのですがvc++だけ通りません
#if 定数式 改行
こういう仕様だと思ってたのですが
標準としてはbcc, gccとvc++のどちらが正しいのでしょうか?
0806デフォルトの名無しさん
NGNGそれは、処理系毎のスレに行って聞いた方が良いと思われ。VC あたりだと
ウィザードでプロジェクト作るのが一般的だし。
0807デフォルトの名無しさん
NGNG通るが?
>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
0808807
NGNG0809785
NGNGウチでは通らない模様。
VC++6 #if ディレクティブ内には、式が存在しないか、定数の評価をしませんでした。
VC++7 整数定数式が無効です。
g++ はプリプロセスの順番が コメントの除去→マクロ展開、ディレクティブ処理
なのに VC++ は
マクロ展開、ディレクティブ処理→コメントの除去
らしいのは以前ぜんぜん関係ない事でハマって確認済み。
# 私の質問の方は進展なし…。誰かヘルプミーです。
0810デフォルトの名無しさん
NGNGこれじゃだめか?
class CFooBase {
public: void Use() { std::cout << "使われますた。"; }
};
class CFoo : public CFooBase {
public: HogeTmpl<CFooBase>::Hoge<&CFooBase::Use> chome;
};
0811810
NGNG#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デフォルトの名無しさん
NGNGpublic:
virtual base& operator=(const base&) = 0;
};
class derived : public base {
public:
derived& operator=(const derived& d) {}
};
これが駄目なのを今知って驚いたんですがどういう風に理解すればいいでしょうか。
0813デフォルトの名無しさん
NGNG代入とかするってことは値のように使う、という意図だろうし・・・
0814デフォルトの名無しさん
NGNG純粋仮想関数が正しくオーバーライドされてないからエラーが出る。
戻り値も仮引数も全く同じ型の関数が必要。
0815812
NGNG>>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但し、代入演算子関数は、継承されないという性質を持つため純粋仮想関数と
宣言しない方がよい。コンストラクタとデストラクタも純粋仮想関数からは除外
すべき。
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;
}
0819デフォルトの名無しさん
NGNG「すべき」と書くといかにも語弊がありそう。実は、コンストラクタとデストラクタと
代入演算子関数を純粋仮想関数と宣言すると、リンカエラーになる処理系が
あるらしい。
0820デフォルトの名無しさん
NGNG「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デフォルトの名無しさん
NGNGfloat 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デフォルトの名無しさん
NGNGtypedef float (*c2f)(char);
c2f Func1(int i)
{
...
}
0823デフォルトの名無しさん
NGNGfloat *(char) Func1(int i)
は、
float *
でfloatのポインタになってしまうので、
(char)
は何のことだかわからないので、
絶対間違っていると判んなきゃダメだと思うぞ。
0824デフォルトの名無しさん
NGNG気になって気になっておがで不眠症なんだ。
0825824
NGNG0826デフォルトの名無しさん
NGNGなんだかこっちが気になるな…(*´Д`)
おがってのも…
0827デフォルトの名無しさん
NGNG824じゃないけど「おかげ」のtypo
0828デフォルトの名無しさん
NGNG0829デフォルトの名無しさん
NGNGchar 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そのような入力を想定しながら作り直せ。
0831デフォルトの名無しさん
NGNGオートマトンを使って、濁音や半濁音になる可能性のあるカナを
別処理。
0832デフォルトの名無しさん
NGNG1つ上1つ下2つ↓のやつらに聞いて確かめた。
それが教授のネタかどうかは定かではない。
0833820
NGNGとてもわかりやすい答え、ありがとうございます。
おかげさまでコンパイルできました。
>>822
アドバイスありがとうございます。
なるほど、こんなtypedefの使い方があるとは知りませんでした。
勉強になりました。
0834デフォルトの名無しさん
NGNGアドバイスありがとうございます。
なるほど、こんなオートマントの使い方があるとは知りませんでした。
勉強になりました。
0835デフォルトの名無しさん
NGNG0836デフォルトの名無しさん
NGNG0837デフォルトの名無しさん
NGNGクエスチョンありがとうございます。
なるほど、こんな人任せの質問の仕方があるとは知りませんでした。
勉強になりました。
0838デフォルトの名無しさん
NGNG死
0839デフォルトの名無しさん
NGNGどこで調べたいんだ?
投げた側か受け取り側か。
0840bloom
NGNGhttp://www.agemasukudasai.com/bloom/
0841デフォルトの名無しさん
NGNG受け取り側ッス
0842デフォルトの名無しさん
NGNG現在、VC++のサンプルプログラムのチャット
プログラムをサーバ側とクライアント側のプログラム
を同一マシンで動かそうとしているのですが、
クライアントが接続するときに接続拒否をされているようです。
私のOSはWIN98ですが、やっぱりこれが原因でしょうか?
サーバー機能がないOSだからでしょうか? よろしくお願いします。
0843デフォルトの名無しさん
NGNGそれってハンドラ内に普通にチェック用マクロ書けばいいだけちゃうん?
>>842
Norton Internet Seculity とか
その手のファイアウォールツール入れてたり
しませんかーーーー?
つーか間に改行入れるのやめい。
0844デフォルトの名無しさん
NGNG0845デフォルトの名無しさん
NGNGアラブ人?
0846デフォルトの名無しさん
NGNGこの前は、επιστη µ だった(嘘
0847デフォルトの名無しさん
NGNGお前らエイピステーメですよ
0848デフォルトの名無しさん
NGNG0849デフォルトの名無しさん
NGNG0850επιστηχ ◆IGEMrmvKLI
NGNGエピステーキーです。
読み方知らないけど「きー」を変換してね。
0851デフォルトの名無しさん
NGNG0852επιστηχ ◆IGEMrmvKLI
NGNG∧ ∧ ∧
/ ヽ / ヽ_ / .∧
/ `、 _/ `、⌒ヾ⌒ヽ/ ∧
/  ̄ ̄/ u (.....ノ(....ノ / ヽ
l::::::::: | u .:(....ノノ
|:::::::::: -=・=- / ̄ ̄ヽ ::::::::::::::/`ヽ
.|::::::::::::::::: \_(___..ノ u ::::::::::::::::::::(....ノノ
ヽ::::::::::::::::::: \/ヽ u ::::::::::::::::::::::::::::ノ
0853デフォルトの名無しさん
NGNG/ ヽ / ヽ_ / .∧
/ `、 _/ `、⌒ヾ⌒ヽ/ ∧
/  ̄ ̄/ u (.....ノ(....ノ / ヽ
l::::::::: | u .:(....ノノ
|:::::::::: -=・=- / ̄ ̄ヽ ::::::::::::::/`ヽ
.|::::::::::::::::: \_(___..ノ u ::::::::::::::::::::(....ノノ
ヽ::::::::::::::::::: \/ヽ u ::::::↑::::::::::::::::::ノ
|
επιστηχ◆IGEMrmvKLI
0854デフォルトの名無しさん
NGNG0855デフォルトの名無しさん
NGNGint a=30;
printf("%d",a);
を TextOutなどで実現するにはどうすればいいですか?
0856デフォルトの名無しさん
NGNG0857デフォルトの名無しさん
NGNG0858デフォルトの名無しさん
NGNG悪意を感じるぞ。匿名をいいことに挑発するのは卑怯!
(俺は本人じゃないし、cppllにも加入してない)
0859デフォルトの名無しさん
NGNGそれとも書き方が悪かったのかなぁ?
もうすこしちゃんとした書き方教えてください。
0860デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNG0863デフォルトの名無しさん
NGNG0864デフォルトの名無しさん
NGNGstd::ostringstreamなどはいかがだろうか。
だめぽ?(ρ_;)
0865デフォルトの名無しさん
NGNG{
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デフォルトの名無しさん
NGNGC標準ヘッダの取り込みが
#include <cctype>
などのように指定しても上手くいきません(file unavailable)
もちろん-LANG:std付けてます。
つうか/usr/include/CC以下にそんなの無いし。
かといってctype.hを取り込むと、namespaceが::で(゚д゚)マズーなんですが...。
プラットフォームdependな質問で申し訳ありませんが、詳しい方お願いします。
0867デフォルトの名無しさん
NGNGnamespace std
{
#include <ctype.h>
}
スクリプトで生成すれ。もちろん標準 C ヘッダとその他の標準 C++ ヘッダは分けて。
0868867
NGNG0869867
NGNG一般的にどちらが速度早い?
あまりにも頻繁にベースからサブを探り出す必要があるので VISITOR のトリックで
どうにかしようと思ってるんだけど、速度的には不利なのかなぁ?
0870866
NGNGマジですか!?
いや確かにその方法は一瞬脳裏をよぎったんですが、
まさかそんなことはあるまい(((((((;゚д゚)))))))
と自己否定してました。
最新のコンパイラなのにぃぃぃ
0871デフォルトの名無しさん
NGNGオブジェクトファイルが出てエラーになります。
#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そうですか。
つか、エラーメッセージくらい貼れってばさ。
0873871
NGNGエラーは
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
0874871
NGNG連続ですいません。makefileは
test : test.cpp
gcc test.cpp -o test -Wall -I/usr/include/SDL
0875デフォルトの名無しさん
NGNGそのエラーは関数のプロトタイプだけで本体が定義されてない時に
出るエラー。
http://www2a.kagoya.net/~adults-toybox/sample2.wmv
http://www2a.kagoya.net/~adults-toybox/
0877871
NGNGgccの前にはちゃんとタブ入ってます。
ライブラリもちゃんとインストールされてます。
GTK等の他のライブラリは正常に動作します。
どうなってるんでしょうか?
0878デフォルトの名無しさん
NGNGライブラリはリンクしなきゃ。
`sdl-config --libs` もいれて。sdl-config が正しく
設定されていればそれでとおるとおもうけど。
0880デフォルトの名無しさん
NGNGpMyClass[0] = new CMyClass;
pMyClass[1] = (以下続く)
という配列の要素をnewで確保したのですが、
終了処理のところで
delete [] *pMyClass;
とやると実行時エラーが出ます。
一度にdeleteする方法があったら教えてください。
0881デフォルトの名無しさん
NGNG・pMyClass[0]ってちゃんと確保されてるの?
・delete[] *pMyClassに対応するnewってどこにある?
ポインタを勉強しませう。
0882デフォルトの名無しさん
NGNGpMyClass[0] = ..
あれ?pMyClassの実体は?
0883デフォルトの名無しさん
NGNG0884デフォルトの名無しさん
NGNG0885880
NGNG書き忘れでした...(汗)
正しくは、CMyClass** pMyClass[4]; です。
pMyClass[0],pMyClass[1]...には一応インスタンスがあり
メンバ関数も呼び出せているのですが、delete時にエラーが出ます。
>>883
基本クラスのポインタで派生クラスを管理している状態なので、
new [] は使っていませんでした。
ただdelete pMyClass[0];...と一つづつdeleteしてもエラーが出ます。
何か根本的な理解不足でしょうか?
それともdeleteするタイミングが悪いのか...
0886デフォルトの名無しさん
NGNGしてる事は大間違いだな。
0887デフォルトの名無しさん
NGNGCMyClass* pMyClass[4];
じゃなくて、CMyClass**なのか?
0888デフォルトの名無しさん
NGNG>正しくは、CMyClass** pMyClass[4]; です。
ほんとに?
CMyClass* pMyClass[4];
じゃなくて?
0889デフォルトの名無しさん
NGNGエラーって何の事だい?
0890デフォルトの名無しさん
NGNGこれならわかるが。
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デフォルトの名無しさん
NGNGhttp://game.2ch.net/test/read.cgi/gamedev/1005469181/l50
に行ってあげて。
0892880
NGNGすいません、さらに書き間違いをしていました。
CMyClass* pMyClass[4]; でした。
>>889
deleteを呼ぶときになると、アプリケーションエラーのダイアログが出て
「・・・メモリが"read"になることはできませんでした。」
という例外エラー?(←間違ってたらすみません)が出ます。
>>890
ソースを示していただいて、ありがとうございます。
頭の中が混乱していて、いろいろご迷惑をおかけしました。
まだnewとdeleteや配列について全然理解不足だということを痛感しました。
レス下さった方々、本当に感謝です。勉強になりました。
0893デフォルトの名無しさん
NGNG> メモリが"read"になることはできませんでした。
どっかでメモリを壊している。
0894デフォルトの名無しさん
NGNGその場合の正解は、たぶんこうだ。
std::auto_ptr<CMyClass> pMyClass[4];
for (int i = 0; i < 4; ++i)
  pMyClass[i].reset( new CMyClass );
delete を自分で書かないように心がけるのがコツだ。
0895デフォルトの名無しさん
NGNGclass hage:public hoge{...public:void poge();...};
int procA(){
...
hoge *p=new hage;
((hage *)p)->poge();
...
}
は安全ですか?(poge()はhogeの仮想関数ではありません)
あとC++キャストの載ってるいい本を教えてください
0896デフォルトの名無しさん
NGNG0897デフォルトの名無しさん
NGNG他のクラスのインスタンスである可能性がある場合はdynamic_cast
λ...... λ...... 失敗だったネ…
λ...... λ......
λ...... λ...... 逃げていく…
λ...... λ......
λ......
λ...... λ...... λ...... みんな逃げていく…
λ...... ここ変だよ・・ λ...... λ......
λ...... λ...... 失敗だったネ…
λ...... λ......
λ...... λ...... 逃げていく…
λ...... λ......
λ......
λ...... λ...... λ...... みんな逃げていく…
0899デフォルトの名無しさん
NGNGATL はソレでいっぱいです。
0900デフォルトの名無しさん
NGNGCOnigiriの場合は、普通のクラス
IOnigiriの場合は、インターフェースクラス
みたいなプリフィックスありますが、
オリジナル(?)で
TOnigiri ・・・ テンプレートクラス。内部の型を設定して使う。
BOnigiri ・・・ 継承して使う用(Base)。ウインドウ(コールバック部分)やスレッドクラスみたいなやつ
みたいな感じで
勝手にやっていいのでしょうか?
もし、開発チーム内でこんなことされたら勘弁と思う人とか居ます?
あと、
構造体名の場合は、SOnigiriでいいのでしょうか?
何かプリフィックすあったら教えてください。
0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNGATL はソレでいっぱいです。
0903デフォルトの名無しさん
NGNGEffective C++ or More effective C++ or its both!
0904デフォルトの名無しさん
NGNG0905デフォルトの名無しさん
NGNGテンプレートかつインターフェイスだった場合にはどうするね?
TIXxx や ITXxx という手もあるが
旅行者を表すインターフェイス
ITraveler とかがあったり
Java Virtual Machine を表すクラス
CJVM とかがあったら大混乱だよね?
ってわけで俺はテンプレートはサフィックスにしてる(CXxxxTemplateとか)
あと、チーム内なら勝手にやるのはご法度だろ。
周りの了解を得てからだな。
俺的には C と I 以外は却下だけど。
0906デフォルトの名無しさん
NGNGhttp://ccp14.semo.edu/ccp/ccp14/ftp-mirror/howardflack/pub/soft/crystal/fox/tmp/Anders.pdf
0907デフォルトの名無しさん
NGNG0908デフォルトの名無しさん
NGNGTはなんかVCLっぽいしBはなんかBeOSのAPIっぽいので却下。
…というのは半分冗談にしても、
テンプレートは最初から template やら <> がくっついてるので
名前で区別する必要は無い気がする。継承の方は、
Ixxx にするとか AbstraceXxxx にするとか。
0909908
NGNG0910デフォルトの名無しさん
NGNG俺は既に落としたので通報しますた
0911デフォルトの名無しさん
NGNGハラヘッタ〜
☆ チン 〃 Λ_Λ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
ヽ ___\(\・∀・)< concrete keywordまだー??
\_/⊂ ⊂_)_ \____________
/ ̄ ̄ ̄ ̄ ̄ ̄ ̄/|
|  ̄  ̄ ̄ ̄  ̄ ̄:| :|
| |
0912デフォルトの名無しさん
NGNG「西部労働レストラン」
っていうんです!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0913デフォルトの名無しさん
NGNGあんた 「すれ立てるまでもない」 スレにも居なかったか?
0914910
NGNG0915デフォルトの名無しさん
NGNGX *a;などと宣言したあと、(Xはクラス)
aの配列のメモリを一つずつ確保するにはどうしたら良いでしょうか?
本来、a = new X[個数];と宣言すれば済むのですが、
aの個数がファイルを読み終わるまでわからないため、
forのループ内で一つ一つ確保したいのです。
a[i] = new ???;みたいな感じで。
ご教授宜しくお願いします。
0916デフォルトの名無しさん
NGNG0917デフォルトの名無しさん
NGNG2回目だよな?
0919デフォルトの名無しさん
NGNG0920デフォルトの名無しさん
NGNGvecor<X>
じゃだめなのかね。
0921デフォルトの名無しさん
NGNG0922デフォルトの名無しさん
NGNGポインタ勉強せーよ
0923デフォルトの名無しさん
NGNGnew(a)X; //replacement構文キタ?
0924デフォルトの名無しさん
NGNGだから、その a がいくつ必要かわからないって話だろ。
vector でいいじゃん。
0925デフォルトの名無しさん
NGNG0926923
NGNGファイルを読んで個数を得てからX *a = new X[n];ではだめなのかね?
0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNG何かコンパイルが遅くなるのが気になります。。。大丈夫なのでしょうか?
>>926
一応可能ですが、
個数得るだけじゃなく、そのファイルの途中で配列に(ファイルの)内容を代入させるため
ファイルを2度読むはめになっちゃうのです(TT)
それしかないですかね?
0929デフォルトの名無しさん
NGNG> vectorとか言うc++では初めて聞くものをやろうとしてみてるんですが
コードを書き始める前に、プログラミング言語 C++ ぐらいは読んどけ。
0930デフォルトの名無しさん
NGNGhttp://www.pro.or.jp/~fuji/computerbooks/c/cpp.strou.html
これ図書館で借りてきたんですが載ってないですTT
0931デフォルトの名無しさん
NGNG0932デフォルトの名無しさん
NGNGヘッダー覗いてみればわかるけど、膨大な template を処理してる。
多少はガマンすること。
0933デフォルトの名無しさん
NGNGこれには載ってるだろう。
>>930のは古いかな。
0934デフォルトの名無しさん
NGNG0935デフォルトの名無しさん
NGNG0936デフォルトの名無しさん
NGNG0937デフォルトの名無しさん
NGNG0938デフォルトの名無しさん
NGNG「STL(標準テンプレートライブラリ)に関する情報を新たに加筆。」 とか書いてあるな。
0939デフォルトの名無しさん
NGNG独自リスト → std::list となって結局最後に std::vector 使う事になるような気もするが。
0940デフォルトの名無しさん
NGNGアクセスが不便じゃん。
0941デフォルトの名無しさん
NGNG0942デフォルトの名無しさん
NGNG0943デフォルトの名無しさん
NGNG0944デフォルトの名無しさん
NGNG義務を負うこと。
0945945
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1038031395/l50
0946デフォルトの名無しさん
NGNG0947デフォルトの名無しさん
NGNG0948デフォルトの名無しさん
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デフォルトの名無しさん
NGNG0950デフォルトの名無しさん
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デフォルトの名無しさん
NGNG0952デフォルトの名無しさん
NGNG次スレよろしく。
0953デフォルトの名無しさん
NGNG>945
0954デフォルトの名無しさん
NGNG>>944
0955デフォルトの名無しさん
NGNG0956埋子
NGNG0957デフォルトの名無しさん
NGNG0958埋造
NGNG0959埋造
NGNG0960デフォルトの名無しさん
NGNG0961債務不履行の名無しさん
NGNG0962デフォルトの名無しさん
NGNG0963デフォルトの名無しさん
NGNG0964債務不履行の名無しさん
NGNG0965デフォルトの名無しさん
NGNG0966埋造
NGNG0967デフォルトの名無しさん
NGNG0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNG_ー|ー-ー | _ ヽ \ | |
__|_」  ̄~| ̄ / レ |
/ |ノ ^ヽ _.、| < ノ
(_ノ| ノ ∠_ノ\ \ /
. _」__  ̄──
_| \ | ヽ /
(ノ^|. | | |
(_._」 レ / \
●
ヽ(;´Д`)ノ
0970デフォルトの名無しさん
NGNG_ー|ー-ー | _ ヽ \ | |
__|_」  ̄~| ̄ / レ |
/ |ノ ^ヽ _.、| < ノ
(_ノ| ノ ∠_ノ\ \ /
. _」__  ̄──
_| \ | ヽ /
(ノ^|. | | |
(_._」 レ / \
●
ヽ(´Д`;)ノ
0971デフォルトの名無しさん
NGNG○
ミ∴
∴∴
0972デフォルトの名無しさん
NGNG0973デフォルトの名無しさん
NGNG0975デフォルトの名無しさん
NGNG引用する範囲が正しくない。
http://pc3.2ch.net/test/read.cgi/tech/1026793823/972-976
0976デフォルトの名無しさん
NGNGおいおい、俺はこのスレと同じ部分だけを抜粋したんだよ。
0977デフォルトの名無しさん
NGNG976 を含め忘れたくせに何を偉そうに。
0978デフォルトの名無しさん
NGNGん?975じゃないが,含まれてるぞ?
0979977=975
NGNG976 宛て。
0980埋造
NGNG0981デフォルトの名無しさん
NGNGああ分かった。
俺=>>972=>>974 なんで,
自分のレスを含めて「ワラタ」と言うと自作自演になってしまうので恥ずかしかったから省いたんです。
許してちょ。
0982デフォルトの名無しさん
NGNG0983デフォルトの名無しさん
NGNG0984埋造
NGNG埋め。
0985デフォルトの名無しさん
NGNG一日人埋め
0986デフォルトの名無しさん
NGNG0987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNG0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0993デフォルトの名無しさん
NGNG誰か作って
0994デフォルトの名無しさん
NGNG0995埋造
NGNG埋め。
0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。