1 名前:デフォルトの名無しさん mailto:sage [2009/05/14(木) 20:35:36 ] スレを勃てるまでもない低俗なC/C++の質問はここでお願いします。 過去ログ スレを勃てるまでもないC/C++の質問はここで pc11.2ch.net/test/read.cgi/tech/1167476845/ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/ スレを勃てるまでもないC/C++の質問はここで 3 pc11.2ch.net/test/read.cgi/tech/1187521676/ スレを勃てるまでもないC/C++の質問はここで 4 pc11.2ch.net/test/read.cgi/tech/1221633708/ スレを勃てるまでもないC/C++の質問はここで 5 pc11.2ch.net/test/read.cgi/tech/1230516307/ スレを勃てるまでもないC/C++の質問はここで 6 pc11.2ch.net/test/read.cgi/tech/1231564903/ スレを勃てるまでもないC/C++の質問はここで 7 pc11.2ch.net/test/read.cgi/tech/1232983248/ スレを勃てるまでもないC/C++の質問はここで 8 pc12.2ch.net/test/read.cgi/tech/1235921779/ スレを勃てるまでもないC/C++の質問はここで 9 pc12.2ch.net/test/read.cgi/tech/1240022781/
755 名前:デフォルトの名無しさん [2009/06/08(月) 13:03:26 ] コンストラクタの引数の値によって、データメンバの型を変える方法ってありますか?
756 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:24:48 ] >>749 女子供は股開いてればいいんだよ
757 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:34:28 ] 子供もかよ……
758 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:49:24 ] ぼくおとこのこだよ…
759 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 13:58:54 ] >>755 同じ親クラスから継承した子クラスという条件内であれば可能。 もしくは、void*で持たせれば、多分なんでもおkだけど。
760 名前:750 mailto:sage [2009/06/08(月) 16:12:44 ] >>752 そうとも言えるな。 なら俺方式で言うなら クラステンプレート=[タイヤキやら今川焼きやらを作るための金属の鋳型を作るためのナニモノか] クラス=[タイヤキを作るための金属の鋳型] インスタンス=[食べられるタイヤキ] とでも言えばいいかな。
761 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 16:55:30 ] 喩えなら何とでも言えるわ。
762 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:42:54 ] 名前空間について質問です。 名前空間 foo と、それとは別に名前空間 bar::foo があるとします。 このとき、bar の内側から、bar::fooでは無い方の foo を指定するにはどうしたら良いのでしょうか。 なお、環境はWinXP、C++、VisualStudio2005です。
763 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 17:46:20 ] ::foo
764 名前:762 mailto:sage [2009/06/08(月) 17:53:04 ] すみません、2つ質問するつもりで書いてませんでした。 あるクラス内に、別クラスをメンバ変数として取り込む時、 その別クラスが書かれたヘッダファイルをインクルードするのではなく、 先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね? さて、その別クラスの名前が、名前空間 bar の下にあるとき、 namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか? >>763 ありがとうございます。 なんで思いつかなかったんだろう、自分。
765 名前:デフォルトの名無しさん [2009/06/08(月) 18:40:27 ] 便乗質問、テンプレートクラスを持たせる時って同じ方法使えるん?
766 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:48:37 ] 使えるん
767 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:51:59 ] >>764 あなたのいうクラスに名前が付いていないので 説明の便宜上 あるクラス=MyClass, 別クラス=fooとします。 まずは本題からちょっとそれた話から。 > その別クラスが書かれたヘッダファイルをインクルードするのではなく、 > 先に class foo; とだけ書いておき、コンパイラに別クラスの存在を知らせることってありますよね? あります。 しかし > あるクラス内に、別クラスをメンバ変数として取り込む時、 この場合は前方宣言Forward declarationだけでは足りません。 というのも、 class MyClass {int m_num;std::string m_str;foo m_var;} のようにメンバ変数としてfoo型変数を使いたい場合、 fooが不完全型なのでそのサイズがわからず、したがって MyClassのために確保すべき領域のサイズもコンパイラには分からないことになるからです。 前方宣言で足りるのはfoo型メンバ変数ではなく foo型への参照型メンバ変数やfoo型へのポインタ型メンバ変数、 あるいはメンバ関数の戻り値としてfoo型を使用する場合などです。
768 名前:デフォルトの名無しさん [2009/06/08(月) 18:54:54 ] ユーザが入力した数式を処理するプログラムを考えているのですが cin>>eq; #define function(x) (eq) cout<<function(1); みたいなことができませんんか?もしくは別の方法があったら教えてください
769 名前:767 mailto:sage [2009/06/08(月) 18:54:56 ] あとはまあ 前方宣言で足りるのは メンバ関数の引数の型としてfoo型を使用する場合 や typedefとかかな。 > さて、その別クラスの名前が、名前空間 bar の下にあるとき、 > namespace bar { class foo; }; と記述していたんですが、一般的にこの書き方で良いのでしょうか? それでいいと思いますが。 class bar::foo;とか書いても無理ですし、それ以外記述できないですよねぇ? もし有識者がいらしたらそっちを信用してください。
770 名前:767 mailto:sage [2009/06/08(月) 18:56:45 ] >>768 意味不明ですが、どういうことですか? プリプロセッサにより cin>>eq; cout<<((eq));//xは無視される として処理されるだけですが。。。
771 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:01:07 ] >>770 768に書いたのはあくまでイメージです。言葉足らずですみません 私がしたいことは引数にある文字列を数式として扱いたいのです もしくはcinで入力した式をプログラムで処理したいのですが
772 名前:デフォルトの名無しさん [2009/06/08(月) 19:02:27 ] ほんとは言語の問題じゃないかもしれないけど教えてください @double配列と、Aメンバがdoubleいっこだけの構造体の配列を読み上げる速度を比較するための コードを書いて実行してみたらAのほうが速かったです 環境はItanium、CentOS、GCC(C++)です これはなぜなんでしょうか?
773 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:04:08 ] そうなったから
774 名前:767 mailto:sage [2009/06/08(月) 19:04:19 ] >>771 言いたいことは分かりました。 C++の知識はどのくらいありますか? STLやBoost C++はご存じですか? C言語じゃなくてちゃんとC++らしいコードが書けますか?
775 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:05:31 ] >>772 不思議だわ。 ・・・最適化とかレジスタの割り付けとか、もう不確定要素に押されて結果が揺らいでるだけじゃないか? つまりどっちで書いても大差ないから好きな方で記述すればよか。
776 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:08:39 ] >>774 c++は初めて3か月くらいですが、STLはつかったものがあるので 簡単なものなら大丈夫だと思います。
777 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:09:25 ] >>775 計算時間半分くらいでした ちなみにこれに気づいたのは構造体メンバのアライメントに関する実験中でした コンパイラが賢くなりすぎてマニアックな知識も必要ない時代になったんですかねえ・・・
778 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:11 ] 普通のポインタがインスタンスを持ってるかどうか判別する方法はありますか? 現状ではポインタのゼロ初期化とdelete・0代入を徹底するぐらいしか手段が思いつきません
779 名前:767 mailto:sage [2009/06/08(月) 19:11:28 ] >>776 せっかくSTLの知識の有無を聞いたのですが、STLつかった実例が見つかりませんでした。 とりあえず適当なリンクを張っておきます。 以下の中で、上に挙げられている物の方が より優れていると思ってください。 letsboost::spirit ttp://www.kmonos.net/alang/boost/classes/spirit.html 数式解釈プログラム - uPage ttp://www-as.dse.ibaraki.ac.jp/umezu/?%E6%95%B0%E5%BC%8F%E8%A7%A3%E9%87%88%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%A0 七行プログラミング ttp://cm.xrea.cc/thread/program_001.html LISPですが 記号数式処理 ttp://www-antenna.ee.titech.ac.jp/~hira/hobby/symbolic/index.html
780 名前:767 mailto:sage [2009/06/08(月) 19:13:06 ] 追記。 >>776 Spiritで数式を解釈させるなら boost::spiritっちゃえ! ttp://tamachan.club.kyutech.ac.jp/%7Egridbug/spirit/ C++ Labyrinth ttp://www.fides.dti.ne.jp/~oka-t/cpplab-boost-spirit.html Spirit v1.6 ttp://boost.cppll.jp/BDTJ_1_30/libs/spirit/ これらが有名で質も高いと評判です。
781 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:14:34 ] >>768 これでイメージが湧いたらそいつは一流のエスパーだwwwww
782 名前:767 mailto:sage [2009/06/08(月) 19:17:06 ] >>778 >普通のポインタがインスタンスを持ってるかどうか 有効な領域を指し示しているかどうかとおっしゃりたいものと推測・解釈します。 結論から言えば、 普通のポインタでしたら、そんな方法はありません。 指し示す領域が有効かどうかなぞわかり得ません。
783 名前:768 mailto:sage [2009/06/08(月) 19:22:56 ] >>782 いろいろ情報ありがとうございます。
784 名前:764 mailto:sage [2009/06/08(月) 19:45:30 ] >>767 >>769 ありがとうございます >宣言 やっぱ namespace bar { class foo; }; って書くしか無さそうですね。 階層が深いとちょっと面倒かな?と思っただけなので、特に問題はありません。 >メンバ変数 確かに、メンバ変数を直接弄ろうとすると前方宣言だけじゃダメですよね。 まあ、素直にアクセサ付けれ、って話ですが。 >>765 確かに、 std::string とかは上記の方法じゃ出来ないですね。
785 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:11:52 ] C++の関数で文字列を参照渡しする方法がわかりませ ん &stringだと弾かれたし
786 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:16:09 ] >>785 参照の記述を勉強してください。 クラス名& ref=参照先; で記述します。
787 名前:785 mailto:sage [2009/06/08(月) 20:23:15 ] 参照の書き方って&nと違うの?
788 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:31:10 ] >>787 まずは日本語から覚えた方がよさそうだな
789 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:33:46 ] char &string; って書いてるんだったりして。
790 名前:786 mailto:sage [2009/06/08(月) 20:36:41 ] もう らちがあかないので ソースみせるか、 参照の記述を勉強し直すか、 名前空間を記述するか せめて少なくとも1つはやってみせてください。 なんかアドレスとごっちゃになってそうな予感もしますね。
791 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:39:25 ] int func(const char *string)
792 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 20:40:24 ] 途中送信。>791を参照渡しにする
793 名前:786 mailto:sage [2009/06/08(月) 21:04:14 ] >>791 それだけエスパーを強制しすぎです。 適当に答えるなら //before int func(const char *string); const char * const p="mojiretsu"; func(p); がアドレス渡し(ポインタ渡し)で、 //after int func(const std::stirng &string); std::string str="mojiretsu"; int func(str); が参照渡しです。 せめて前後関係の分かるソースを見せてください。 答える側が書いたソースの方が長いっておかしいです。
794 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:16:08 ] foo *p = new foo[bar]; delete p; がまずいのはわかるんだけど foo *q = new foo; delete [] q; ってーのはべつにやばくない・・・よね?
795 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:16:58 ] やばいよ。何が起きても知らないよ。
796 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:17:12 ] std::stringで書き変えるのは要求を満たしてない気がするなあ。
797 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:19:34 ] >>794 配列をnewしたときは、その配列のサイズなんかも保持しておくので 配列じゃないのにdelete[]だと、関係ない部分にアクセスする危険性がある……と教わったが、正確には違うかも。
798 名前:786 mailto:sage [2009/06/08(月) 21:21:37 ] >>796 彼は >C++の関数で文字列を参照渡しする方法 と言っています。 別にconst char*型変数を参照渡ししてもいいんですが、 もうエスパーするしかないからわかりませんよ。
799 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:23:02 ] >>794 だめな理由は処理系によりいろいろあるだろうけど、そんなの関係ない。 「仕様上認められていない」ってだけで 十分に鼻から悪魔が出てくると結論づけられます。
800 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:26:52 ] C++はめんどくさいな
801 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:36:37 ] >>800 なにを今更w
802 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 21:50:39 ] C++に限らず、多種多様の実装が存在する言語は多かれ少なかれそういう傾向にあると思う。
803 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:34:58 ] doxygen = デュクシジェン
804 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:06:17 ] doxygen destroyer
805 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:19:56 ] >>804 pc11.2ch.net/test/read.cgi/gamedev/1238520070/692 692 :名前は開発中のものです。:2009/06/09(火) 00:57:34 ID:2fI/sHFo 何言ってんだ。プログラマにまともな精神持った奴がいた試しなんてねえよ。 第一プログラマと精神科なんてほとんどセットなのに今更それを語るとか情弱以下だろ。
806 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:31:40 ] C言語をやりたいんだけど Microsoftのc++ExpressEdition ってのでもできますか? #include <stdio.h> int main(void){ printf("aaaa"); return 0; } みたいなのもちゃんとできますか?
807 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:09:32 ] >>806 Microsoft Visual C++ 2008 Express Edition の事ですね。 可能です。 ですが、最初はコンソールの方が分かりやすいと思いますよ。 C/C++初心者なら bcc5.5.1+bcc developer がなかなかオススメ。 エラーメッセージが分かりやすいので。 複雑なテンプレート等、まともなC++をやりたくなったらその時初めて Microsoft Visual C++ 2008 Express Edition gcc3.x, gcc4.x などを試せば良いかと思います。
808 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:17:19 ] まあ鼻から悪魔が出ることは無いと断言できる
809 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:45:37 ] C/C++というよりLinuxの質問になってしまうのですが、 mq_sendとmq_receiveでメッセージキューのパラメータに 任意の構造体を渡すことはできますでしょうか? 関数仕様ではchar*のみのようですが。 メッセージキュー以外の方式で別プロセスに任意の型の 値を渡す代替案があればそれでも良いのですが。
810 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:10:40 ] mmapとかpipeとか プロセス間通信は、Linuxの方で聞いた方がいいかもね
811 名前:デフォルトの名無しさん [2009/06/09(火) 16:13:22 ] 使ったこと無いけど 文字列にシリアライズして渡すんじゃねーの そんな雰囲気のある関数っぽい
812 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:07:30 ] >>809 昔は, 任意のバイト列に対するポインタは char* を使っていた で, 関数使用はその名残だと思うんだわ # kernel 内部の caddr_t とかの絡みもあるとは思うが……… 構造体とか配列とかもバイト列として表現できるわけだから, キャストすれば何でも可
813 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:08:35 ] >>812 × 関数使用は 〇 関数仕様は
814 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:27:02 ] なるほど、ありがとうございます。 mmapとかの共有メモリがお手軽そうですね。 >>812 やはりできるんですね。やろうとしてsegvでちゃったん ですが、できるとわかればもうちょっと調べてみます。
815 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:29:28 ] vectorのmax_size()って中の人はどうやって計算してるの?
816 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:51:40 ] bad_alloc出した場合って普通何をするもんなのかな ・APIとかで開いた画像ファイルとかを閉じる ・そのメソッドで確保成功した分のメモリを開放する ・そのメソッド内での仕事が完了したらbad_allocを上に投げる ・再帰的に開放作業を繰り返して、一番上でプログラム終了 とかでいい?
817 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 18:01:25 ] >>815 gcc 4.1は単にsize_type(-1) / sizeof(value_type)を返してた。 VC2008は、上の値とアロケータの最大サイズと比較してちっさい方返してた。
818 名前:デフォルトの名無しさん [2009/06/09(火) 19:52:52 ] void Initialize(){ ここで配列を5本動的確保 } そしてこの関数で使いたいんですがどうすればいいですか? void calc(){ } calcは何度も呼び出すのでcalc内で動的確保するのは無駄だと思いました。
819 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:03:38 ] template <typename _T,int _Size> class hoge { private: std::vector<_T> _vec[5]; public: void Initialize(void) { for(int i=0;i<5;++i) _vec[i].reserve(_Size); } void calc(void) { 以下略 };
820 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:09:32 ] vectorとかのコンテナのサイズを変えるときはtry-catch(bad_alloc)したほうがいいの?
821 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:17:52 ] >>819 できればSTLなしで・・・
822 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:48:36 ] >>821 お前の質問に対する答えが>>819 なわけだが、STLがその答えの本質じゃないことぐらい判るだろ。 コードを一から書いて欲しいなら宿題スレ行ってこいよ。
823 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:17:14 ] 内容がC++からちょっとずれますがお願いします。 大学ではじめてのC++で勉強しているのですが、phpの初心者向けサイトで コードをみたところc++と似ていて驚きました。c++はphpにも応用が利くと聞いたのですが、 C++をどの程度できるようになればphpでも簡単なwebサービスをできるでしょうか?
824 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:32:03 ] C++をいくら極めてもwebサービスはできんじゃろ。 なんせ標準ライブラリにwebに関するものはまったくはいっとらんからな…。
825 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:33:51 ] >>821 STLなしでとか何言ってるの? まさかSTLない環境でやってるわけじゃなくて知識がないだけでしょ? ちょっとで良いから勉強しろよ。
826 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:34:11 ] >>814 Linux の実装はしらんが, Solaris とか *BSD とかの実装だと, mq_send で msq_ptr からサイズ分 kernel 内バッファにコピーして, mq_receive で該当領域を読み出し側にコピーする で, kernel は該当領域にアクセス可能か否かの test 程度は行っている ので, とんでもない引数を与えると EINVAL か何かが返るはず segv が発生するのは, mq_receive で, msq_ptr として与えた領域サイズより 大きな msg_len を与えてスタック書きつぶしたときくらいじゃ内かな?
827 名前:デフォルトの名無しさん [2009/06/09(火) 21:34:16 ] 文字処理が面倒だけど cgiで起動すれば出来るんじゃね。
828 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:36:02 ] 0から99までの乱数を表示するプログラムを作ったんですが、コンパイルしたらまた新たな乱数を表示するにはどうすれば良いのですか?
829 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:42:11 ] >>828 乱数系列切り替えればええんちゃうの?
830 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:44:31 ] 時刻でも乱数シードに使えばいい
831 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:46:56 ] >>828 乱数の生成方法によって違うけれど乱数の種を設定できる仕組みがあるはずだからそれで種を変更する。
832 名前:デフォルトの名無しさん [2009/06/09(火) 21:50:14 ] >>829-831 ありがとうございます。 すいません。 かなり初心者なので、出来れば、詳しくお願いします。 今main関数の中が cout<<rand()%100<<endl; だけなんですが、何かつけ加えますか?
833 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:54:17 ] >>832 そうゆう話なら取りあえず処理系の名前を書け
834 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:54:55 ] ↓以下乱数の質について
835 名前:デフォルトの名無しさん [2009/06/09(火) 21:56:53 ] 箱を開けたら猫
836 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 21:58:12 ] >>833 bcc32です。
837 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:06:15 ] メルセンヌツイスタでぐぐるといいよ
838 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:10:23 ] >>836 けっして誉められた手法ではないんだろうが おそらく sland(time(NULL)) とかやっとけば? >>834 が期待してるように 用途に応じて生成される乱数の品質とかアルゴリズムとかが問題になる 置くの深い部分だけどな
839 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:18:59 ] 標準の乱数は大きな素数を割ってるだけみたいな単純な実装なので それをそのまま使うとカルドセプトサーガみたいなことになるかもね♥
840 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:25:25 ] >>838 ありがとうございます。 やってみます。
841 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:31:08 ] >>837 ありがとうございます。 参考にしてみます。
842 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:33:38 ] どういたしまして
843 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 00:59:13 ] 質問したいのですが誰かいますか?
844 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:00:12 ] います
845 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:11:32 ] じゃあ質問させていただきます。 今、作っているプログラムはあるファイルから特定の部分の値を読み込み 値だけのバイナリファイルを書き出すプログラムを作っているのですが。 sstreamを使い、値を変数に格納したいのですがfloat型だと格納できるのですが、 int型だと格納されません。 どうしてか教えてください。 ソース: stringstream ss(f_buf); int test[16 * 3]; //ここがint型だと値が入らない for(int i = 0; i < (16 * 3); i++){ ss >> test[(i * 3)] >> w >> test[(i * 3) + 1] >> w >> test[(i * 3) + 2] >> w >> w; } データ: 0;1;2;, 1;2;3;, :
846 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:13:48 ] >>845 追記 stringstream ss(f_buf);の下に char w; //記号を飛ばすための変数
847 名前:デフォルトの名無しさん [2009/06/10(水) 01:19:14 ] どうしてでしょう?
848 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:20:34 ] わからん
849 名前:デフォルトの名無しさん [2009/06/10(水) 01:27:14 ] どなたか>>845 の理由が分かる人いますか?
850 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:29:17 ] たとえば古いgccはstringsteamの中身に挙動不審なバグがあるので、それが原因かもしれない。 今やってみたらとりあえずgcc 4.1とVC2008はどっちもちゃんと動いた。 #include <iostream> #include <sstream> using namespace std; int main(void) { int t[3]; char w; stringstream ss("1,2,3,,"); ss >> t[0] >> w >> t[1] >> w >> t[2] >> w >> w; cout << t[0] << " " << t[1] << " " << t[2] << endl; return 0; } 出力 1 2 3
851 名前:デフォルトの名無しさん [2009/06/10(水) 01:34:22 ] >>850 さん、ありがとうございます。 環境をかくの忘れてましたね… 環境はVC2005です。 >>850 さんのソースも試してみましたがやはりだめなようです… 変数を作った時の不定な値が入ったままでした。 2008でビルドしてみようかな…
852 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:06:43 ] あるディレクトリ下にあるファイルを読み取ってから削除するという処理をしているのですが、希にコピー途中のものを読み取ってしまい、 思ったような動作が出来ない場合があります。アクセスしようと(もしくはアクセス中の)ファイルが、コピー中であるか否かの判断は 一般的にどのような方法で実装するのでしょうか。
853 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:07:49 ] >>852 OSは?
854 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 10:09:47 ] >>853 Windows 2000/XP です。コピー元は同じPC上の時もあれば、ネットワークを介して他PCからの場合もあります。
855 名前:853 mailto:sage [2009/06/10(水) 10:19:57 ] 俺はUNIX屋なので、後は誰かに任せた。