1 名前:デフォルトの名無しさん mailto:sage [2006/12/30(土) 20:07:25 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。
371 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 01:09:27 ] >>366 はて、>362は実体を返しているようだが。
372 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 01:32:40 ] >>371 僕は参照だと脳内補完した。
373 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 03:02:01 ] とりあえずゲッターはconstつけようや
374 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 19:17:43 ] C++のソースからクラス図を自動生成してくれるようなツールはないでしょうか・・・?
375 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 19:19:06 ] >>369 インクルードパスに..を追加できないの? ""で括ったヘッダ名が見付からなければ、 <>で括ったのと同じようにヘッダを探すことになっている。 だからインクルードパスの指定は""で括ったものにも有効。
376 名前:デフォルトの名無しさん mailto:sage [2007/02/09(金) 20:59:55 ] >>374 Doxygenを含めて色々在ると思う。
377 名前:デフォルトの名無しさん [2007/02/14(水) 13:38:46 ] class A{ static const double a; static const double b; static const double c; }; const double A::a=5; const double A::b=10; const double A::c=a/b; と書いた場合、cは必ずa=5とb=10が実行された後に実行されるのでしょうか?
378 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 17:02:17 ] CTypedPtrListのSeqValueListを CTypedPtrArrayにする時ってどうすればいいんでしょうか? 下のがソースなんですが、やり方が良くわからない。。。orz CItemInfo::~CItemInfo(){ int iCount; POSITION pos; VALUE *pValue; m_pValueList = &m_SeqValueList; iCount = (int)m_pValueList->GetCount( ); pos = m_pValueList->GetHeadPosition( ); for( int i=0; i<iCount; i++ ){ pValue = m_pValueList->GetNext( pos ); delete pValue; } m_pValueList->RemoveAll(); m_pValueList = &m_ParValueList; iCount = (int)m_pValueList->GetCount( ); pos = m_pValueList->GetHeadPosition( ); for( int i=0; i<iCount; i++ ){ pValue = m_pValueList->GetNext( pos ); delete pValue; } m_pValueList->RemoveAll(); }
379 名前:デフォルトの名無しさん mailto:sage [2007/02/14(水) 18:28:32 ] なんだマルチか
380 名前:コンパイルとおらねぇもん mailto:sage [2007/02/15(木) 01:23:57 ] >>377 いいえ。実行されることはありません。
381 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:39:13 ] MFC実行したら Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or PostNcDestroy in derived class will not be called. って言われたんだけど、どういう意味なの?
382 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 14:45:37 ] そのままの意味です。英語の意味が判らないと言うのであれば、鼬害です。
383 名前:デフォルトの名無しさん mailto:sage [2007/02/15(木) 22:56:15 ] >>381 ウィンドウを正しく終了せず プログラムの変数(インスタンス)が消されたことにより 正しい手順ではなくCWndのデストラクタが呼ばれたんじゃないの(推測)。
384 名前:377 mailto:sage [2007/02/16(金) 07:39:55 ] そうするとcの値は何になるのでしょうか?
385 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 08:19:55 ] 0.5でしょ。コンパイルタイムに確定するから。
386 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 12:56:06 ] >>385 この手の順序依存は規格的には未定義じゃなかったっけ?
387 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 13:13:40 ] BCCでインデントするとemacsでやってたのと違ってかなり スペース空くのですが、こんなもんなんですか?
388 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 13:22:19 ] BCCでインデント の意味がわからない。
389 名前:デフォルトの名無しさん mailto:sage [2007/02/16(金) 16:54:28 ] class A{ static const double a; static const double b; static const double c; }; const double A::a=5; const double A::b=c/a; const double A::c=a/b; じつはこれもコンパイルできてしまったりする。
390 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:40:16 ] >>389 順序は規定されていないけどコンパイルされる以上、値は決まるわけだね。 その例だとa, b, cの順序に評価される可能性が高そうだから、bは(cが暗黙の初期化で0だから)0、cは∞か。 const double A::c=a+b; const double A::b=c+a; const double A::a=5; こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。 まして複数のコンパイル単位に分かれていたらリンク順序にも依存してしまうのかな。 結論: 評価順序に依存した初期化は鼻から悪魔。constにしないでシングルトンにすべきか。
391 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 12:41:58 ] 一部訂正: ×こうなってたとすると、a, b, cがそれぞれ(acbの順序で評価して)5, 0, 0なのか(cbaの順序で評価して)5, 10, 5なのか悩ましいところだ。 ○こうなってたとすると、a, b, cがそれぞれ(cbaの順序で評価して)5, 0, 0なのか(acbの順序で評価して)5, 10, 5なのか悩ましいところだ。
392 名前:デフォルトの名無しさん mailto:sage [2007/02/17(土) 23:13:18 ] gccは確か制御できた様な
393 名前:デフォルトの名無しさん [2007/02/19(月) 12:03:31 ] C言語なんですがwaveを再生させるにはどうすればよいでしょうか? プログラムが完了したら鳴らしたいのですが・・・。
394 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 12:18:16 ] Beep() …言ってみただけ
395 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 12:19:02 BE:672138566-2BP(1050)] てst
396 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 12:19:46 ] ビープ音鳴らすだけならputchar('\a'); 処理系依存だけど
397 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 14:44:15 ] 演算子の多重定義って使う機会ありますか?
398 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:11:16 ] 自分で使うかどうかはともかく、人が作ったものはよく使う。 一番よく使うのがイテレータに対する操作。 後はstd::basic_stringの比較・連結もよく使う。
399 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 15:31:16 ] ビープ音ではなくwavのようなPC内部で鳴る種類が良いです・・・
400 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:00:23 ] >>399 「wave API」でググれ。
401 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:15:44 ] waveを再生するってのは結構面倒なのでしょうか?
402 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 16:32:39 ] 君の面倒なレベルがわからないから回答不能
403 名前:デフォルトの名無しさん mailto:sage [2007/02/19(月) 19:12:31 ] WindowsならMCIかwaveoutかDirectX 質問のレベルからしてMCIがお勧め
404 名前:397 mailto:sage [2007/02/19(月) 22:35:33 ] >>398 ありがとうございました。m(_ _)m
405 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 02:13:35 ] 質問です。 typedef std::map<mykey_t,myval_t> mymap_t; void hoge(mykey_t k, const mymap_t &m){ mymap_t::iterator p = m.find(k); // コンパイラエラー } constが付いたmapのイテレータを造りたいんですけど、 どうすればいいのですか?
406 名前:デフォルトの名無しさん mailto:sage [2007/02/20(火) 03:03:39 ] >>405 mymap_t::const_iterator p = m.find(k);
407 名前:デフォルトの名無しさん mailto:sage [2007/02/22(木) 13:38:18 ] >>381 今さらながらマジレス Warning: calling DestroyWindow in CWnd::~CWnd; OnDestroy or PostNcDestroy in derived class will not be called. [翻訳] CWndから派生クラスのウィンドウを使っているときに、 規定クラスのCWnd::~CWndデストラクタが呼ばれているので 派生クラス側のOnDestroyやPostNcDestroyハンドラが呼ばれませんですのよ。うふ ウィンドウ破棄するときに派生クラス->DestroyWindowを呼んでない悪寒です。
408 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 11:42:39 ] 文字と数字が入力された時に、数字だけを消して 文字だけ表示したいんですけど、どうやればいいのでしょうか? void del_digit(char *str){ while(*str) /*ここでどうすれば?*/ putchar(*str++); } int main(void){ char str[100]; printf("mojinyu-ryoku:"); scanf("%s",str); printf("DelDigit:"); del_digit(str); putchar('\n'); return(0); }
409 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 12:22:44 ] if (isdigit(*str))
410 名前:408 mailto:sage [2007/02/23(金) 13:05:39 ] >409 ありがとうございました。解決できました。
411 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 16:03:53 ] 注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく スレの雰囲気を崩しかねないのでお黙り下さい。 また質問者は回答者に知識を披露する場を与える貴重な存在なので、 質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。 忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、 その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると 判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
412 名前:デフォルトの名無しさん mailto:sage [2007/02/23(金) 21:26:09 ] >>411 そうか
413 名前:デフォルトの名無しさん [2007/02/25(日) 19:10:07 ] ユーザー一人一人に別々のシリアルナンバーを割り当てたいのですが、 どのように生成し、ソフト側ではどのようにそれをチェックすればよいのでしょうか?
414 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:45:45 ] ユーザー特有情報(メールアドレスとか)を秘密鍵で暗号化して、 ソフトに内蔵の公開鍵で復号できたらOK、とか?
415 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 19:56:51 ] うんにゃ、クラックから守るにはクラッカーの手口を知る必要がある。 リバースエンジニアリングの本でも買って読んだ方が良いぞ。相手は『強力なデバッガ』使いだからな。 ロジックの流れなんか直ぐに分かってしまう。まずは低水準なレベルで防御しなければならん。 認証用の関数はプログラム処理の流れから完全に分離、関数のアドレスを入れているポインタのconst変数には定数NULLを入れておき、 ifで関数ポインタ変数がNULLじゃなかったらアドレス先の認証関数を実行、とすると良いかもしれん。 これなら認証用関数の手がかりはほとんど無いからな。ダミーの関数でラップしておけば更に頑丈になる。 NULL定数を正常な認証用関数アドレスに書き換えるパッチをユーザーに配る必要があるが、 ユーザー名をキーに若干絡ませて暗号化とかしておけ。
416 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 20:03:43 ] なにいってるの?
417 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 20:20:15 ] >>415 はアレだ。 物事を最初だけ聞いて「みなまで言わずとも分かった」と暴走するタイプだ。
418 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 22:50:20 ] 単にWizardBibleとか読んでわかった気になってるだけだろ
419 名前:デフォルトの名無しさん mailto:sage [2007/02/25(日) 23:34:20 ] 江戸っ子は気が短いんでい!
420 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 01:25:29 ] >>415 の言ってるようにクラック対策なら、↓こっちのスレで相談しなさい。 クラッキングの勉強の仕方を教えてください pc10.2ch.net/test/read.cgi/tech/1164783092/
421 名前:デフォルトの名無しさん [2007/02/26(月) 20:35:33 ] VC++自体よくわからんが ゲーム制作で俗に言うC++ってVC++のこと? ゲーム制作の参考書買いに行ったがVC++ばっかりで混乱・・・ ちなみにC++の基礎はマスターした。
422 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:41:19 ] まあ、Windows対象のC++本ならほとんどはVC++を想定して書かれてると思ってもいいんじゃないかな。
423 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:47:30 ] 趣味と実益(基本情報技術者の試験)を兼ねてc言語を勉強しようと思います。 フリーコンパイラ使おうと思うんですがどれがいいでしょうか? VisualStudio Expressで問題ないですか?
424 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 20:53:55 ] 趣味ならIDEも付いてるし、VC++でいいんじゃね?
425 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 21:23:33 ] 夢を壊すようで悪いけど 基本情報は何の実益にもなりません
426 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 21:29:22 ] おいらのところは資格手当がでるよ
427 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 21:33:03 ] 実益というか「そんなのも取ってねぇのかよ」 といわれる会社もあるにはある
428 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 22:43:59 ] >>442 サンクス やっぱりVC++も頭に入れながらやってみる。
429 名前:デフォルトの名無しさん mailto:sage [2007/02/26(月) 23:06:02 ] WindowsならVC++かgccの二択だわな
430 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 00:46:54 ] >>429 それを言うならVCかICCの二択だろ。 この期に及んでgcc使うヤツなんていないって。
431 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 01:02:56 ] icc高すぎ
432 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 01:13:14 ] >>431 じゃ、VCで我慢汁。
433 名前:デフォルトの名無しさん [2007/02/27(火) 16:50:30 ] >> 430 BCC + BCC Developer は? もしかして却下? Turbo Debbuger まで全部タダでそろうが…。 BCC Develoer のクラスでSTL使えたか忘れたが…。
434 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 16:54:18 ] >>433 STLも使えたはず。
435 名前:デフォルトの名無しさん [2007/02/27(火) 17:00:16 ] >> 434 そうですか!情報提供ありがとうございます。 VCのMFCでは文字列クラスがSTLと共存できない使用だったはず… 最新バージョンでは使えるようになったのかな?? 使えないなら BCC の方がよさそうに思いますが…。
436 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:19:16 ] Borland C++よりVC++ (7.1以上)の方がテンプレートがまともに使える。 STLを使えるかどうか気にするなら、それだけでVC++を選ぶには十分。 MFCとの相性が悪いなら、むしろMFCなんて捨ててしまえ。
437 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:21:18 ] Cコンパイラとして使うならbccよかgccのほうがマシだろ
438 名前:デフォルトの名無しさん [2007/02/27(火) 17:31:37 ] >> 436 たしかに自分使ってない。 >> 437 gcc は使ったこと無くて…
439 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:44:30 ] BCCはいまだにC++コンパイラではない Boostの些細なライブラリが通らないので C++を知っている人間なら薦めない (某サイトは特集していたが) MFCがBoostやSTLやだれそれと共存できないなんてことはない
440 名前:デフォルトの名無しさん [2007/02/27(火) 17:47:44 ] >> 439 いえ自分が言っていたのは MFC内で使われている 文字列クラスと STL の string クラスの互換性の話…。 MFCをポイすれば悩むこと無いでしたが…
441 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 17:55:10 ] >>440 MFCの文字列クラスとSTLのそれを混在させなきゃいいだけの話じゃないの
442 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:10:26 ] >>440 文字列に限らずコンテナ類も互換性がないが、それより 「互換性がない」と「共存できない」じゃまるで意味が違うだろが。
443 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 18:14:12 ] たしかにMFCのCStringTとstd::basic_stringは別物だが、 相互に変換できないわけではないし、 Boost.Range(或いはイテレータ)では統一的に扱えるんだから、 そこまで気にすることは無いと思う。
444 名前:デフォルトの名無しさん [2007/02/27(火) 19:00:22 ] >> 443 参考になりました。ありがとうございます。
445 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 19:33:39 ] template<class T>class A{ private: T na; public: A(T a):na(a){}; friend A<T> operator + <T>(A<T>&,const A<T>&); }; template<class T>class B{ private: T nb; public: B(T b):nb(b){}; friend B<T> operator + <T>(B<T>&,const B<T>&); }; template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;} template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;} でBのメンバ変数にアクセスできないのはなぜ--??
446 名前:デフォルトの名無しさん [2007/02/27(火) 20:23:37 ] >> 445 template<class T>A<T> operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;} template<class T>B<T> operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;} ↓ template<class T>A<T> A<T>::operator +(A<T> a1,const A<T>& a2){a1.na=a1.na+a2.na;return a1;} template<class T>B<T> B<T>::operator +(B<T> b1,const B<T>& b2){b1.nb=b1.nb+b2.nb;return b1;} とすればいいのでは?
447 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 21:03:12 ] friend関数なのでそれでも無理っぽいです。
448 名前:デフォルトの名無しさん [2007/02/27(火) 23:08:00 ] int x; int &rx = x; これおかしくね? &rx = x; 何でアドレスにint型の変数を代入するの
449 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:08:45 ] 「参照」を知らない香具師は基礎からC++やり直せ
450 名前:デフォルトの名無しさん mailto:sage [2007/02/27(火) 23:45:33 ] (int &)rx=x; rはreferenceのr 宣言時に型の直後に&をつけたものは参照型になる 嘘です
451 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 13:09:55 ] ネットで落としてきたcppファイルとdefファイルを使ってdllを作成したいんだけど、 やり方がよくわかりません。 ぐぐって見たところ、 ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library or MFC Appwizard(dll) を選んで もにょもにょするって書いてあったんですが、↑の時点で2種類のやり方があってどっちが正解かわからないですし、 そもそも貰ったファイルをdll化することが目的なので新規作成からやるのは何か間違っている気がします。 とりあえずcppファイルを開いてコンパイルして、、、defファイルをプロジェクトに追加。 そして再度コンパイルをしてみても・・・無理でしたorz どなたか助言をお願いします… 環境はvisual V++ 6.0 Standard Editionです。 よろしくお願いします。
452 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 13:14:23 ] >>451 dllを新規作成するからあってるのでは? そのdllプロジェクトにソースを追加してモニョモニョするんだと思うんだけど。
453 名前:451 mailto:sage [2007/02/28(水) 13:35:42 ] うは…なるほど、そういう解釈ですか… とりあえず ファイル→新規作成→プロジェクトタブ→win32 Dynamic-Link Library を選んで空のDllオブジェクトを選択して(この時点で意味不明ですが…他選ぶとどうなるの…?) プロジェクトの追加でcppを選んでビルドしてみたら何故かdllファイルが出来上がっていました 個人的にはキタ━━━━(゚∀゚)━━━━!!!! でもどうなってんのか全然だ(ノ∀`) dllにもフォーマットがあって、cppファイルに則したやり方じゃないとうまく生成されないのだろうか。 ちなみにMFC Appwizard(dll)の方で作ろうとしたら、エラーがでて生成されませんでした。なんでやねん(;´Д`) それ以前に先ほどDllを作成したときには、プロジェクトの追加でcppファイルを追加したわけですが、 defファイルは追加しなくてもいいんでしょうか? 勝手に追加されるから特に選択する必要はないということでしょうかね・・・(ソースによりけりなのかもしれないけれど)
454 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 14:19:10 ] def ファイルは関数のエクスポートに必要 __declspec(__dllexport) を関数につけてないのなら def無しで作った場合、出来上がったDLLはどこからも呼べないものになってると思うが depends.exe 持ってないか?
455 名前:451 mailto:sage [2007/02/28(水) 15:00:26 ] depends.exeとはDependency Walkerのことなのかな…? とりあえず、defファイルを追加せずにdll化するとまずそうなので、先ほどの手順で プロジェクトの追加からcppファイルとdefファイルの両方を追加して見ました。 すると…エラーなしでdll化キタ━━━━(゚∀゚)━━━━!!!! これで関数もエクスポートできるようなまともなdllになったのかな… とりあえずDependency Walkerを起動してみて調べたところ、左のツリー状のところに TEST.dll l −KERNE32.dll l −NTDLL.dll ってなってました。自分にはさっぱりですが、正常にdll化できたと思ってよいのでしょうか(;´Д`)?
456 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 15:13:48 ] DLLの関数のエクスポートのやり方は2種類あるのよ ・関数に__dllexportを付ける ・.defファイルに纏めてエクスポートする関数を書く。 どっちでもおk。俺は見やすいからdefの方でやる。
457 名前:451 mailto:sage [2007/02/28(水) 15:41:47 ] なるほど… まだまだ不勉強なようですね。 でも、ねんがんのdllをてにいれることができたので、レスを下さった方々にはお礼を言いたいと思います。 どうもありがとうでした・゜・(ノA`)・゜・
458 名前:デフォルトの名無しさん mailto:sage [2007/02/28(水) 16:58:10 ] >>455 そのTest.dll にカーソルあわせたら 右の下のFunction に一覧出るべ それがエクスポートされたやつね。
459 名前:デフォルトの名無しさん [2007/02/28(水) 17:29:16 ] 今日からマイクロソフトのVisualC++2003をし始めたんですが、どこかのサイトで 見つけた同じC++の例文とか書いてみても実行したとたん画面が消えるのはなぜですか? printf とか cout っていうのとかって一緒に使えますか?