1 名前:デフォルトの名無しさん [2010/03/05(金) 16:51:13 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.71【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1264774545/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm codepad.org/ (コンパイルもできるし出力結果も得られるのでお勧め) ◆ソースのインデントについて 半角空白やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。
431 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 22:05:51 ] 環境はwindowsXPSP3 VC++2008です const_castをうまく扱えません、助けてください まずMeCabという形態素解析エンジンのライブラリを使おうと思いました。 ttp://mecab.sourceforge.net/libmecab.html のC++ サンプルと言うものを使おうと思ったのですが、エラーが出ます ライブラリ自体は ttp://jaist.dl.sourceforge.net/project/mecab/mecab-win32/0.98/mecab-0.98.exe で解凍したMeCab\sdkの中にあります とりあえず #include <mecab.h> を #include "mecab.h" に直しました すると別のエラーがでまして 1>d:\mecab\main.cpp(30) : error C2440: '初期化中' : 'const MeCab::Node *' から 'MeCab::Node *' に変換できません。 1> 変換で修飾子が失われます。 1>d:\mecab\main.cpp(36) : error C2440: '=' : 'const MeCab::Node *' から 'MeCab::Node *' に変換できません。 とでまして、const_castと言うものを使えば解決出来そうな感じなのですが、使い方がよくわかりません どうすればいいんでしょうか 30行目は以下のようになっています。よろしくお願いします MeCab::Node* node = tagger->parseToNode(input);
432 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 23:07:53 ] >>429 open時
433 名前:デフォルトの名無しさん mailto:sage [2010/04/13(火) 23:18:46 ] >>431 そのドキュメントを信じるならMeCab::parseToNode()はMeCab::Node*を返すのでそんなエラーは出ない 場当たり的1 MeCab::Node const * node = tagger->parseToNode(input); 場当たり的2 MeCab::Node* node = const_cast<MeCab::Node*>(tagger->parseToNode(input)); もしかして: MeCab::Tagger *tagger = MeCab::createTagger (argc, argv); の行にconstをつけてしまっている または サンプルがそもそも間違っている
434 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 01:37:17 ] >>432 cin, coutは既にオープンされてると思うんですが オープンし直す方法があるんですか?
435 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 01:43:22 ] >>427 www.parashift.com/c++-faq-lite/input-output.html#faq-15.13
436 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 01:47:37 ] C++にfreopen()に相当する関数あったっけ?
437 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 02:31:33 ] >>435 ありがとうございます。処理系依存になっちゃうんですね。 Windowsだと_setmode()を使えばバイナリモードにできるみたいでした。
438 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 07:54:09 ] >>433 やっぱりエラーでてしまいます>< もう作者に聞いてみます。ありがとうございました! 1>main.obj : error LNK2019: 未解決の外部シンボル "__declspec(dllimport) char const * __cdecl MeCab::getTaggerError(void)" (__imp_?getTaggerError@MeCab@@YAPBDXZ) が関数 _main で参照されました。 1>main.obj : error LNK2019: 未解決の外部シンボル "__declspec(dllimport) class MeCab::Tagger * __cdecl MeCab::createTagger(int,char * *)" (__imp_?createTagger@MeCab@@YAPAVTagger@1@HPAPAD@Z) が関数 _main で参照されました。 1>D:\mecab\Debug\mecab.exe : fatal error LNK1120: 外部参照 2 が未解決です。
439 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 08:26:25 ] コンパイルエラーならともかく リンクエラーで聞かれても困っちゃうな
440 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 21:46:39 ] >>436 freopen
441 名前:431 mailto:sage [2010/04/14(水) 22:24:36 ] 挫折しますた・・またいつか会う日が来るかもしれません・・ なければ、さようなら
442 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:33:26 ] こうしてC/C++の奇怪仕様によって 一人の命が失われたのであった。
443 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 22:58:56 ] >>431 付属のexample.cppだとそのようなエラーは出なかった >>438 ライブラリを使うのは初めてか?力抜けよ
444 名前:デフォルトの名無しさん mailto:sage [2010/04/14(水) 23:13:25 ] ワロタ まぁ色々な言語を使って勉強してみ 後年思い出したときに使うと、あっけなく使えるもんさ 今必要なものだったら、その、なんだ。スマン。
445 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 12:10:08 ] 頭を変更・追加 #include "mecab.h" #pragma comment(lib, "libmecab.lib") でいけたぞ。もう死んだかな
446 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 21:51:07 ] IPhoneとかAndroidで使える無料のC++コンパイラってありますか?
447 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 22:22:33 ] Win7使ってるんですが VisualStudio2005って対応してますか? 学校でインストールできるんですが、2008より2005のほうが軽いよ!って言われて困ってます
448 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 22:42:31 ] >>447 どっちでもいいけど 教えてくれる人の環境に合わせるのが楽
449 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 22:57:54 ] >>447 2008作る時に2005に残ってた大量のバグ潰したらしいよ!と言い返してみよう
450 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 22:59:39 ] www.microsoft.com/downloads/details.aspx?FamilyId=90E2942D-3AD1-4873-A2EE-4ACC0AACE5B6&displaylang=ja でも2010に移行しようってときにあえて2005ってどうなの・・・
451 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:00:18 ] 2005はUACがうざい
452 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:33:11 ] 2008 ってひょっとして管理者権限なしでも大丈夫なの? デバッグ中にD&Dができなくて困ってた
453 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:53:23 ] それは必要よ
454 名前:デフォルトの名無しさん mailto:sage [2010/04/15(木) 23:54:38 ] ってか、開発マシンに対する管理者権限もらえてないの?
455 名前:447 mailto:sage [2010/04/15(木) 23:57:05 ] どっちでも大丈夫なんですね ありがとうございます 教えてくれる人?は特にいないです みんなでゲーム作ろう!ってなって、学校で配ってるのが2008と2005でした 斡旋機なので、全員同じスペックのWin7のノートPCをもってます こういう場合はどっちがおすすめですか? 新しいほうがいいのかな? 一応、どっちかに統一しないとコンパイルが通らなくなるといわれたので
456 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 00:06:50 ] 何の理由もなければ新しい方 tr1使えるしなー
457 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 00:11:43 ] MSDN AA なんだろうけどそれはライセンス違反になるんじゃないの
458 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 00:21:19 ] 学生に優しいと定評のあるマイクロソフト
459 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 07:12:27 ] 2008はオプション変更しないとブレークポイントに止まらないことがある
460 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 08:03:18 ] >>457 Expressかもよ。 配ってるってのはDVD媒体に焼いて配ってるのかもしれないし。 >>447 特にDirectXはバンバン古い開発環境を切り捨てるから、新しいのを入れといた方がいいと思うけど。
461 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 09:33:49 ] じゃあ、2008にしますありがとうございました くばってるというのは、インストールできる場所が大学の図書館にあってCDを借りてインストール 職員がプロダクトキーを打ち込んで CDを返却して帰るみたいな感じです
462 名前:デフォルトの名無しさん [2010/04/16(金) 11:40:39 ] そ、それはいいのか・・? EEなら大丈夫だと思うが・・
463 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 12:52:27 ] 悪い運用には見えないけどな。 ただ、太っ腹だなぁと思う。
464 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 15:43:05 ] ボリュームライセンスならいいんじゃね?
465 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 18:26:01 ] >>461 それ大丈夫なのかww
466 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 20:09:48 ] 職員がプロダクトキーを打ち込んで ってところが味噌だわな 胡瓜に附けて食べちゃう
467 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 22:40:51 ] アカデミーのライセンスなら安いから、斡旋のPCにライセンスも込みなんじゃねーか?
468 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 23:44:17 ] 結局詳細がわからないからなんとも言えないけど、 論文をコピーするのと同じ感覚で、ソフトもコピー してるんじゃないかと勘繰ってしまう…
469 名前:デフォルトの名無しさん mailto:sage [2010/04/16(金) 23:55:47 ] VSは1ユーザー複PCが認められているので 教材費として徴収済みなんじゃないのかな Linux&gccやEEでも十分だとは思うけど アカデミックなら安いし
470 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 00:08:24 ] 個人に対するライセンスを保有している状態なら 訳がわからない運用ということになるだろうけど・・・
471 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 00:28:00 ] >>470 生徒と職員の人数分のボリュームライセンスでOKなんじゃね? 生徒数と職員数さえ把握しておけば、卒業の時に消して貰う運用にして、 学校の全てのPCにインストールすることも、 生徒であることを確認するだけで、持ってきたPCにインストールもOKなのでは? まぁ、細かいライセンス条項を覚えてないから間違えてるかも知れんが…
472 名前:447 mailto:sage [2010/04/17(土) 07:58:37 ] なんかよくわからないこと言ってすいません…… 結局2005いれてSP1あてたら正常に動きました ちなみに、Officeも2003と2008?最新のやつ無料でいれられます 2005も2008もオフィスも全員分とってるのかな? なにはともあれ本当にありがとうございました
473 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 09:42:15 ] いいなぁ うちの学校は大学のPCじゃないとvs使わせてもらえないぜ
474 名前:デフォルトの名無しさん mailto:sage [2010/04/17(土) 10:35:43 ] 自分のPCで使えよ
475 名前:デフォルトの名無しさん [2010/04/18(日) 11:41:36 ] スレ違いならごめんなさい C言語で日本語が表示されるプログラムを作ったのですが、コマンドプロンプトでそのプログラムを実行しても日本語が表示されません(記号と変な文字のオンパレードになります)。どうやったら日本語で表示されるのでしょうか? ちなみに参考書の通りプログラムを書いているので、間違いというのは無いはずです
476 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 11:49:50 ] >>475 ソースコードを保存するときの文字コードをシフトJISにしてみるとか
477 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 12:02:51 ] .NETを使った記述もここでOKでしょうか?(ダメなら誘導してください) 2005 C++ WinXP SP3 Form1、Form2と作成し、Form2内部で実処理部分を関数で呼び出しています。 Form1からはForm2を呼び出せるのですが、実処理部分の関数からForm2を呼び出すことができません。 Form2^ ff = gcnew Form2(); としていますがこれがコンパイルエラーとなります。 (error C2065: 'Form2' : 定義されていない識別子です。) Form1からは同じ宣言で呼び出せるのですが・・・ 助言をお願いします。
478 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 12:11:19 ] >>477 #include "Form2.h"
479 名前:477 mailto:sage [2010/04/18(日) 12:24:15 ] >>478 includeはしています。 (確かにincludeの順番でエラーを吐いたりもするので関連しているようにも思います)
480 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 16:10:38 ] >>477 よう分からんけどForm2が定義されてる名前空間と 実装処理部の名前空間が違うんじゃない?
481 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 16:39:17 ] インクルードがループしてるんじゃないか
482 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 21:42:57 ] >>477 Form2を定義している名前空間をそのnewしてるトコで参照してない希ガス 或いは参照してるつもり->スペルミスとか
483 名前:デフォルトの名無しさん mailto:sage [2010/04/18(日) 22:16:43 ] Form1.hでForm2.hをインクルードして Form2.hでForm1.hをインクルードしているのでは?
484 名前:477 mailto:sage [2010/04/18(日) 22:33:07 ] >>480-483 ありがとうございます。 >>481 さんの助言をもとに色々と調べた結果、Form2と実処理の関数の間で循環参照が起きてしまっています。 (>>483 さんのおっしゃられているとおりです) 実処理の関数はForm2の実行ボタンを押したときに実行するようになっており、 その実処理の進捗をForm2内のLabelやProgressBarに表示したいのですが、 根本的に考え方が間違ってますかね? Form2内でLabelやProgressBarにアクセスする関数を宣言して、実処理関数の中で使いたいのですが・・・
485 名前:デフォルトの名無しさん mailto:sage [2010/04/20(火) 21:46:40 ] windows7のvisualstudio2008でgdi+をインクルードするとエラーの嵐なんですが、なんとかなりませんか?
486 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 09:59:27 ] >>485 VisualStudioスレへどうぞ。 >>484 C++/CLIスレへどうぞ。
487 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 19:52:22 ] 誘導するだけならこのスレ不要だな
488 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 19:56:06 ] そんなこと言ったらこの社会の大部分は不要になるぞ 適切にたらいまわしてくれる人も必要なんだよ
489 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 19:56:43 ] >>488 たらいまわしじゃねーよ
490 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 20:06:04 ] 誘導だよな。 何でC/C++スレで、関係ない言語の話やソフトウェアについて話をしたがってるんだっていう。 肉屋で野菜や包丁買おうとしてるのが普通に思えるんだろか。
491 名前:デフォルトの名無しさん mailto:sage [2010/04/22(木) 20:10:21 ] >>490 初心者歓迎、環境依存OKを謳っているスレでそれは言いすぎ 単に、より適切な回答がつきやすいスレに誘導したほうがお互い効率的だという だけの話
492 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 22:40:51 ] template<class T> struct identity { typedef T type; }; このメタ関数は何のために存在するんですか?
493 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:26:15 ] >>492 template<class T>cast(typename identity<T>::type v){ return v; } とか typedef boost::mpl::eval_if<is_const<T>, identity<const int>, identity<int> > iint; とか
494 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:31:17 ] 横槍レスだが >>493 相変わらずC++ TMPは難しすぎだろ
495 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:35:48 ] ・eval_ifに渡すラッパー ・変数宣言 ○int *p1, *p2; ×int* p1, p2; ○boost::mpl::identity<int*>::type p1, p2; ・メタ関数をつくるヘルパ(例:osteram等から同じ文字型とTraitsのbasic_stringをつくる、strメタ関数 template<typename Stream> struct str : public boost::mpl::identity< std::basic_string<typename Stream::char_type, typename Stream::traits_type> > { };
496 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:39:04 ] すまんtypo ×osteram ○ostream
497 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:48:41 ] なるほどぉthxですた、でも template<class T>cast(typename identity<T>::type v){ return v; } これがちょっとわからなかった
498 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:52:02 ] >>493 自分で書いておいてなかなかひどい template<class T> T cast(typename identity<T>::type v){ return v; }と typedef boost::mpl::eval_if<is_const<T>, identity<const int>, identity<int> >::type iint; だな 前者はTの型の推論ができなくなる(=明示的に型を指定してほしい関数に使える) template<class T>void f(T v); char c; f(cast<int>(c)); 的な
499 名前:デフォルトの名無しさん mailto:sage [2010/04/23(金) 23:52:26 ] >>495 なーーーるほど!! いやー、気がくるっとルなぁ
500 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 19:32:40 ] virtualメソッドに実行時コストがあるのは関数ポインタ経由してるから、とかるんですが virtual継承にも実行時コストがあるのはなぜ何ですか? コンパイル時に解決出来そうな気がするんですが
501 名前:477 mailto:sage [2010/04/25(日) 19:56:38 ] >>486 誘導ありがとうございます。 行って参ります。
502 名前:デフォルトの名無しさん mailto:sage [2010/04/25(日) 23:07:04 ] >>500 解決できそう? #include <iostream> #include <vector> class Animal { public: virtual void bark() { }; }; class Dog : public virtual Animal { public: virtual void bark() { std::cout << "bow wow" << std::endl; } }; class Cat : public virtual Dog { public: virtual void bark() { std::cout << "meaow" << std::endl; } }; int main() { std::vector<Animal*> animal; animal.push_back(new Dog()); animal.push_back(new Cat()); animal[0]->bark(); // Dog animal[1]->bark(); // Cat }
503 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 02:46:24 ] なにその猫こわい
504 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 03:57:09 ] 凡ミスがこんなに怖いとはw
505 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 05:32:17 ] ワロタ
506 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 05:56:15 ] 違うよ全然違うよ凡ミスじゃないよ犬だってネコにもタチにもなりうるんだよ じゃなくて、virtual継承が仮想継承のことを言っていると見せかけて 実は仮想関数のオーバーライドを指してるんじゃないかと思ったから 両方入れてみたんだよ
507 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 06:28:24 ] 我が輩は猫であるが犬でもある。名前はまだ無い。
508 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 07:50:34 ] >>502-503 の流れでワロタwwww >>506 それはわかったけど、クラス名のチョイスがじわじわ来た
509 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 09:32:24 ] 今は亡き加藤和彦が木村カエラをボーカルに呼んで再結成したサディスティックミカバンドの歌で、 「犬だってにゃぁ」とか「猫だってわん」とかって歌詞があるのを思い出した。
510 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 09:41:18 ] 今後クラスの継承の話する時このネタ使わせてもらうわw
511 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 14:55:14 ] class Animal { public: virtual void bark() = 0; };
512 名前:デフォルトの名無しさん [2010/04/26(月) 21:04:13 ] Waveファイルを読み込むプログラムを作ろうとしてますがうまくいきません。 大きいファイルを読もうとしてるので、バッファ領域を確保して、その領域にちまちま ファイルを読み込んでいこうという魂胆ですが、出力してみると全て0のままです。 小さいファイルなら読み込めるようですが、大きい(200MB以上)では読み込んでくれません。 アドバイスをください。 以下ソース ifs = fopen("C:\\TEST.wav","rb"); /*** ヘッダー読む ***/ int blockSize = waveHeader.getBlockAlign(); //ブロックサイズを得る //12000バイトのバッファを確保したつもり unsigned char *buffer = (unsigned char*)calloc(4000, blockSize); do { //12000バイト分のデータを読み込んだつもり readSize = fread( buffer , blockSize , 4000 , ifs ); for( int i = 0; i < readSize; ++i) { //読み込んだデータを出力してみても 0 のままで出力される cout << ((short*)buffer)[ i * 2] << ":" << ((short*)buffer)[ i * 2 + 1] << endl; } } while (readSize == 4000);
513 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:23:35 ] 素朴な疑問だが、waveHeader構造体のメンバはちゃんとした値が入っているのかね。 取り敢えず、blockSizeが幾つになっているのか確認するところからだな。 つーか、通常fread()は失敗しないからdo-whileは要らんだろ。
514 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:24:27 ] >>513 ファイル終端まで読み続けたいんじゃないかと
515 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 21:32:36 ] unsigned int blockSize = waveHeader.getBlockAlign();
516 名前:デフォルトの名無しさん [2010/04/26(月) 21:45:13 ] みなさんありがとうございます。 >>513 blockSizeは4が入ってます。 一応RIFF , fmt , dataなどの文字を確認してヘッダー読み込みOKとしてます。 >>515 変えても何も起こりませんでしたが、確かにマイナスが入るというのは考えにくいですね こうしておきました。
517 名前:512 mailto:sage [2010/04/26(月) 22:00:48 ] typedef struct _RIFF{ char riff[4]; int fileSize; char formatType[4]; }RIFF; typedef struct _FORMATCHUNK{ char id[4]; int idFormatSize; short int formatId; short int channel; int sampleRate; int bytePerSec; short blockAlign; short bitsWidth; }FORMATCHUNK; typedef struct _DATACHUNK { char id[4]; int size; }DATACHUNK; ちなみにwaveHeaderは各構造体を持っているだけで 主要な部分のみgetメソッドを作りました。読み込まれたか確認するのは>>516 の通りで ヘッダーの最後にあるDATACHUNK内のsizeを見ても正しいデータが入ってますので 構造体の値はOKかと
518 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 22:13:49 ] >>512 全て0ってのはどうやって確認してるのかな 出力の一部分だけ覗いてるならその部分がたまたま無音だったとか
519 名前:512 mailto:sage [2010/04/26(月) 22:25:12 ] >>518 そこはバイナリエディタで開いて確認しました。 最初の方は確かに0でしたが、一回目のfreadで全部読み込める程度しか なかったので、全部0になっていると判断しました。 あと、いい忘れていましたが、小さいファイルなら do whileを抜けてプログラムが終了しますが 大きいファイルは do whileを抜けてきません。
520 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 22:36:11 ] >>512 ソースうp!
521 名前:デフォルトの名無しさん mailto:sage [2010/04/26(月) 22:39:06 ] 4*4000=16000
522 名前:512 mailto:sage [2010/04/26(月) 22:49:34 ] すいません。少し出かける用事がありますので。 今日は一旦締めせていただきます。 みなさんお付き合いいただき。どうもありがとうございました。m( _ _ )m >>520 また後日お伺いする機会があれば 是非、よろしくお願いします。 >>521 その通りですね。恥ずかしいです。( /// )
523 名前:デフォルトの名無しさん [2010/04/28(水) 06:34:30 ] age
524 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 04:37:54 ] 2次元の座標を返す関数を作る予定です POINT GetPoints() 戻り値が座標の場合 関数が失敗したかどうか分からないので ・bool GetPoints( POINT &out ) 戻り値をboolで関数の成功判定、結果を入れる変数渡す ・POINT GetPoints() 失敗の場合(-1,-1)の座標を戻り値とする どちらの方がいいかな? 両方のパターンを見たことがあるので気になった
525 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 05:01:18 ] C++なら ・例外を投げる ・boost::optional<POINT>を返す
526 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 08:14:57 ] >>524 その用途で言えば -1,-1 の座標を返すのだけは無しだと思う 個人的には bool 戻す形だな。もしも関数の失敗が通常は起こらない純粋な失敗なら例外でもいいけど、 もしもそれが有効範囲/リージョン判定等でも利用される想定ならシンプルに bool戻す
527 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 08:18:01 ] (INT_MIN, INT_MIN)を返すようにしたことならある
528 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 08:27:42 ] POINT* GetPoints() にして NULL を返すのはあり?
529 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 08:28:57 ] 毎回newすんの? それはないわ
530 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 08:33:56 ] std::pair<bool, POINT> は?
531 名前:デフォルトの名無しさん mailto:sage [2010/04/29(木) 14:25:59 ] >>524 例外を投げろ。 C++なら例外と、例外安全くらいはどっちみち知らなきゃだめだから 勉強しよう。 。