- 1 名前:デフォルトの名無しさん [2008/02/20(水) 12:33:41 ]
- エスケープシーケンスやWin32APIなどの環境依存なものでもOK。
ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.48【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1202141921/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
- 568 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 13:50:24 ]
- 構造体かクラスでラップしとけばいい。
boost::array を使うとか。
- 569 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:28:53 ]
- C++で乱数を扱う為のクラスとか関数はありますか?
rand/srand使うしかないですか? rand/srand使うとしたら、シードによく現在時刻使いますが 現在時刻を取得する方法はtimeしかないですか? ++らしい方法があれば教えてください。
- 570 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:30:06 ]
- MT法のインラインアセンブラ版がどっかにころがってたきがする
- 571 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:31:57 ]
- boost使うか
www.math.sci.hiroshima-u.ac.jp/~m-mat/MT/mt.html ここから持っていけばいいんじゃね
- 572 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 16:32:08 ]
- >>569
Boost.Random
- 573 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:06:58 ]
- javascriptではalert("文字列"+123)
という風に文字列と数字を一緒にメッセージ表示出来ましたが、 C++で文字列と数字を一緒にメッセージ表示させるにはどうしたらいいでしょうか? MessageBox(NULL, "文字列"+123, "test", NULL) というのは出来ませんでした。
- 574 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:09:11 ]
- >>573
JavaScript同様、文字列を連結してから表示すればいい。
- 575 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:19:27 ]
- >>574
char msg[20] = "文字列"; char tmp[10]; itoa(123, tmp, 10); strcat(msg, tmp); MessageBox(NULL, msg, "test", NULL); こんな感じですか? メッセージ毎にこのコードを書くのも面倒臭いのと、 いつも "文字列"+数字 の組み合わせと言うわけでもなく 数字+"文字列"+数字+"文字列" という事もあるため 自作関数でmsgbox(char*, int){}という決め撃ちではやく、 文字列や数字を混同で表示できる方法はないかと考えています。
- 576 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:20:07 ]
- お願いします。C言語初心者なんですが、
ソース内に日本語を入れるとエラーになるんですが、 どこをどうすればいいのでしょうか? 超初心者です。よろしくお願いします。
- 577 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:21:41 ]
- × ああああ
○ //ああああ
- 578 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:22:14 ]
- ソースから日本語を消す
- 579 名前:576 mailto:sage [2008/02/24(日) 17:27:51 ]
- 説明へたですいません。
/* hello02.c */ #include <stdio.h> int main() { printf("今日はよい天気です。\n"); printf("明日もよい天気でしょう。 \n"); return 0; } これなんですけど…
- 580 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:30:51 ]
- >>576
どんなエラー?
- 581 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:34:42 ]
- >>570-572
ありがとうございます、Boost 試してみます。 手元の mingw にはなさそうなので、まずはgooって Boost 環境揃えてみますね。 >>576 ・ソースの文字コードを変えてみる ・処理系を変えてみる
- 582 名前:576 mailto:sage [2008/02/24(日) 17:36:23 ]
- 本当にすいません。
普通に表示されました。 なんか間違ったやりかたしてたみたいです… 申し訳ないです。
- 583 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:41:12 ]
- >575
そのためのsprintf、とだけいっておくけど。
- 584 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:48:41 ]
- >>583
sprintfだとメッセージウィンドウは生成されないですよね? 外見としてはMessageBoxの中身に数字や文字列を表示している様な方法がいいんです。
- 585 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:54:21 ]
- sprintfのsは何の意味か知っているか、とだけ言っておくけど。
- 586 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:55:05 ]
- >>584
ならsprintfしてMessageboxにいれる処理の関数つくればよくね?
- 587 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:56:41 ]
- 要はフォーマット→MessageBox()と
二段構えになるのが嫌、というだけの話とエスパー vsprintf()使って自作ラッパー関数でも書くんだな
- 588 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 17:58:37 ]
- >>584
boost::lexical_cast を使うと幸せになれると思う
- 589 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:04:51 ]
- >>585-588
失礼しました。printfと勘違いしてました。 sprintfだと文字列に格納できるんですね。 boostは自分にはまだ早そうなので(正規表現使えるのは魅力的ですが)、sprintfでやってみます。 ありがとうございました。
- 590 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:05:19 ]
- >>588
効率が悪いのが難点
- 591 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:07:23 ]
- >>588
俺も最初それ思いついたけど、連結する数値がたくさんあると見苦しくなるから std::stringstreamに流し込んで取り出す方がいいんじゃないかなあ。
- 592 名前:デフォルトの名無しさん [2008/02/24(日) 18:45:34 ]
- DLLの読み込みで、コンパイラによって失敗します
序数で指定しても動きません どのような理由でしょうか? VC++だと動かないですが、BCCとDMCで動きます
- 593 名前:デフォルトの名無しさん [2008/02/24(日) 18:47:43 ]
- HINSTANCE hd=LoadLibrary("*****.dll");
FN = (fnc) GetProcAddress(hd, (LPCSTR)4); //序数での指定 このような記述はWindowsXPなら万能ではないんでしょうか?
- 594 名前:デフォルトの名無しさん [2008/02/24(日) 18:50:46 ]
- 訂正
読み込みはしますが、実行時にエラーになります 序数がずれるのかも・・と思い全ての番号で試したのですがだめです
- 595 名前:デフォルトの名無しさん [2008/02/24(日) 18:52:47 ]
- 継承について教えてください
CFooから派生したCFooEx0、CFooEx1、CFooEx2、CFooEx3があるとします。 そして、それぞれCJissou0、CJissou1、CJissou2、CJissou3に派生してるとします。 その上、CJissou0、CJissou1はIHoge0を、CJissou2、CJissou3はIHoge1を実装しているとします。 図にするとこんな感じ。 CFoo─CFooEx0┬CJissou0 IHoge0┘ CFoo─CFooEx1┬CJissou1 IHoge0┘ CFoo─CFooEx2┬CJissou2 IHoge1┘ CFoo─CFooEx3┬CJissou3 IHoge1┘ CFooとCFooEx〜は弄らないとして、IHoge〜のインターフェイス関数をCJissou〜に実装します。 で、マネージャー的な物例えば、std::vector<CFoo *> vecにそれぞれの実態を入れて、 CJissou〜の関数を呼びたいのですが呼ぶ際には、 dyanamic_cast<CJissou0 *>(vec[0])->Test();見たいな事をしないといけないと思います。 でもそういう呼び出しだとIHoge〜も意味が無くなってしまうし、数が多くなると厳しくなります。(IHoge〜は数個) だから、dyanamic_cast<IHoge0 *>(vec[0])->Test();//エラー 見たいな呼び方をしたいのですがどうすればいいのでしょうか?
- 596 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:59:37 ]
- >>595
そもそもそのような継承にしてる理由は?
- 597 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 18:59:59 ]
- >>595
CFoo のメンバ関数ならキャストは要らないはず。 IHoge〜 に意味が無くなると言うが、こっちからしたら CFoo や vec の使い方も ひっくるめて最初からその継承関係の意味がわからん。
- 598 名前:595 mailto:sage [2008/02/24(日) 19:06:57 ]
- えっと、まあ、CFooがMFCのCViewで、CFooEx〜がCTreeViewとかCListViewなのでどうした物かと質問しました・・・。
- 599 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:10:28 ]
- なんでvector<IFoo>とかにしないわけ?
あるいは、virtual Test()をもつ何かインターフェースに。
- 600 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 19:18:44 ]
- CFooEx の状態で持てないのなら
ダウンキャストすることになるだろうな。
- 601 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:05:03 ]
- >>590
もう自前でパースしてるよ
- 602 名前:592 [2008/02/24(日) 20:05:24 ]
- 最適化オプション関係でした
- 603 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:10:05 ]
- >>601
車輪の再発明
- 604 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:25:22 ]
- boostが?
- 605 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:29:54 ]
- ごめん勘違い
- 606 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 20:58:50 ]
- 文字コード?jisコード?って覚えるべきもの?
- 607 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:06:12 ]
- 必要になったときに表を見れば十分
- 608 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:06:13 ]
- >>606
全てのJIS漢字のJISコードなんて、そうそう覚えられるもんじゃないと思うが。
- 609 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:14:12 ]
- class Piyo{
〜 }; class Hoge{ public: void hoge(Piyo[][256]); }; void Hoge::hoge(Piyo[][256] piyo){ 〜 } こんな実装をした時に、Hoge::hogeのpiyoを書いておくと'Piyoは未定義のシンボル'と怒られてしまいます。 仮引数をPiyo[][256]だけにすればコンパイルは通りますが、どう使えというのか・・・といった感じです。 コンパイラはBCC5.5を使っています。クラスの2次元配列をできれば「参照」で渡したいのですが、 どうすればいいんでしょうか?
- 610 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 21:15:36 ]
- 単に書き方がおかしいだけだ。
void Hoge::hoge(Piyo piyo[][256]) { しかもこれいわゆる参照渡しの挙動をするが、 正確にはポインタ渡しだし。
- 611 名前:609 mailto:sage [2008/02/24(日) 21:29:18 ]
- うわ・・・。確かにおかしな書き方してた・・・。
自分でもドン引きです・・・。ありがとうございました
- 612 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:16:37 ]
- streaming.linux-magazin.de/en/program_fosdem.htm
cmakeについてのリアルタイム講演が聞けるそうな
- 613 名前:デフォルトの名無しさん [2008/02/24(日) 23:20:24 ]
-
ReadFile(fp , &(buf[N]) , 1500 , &sz , NULL); でエラーで止まります bufは十分にとってあります なぜでしょうか
- 614 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:24:57 ]
- >>613
bufの宣言がどうなっているかにも拠るが、&(buf[N])をbufにしてみろ。 それで巧くいくなら、お前は馬鹿だ。
- 615 名前:デフォルトの名無しさん [2008/02/24(日) 23:31:32 ]
- 位置を変えてループして読もうとしてるんです bufにすると上手くいきますが前のデータが消えます
原因不明ですが、変数の位置変えたらエラーでなくなり一応うごくようになりました
- 616 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:34:06 ]
- たまたま動いてるだけくさいな。
単純にバッファオーバーフローしてるだけじゃないのか?
- 617 名前:デフォルトの名無しさん [2008/02/24(日) 23:36:56 ]
- メモリ関係のエラーみたいです また止まりました
別のところから変更しないと直りそうにありません 設計やり直してきます
- 618 名前:デフォルトの名無しさん [2008/02/24(日) 23:48:58 ]
- coutやnewの多重定義ってどうやるのかわかりません できますか
- 619 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:51:19 ]
- >>613
char buf[NMAX*1500] なら、&(buf[N*1500]) char buf[NMAX][1500]; なら、&(buf[N][0]) char *buf[NMAX] for(...) buf[N] = malloc(sizeof(char) * 1500); なら、buf[N]
- 620 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:52:38 ]
- cout の多重定義??
- 621 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:55:54 ]
- <<のオーバーロードに違いない
- 622 名前:デフォルトの名無しさん mailto:sage [2008/02/24(日) 23:56:41 ]
- ostream& operator<<(ostream& ostr, const Hoge& hoge) {
ostr << hoge.str(); } みたいなやつか。
- 623 名前:デフォルトの名無しさん [2008/02/25(月) 00:07:21 ]
- stringは連続していますか? memcpyとかはできますか?
- 624 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:08:24 ]
- なんでstringにmemcpyしたがる人が多いんだろう。
- 625 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:09:43 ]
- stringにmemcpyはまずいんじゃね
- 626 名前:デフォルトの名無しさん [2008/02/25(月) 00:10:45 ]
- string s="9999999999";
strcpy( &s[5], "000"); は正しいですか
- 627 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:14:03 ]
- 詳しいことわすれたけど、s[i]で文字を取得できるならできるんじゃね?
やった後、stringオブジェクトは壊れるとおもうけど
- 628 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:15:06 ]
- この日本語不自由そうなとこが同一人物くさい
- 629 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:15:58 ]
- >>623
規格ではそんな保障はされていません。
- 630 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:17:13 ]
- >>627
あっ嘘、s[i]で取得できてもできないと思う 置き換えたいなら、replaceを使いなさい
- 631 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:17:23 ]
- >626
std::stringのことなら、正しくない。
- 632 名前:デフォルトの名無しさん [2008/02/25(月) 00:21:59 ]
- これが動くのですが、stringはchar*の拡張であることは保証されていませんか?だめな例はありますか
int main(){ string str="9999999999"; char *pointer=&str[5]; memcpy( pointer, "000", 3); str+=(string)"add"; cout<<str; return 0;}
- 633 名前:デフォルトの名無しさん [2008/02/25(月) 00:25:35 ]
- stringの制御情報はどこへ格納されていますか?
ユーザーは合法的でない方法を使ってもアクセスできませんか?
- 634 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:28:12 ]
- >632
必要のないポインタ操作はやめましょう。 動くか動かないかがプログラムの正しさの判定基準ではありません。
- 635 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:28:47 ]
- >>632
あるコンパイラのあるバージョンで動くとしても、規格で保証されていなければ、 他のコンパイラや同じコンパイラの別バージョンでは動かないかもしれない。 それでもいいなら、どうぞ? 今後ずっと同じコンパイラを使い続けて、決して変えないのなら、たぶん問題ないだろう
- 636 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 00:30:23 ]
- >>633
なんのためのクラスだと思う?
- 637 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:00:06 ]
- 例外の使い方について
エラーの通知にはエラーメッセージより例外を使う方がいいと聞いたのですが オリジナルな例外クラスを投げたり、charを投げまくる仕様にしていいのですか? 例外というと、これ以上の実行に支障が出るときに使うようなイメージがあるのですが実際の現場ではどうなのでしょうか?
- 638 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:01:51 ]
- 例外処理を主要処理に書くと遅くなったりしませんか?
- 639 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:14:59 ]
- コンパイラによって例外処理用のコードが追加されるから
パフォーマンスは落ちる。禁止オプションもあるくらいだからな。 特に組み込みでは。。。。。。
- 640 名前:デフォルトの名無しさん [2008/02/25(月) 01:17:11 ]
- クラスメンバー変数は、自動で0やNULLで初期化されますか?
- 641 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:20:04 ]
- >>637
好きなように使え。 ただ、エラーメッセージと例外では通知する相手が違うぞ。 エラーメッセージはエンドユーザ、例外はプログラマに通知するもんだ。 ユーザがいきなり「0x00d2345でlogic_error例外が発生しました」とか見せられても訳わからんだろ。 charも投げられるが、標準との整合を考えて投げるのはオリジナルも含めてstd::exception派生のクラスにしとけ。
- 642 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:21:41 ]
- >>640
static領域に配置したオブジェクトのメンバなら、コンストラクタで何もしていなければ0になります。 それ以外は不定です。
- 643 名前:デフォルトの名無しさん [2008/02/25(月) 01:29:37 ]
- static つけたらクラスが消滅しても値が残るんですか?
クラスが消滅したらアクセスできなくなると思いますが つけなくても自動でstaticになりますか
- 644 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:50:30 ]
- >>641
なるほど・・・ 戻り値でエラーを知らせたり、NULLを返したりという方法もあるのでどういう方法が主流なのかなと思ってまして 自分はたいていの場合 何が起こったのか確認して、何事もなかったかのように受け流してさいごにエラーログを確認する 位のデバッグライト的な使いか確かしてないのですが・・・
- 645 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 01:59:21 ]
- >>644
どれが主流というのは無い。場面によって適切な方法があるだけ。 ライブラリとか、設計思想によりエラーの返し方がある程度統一されてたりすることもあるけどね。 とにかく作ってみなさい。できたものを自分なりに分析して、ここはこうした方がよかったとか、省みることで成長するんだから。
- 646 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:09:23 ]
- >>643
残ります、というかクラスを複数生成しても全部同じstaticメンバ変数をさすんですよ? 三行目がいまいちなに言ってるのかわからんstaticつけないとstaticにはならないよ
- 647 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:12:48 ]
- まずインスタンスという言葉を覚えようや
- 648 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:13:09 ]
- >>643
>static つけたらクラスが消滅しても値が残るんですか? (クラスではなくインスタンスのことを言いたいのだと思うが…) staticで宣言した変数は、main関数の開始前から終了後まで存在する。 破棄されるのがmain関数終了後だから通常はそれへのアクセスが問題になることはないが、 staticの変数が異なるファイルで定義されて、一方のデストラクタからもう一方を参照するような 処理があるとまずい。 意味が分からないようなら気にしなくていい。 >つけなくても自動でstaticになりますか ならない。
- 649 名前:648 mailto:sage [2008/02/25(月) 02:14:21 ]
- ちょっと訂正
×staticの変数が ○2つのstaticの変数が
- 650 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:24:32 ]
- 質問があるのですが、
include " " include < > " ", < > の違いを教えて頂けませんか?
- 651 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:30:32 ]
- >>650
コンパイラのマニュアルか入門書を読みなさい。
- 652 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 02:47:52 ]
- >>650
www.google.co.jp/search?q=C%E8%A8%80%E8%AA%9E+include 上から順に読んでいけばそのうち解説してるサイトにたどり着く
- 653 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 07:25:36 ]
- >>632
std::string の内部バッファの連続性は次の規格で保証されるようになる。 おそらく現状全ての実装でそうなっていることが、その規格変更を実現したんだろう。 だから一応そう言うことをしても問題は無いはずだが、 メンバ関数でできることはメンバ関数でやった方がいい。 replace 使うといい。
- 654 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 09:45:12 ]
- 例外ねぇ、何も考えずにint型のエラーコードを投げちゃうなぁ
返り値でエラーコード返しちゃうと返り値の型が拘束されちゃうしメンドクサ 結局こういう使い方だと例外のありがたみを半分も得ていない気がする
- 655 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 10:00:21 ]
- 例外はstd::exceptionみたいな基本クラスを決めとかないと
ありがたみが半減する。
- 656 名前:デフォルトの名無しさん [2008/02/25(月) 11:44:36 ]
- ガベージコレクションは、標準のC++でつくれますか?ライブラリでは動作するのか不安です
自作したいです あと、整数変数は、初期化なしでアクセスしてもエラーは出ませんか?
- 657 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 11:46:47 ]
- 素人が自作した方が不安だと思うんだが
- 658 名前:デフォルトの名無しさん [2008/02/25(月) 12:00:29 ]
- これ動かすとクラス変数は値がほぼ一定ですが理由はなぜですか?
#include <iostream> using namespace std; class cl{public: int i; cl(){cout<<"class "<<i;} }; int main(){ int n, a[100]; for(n=0; n<100; n++){ cl *x=new cl; cout<<" arrey "<<a[n]<<"\n"; } getchar(); }
- 659 名前:デフォルトの名無しさん [2008/02/25(月) 12:09:11 ]
- 動的確保による違いでした たぶんヒープ領域は値があまり変化しないことが原因かも・・・
#include <iostream> using namespace std; class cl{public: int i; }; int main(){ int n, a[100] ; cl x[100]; for(n=0; n<10; n++){ cout<<"class="<<x[n].i<<" arrey="<<a[n]<<endl; } getchar(); }
- 660 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:12:41 ]
- >>656
整数変数を初期化しなくてもエラーは出ませんが、ローカルな場合に不定値なので初期化しましょう。
- 661 名前:デフォルトの名無しさん [2008/02/25(月) 12:37:27 ]
- 定数文字列は値渡しにして、動的な文字列は参照渡しにしたいのですが、これだとメモリリークしますよね
どうやれば直りますか? #include <iostream> using namespace std; class cl{ char *str; public: cl(char* const& x){ str=x; } template <size_t n> cl(char (&x)[n]) { str=new char[n]; strcpy(str,x);} }; main(){ cl str="rrrr"; str="oooo"; getchar(); }
- 662 名前:デフォルトの名無しさん [2008/02/25(月) 12:42:21 ]
- 値渡しされているかフラグを作って、されていれば解放する様にすればいいのですが、
初期化前にコンストラクタで代入されてしまうとフラグが確認できません
- 663 名前:デフォルトの名無しさん [2008/02/25(月) 12:47:11 ]
- >>661は間違えました 定数式が期待する方へ行っていませんでした それもどうやれば直りますか
- 664 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 12:56:55 ]
- >>661
やりたいことがよくわからん。せめて、コンパイルできるソース(の断片)を貼ってくれ。
- 665 名前:デフォルトの名無しさん [2008/02/25(月) 13:00:43 ]
- まとめるとテンプレート関数で、
定数文字列" "と 固定文字列char [n]と 可変文字列char *を 区別して、上の二つならメモリを確保して値渡しにしたいんです 値を書き換えたいため
- 666 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 13:01:40 ]
- 最近ずっとこいつ出没してるな
- 667 名前:デフォルトの名無しさん [2008/02/25(月) 13:02:01 ]
- それと、新たにメモリを確保するときに、以前確保したメモリを解放してメモリリークしないようにしたいです
- 668 名前:デフォルトの名無しさん mailto:sage [2008/02/25(月) 13:06:38 ]
- >>667
要は、const char *でコンストラクトするときはメモリを確保して、char *でコンストラクトするときは確保しなければ委員でね? それと、書き換えのときはconst char *でもchar *でも以前の状態に応じて解放しないといけないんでね?
|

|