1 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 00:25:51 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.63【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1231499251/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
445 名前:デフォルトの名無しさん [2009/03/21(土) 22:23:20 ] >>444 浦賀湾のあたり? 解決しました。 出力ファイルのオブジェクトファイル名を変更すればできました。 ただ、両方のPrintInfo.cppに対して、オブジェクトファイル名を手動で指定 しないとだめなのが、分かりにくかった。 片方だけ手動で変更すればいいんじゃないか、、と思ったんですが。 ありがとうございました。
446 名前:デフォルトの名無しさん mailto:sage [2009/03/21(土) 22:33:42 ] >>444 テラナツカシス
447 名前:デフォルトの名無しさん [2009/03/22(日) 13:01:45 ] 昨日VSいれてみました。いきなり分りません。 System::Object^ の^ってなんですか
448 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:12:49 ] >>447 C++の入門書買ってくるか入門サイトを見て最低限の知識をつけろ
449 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:12:55 ] 検索すればわかることだと思うけれど、 www.google.com/search?hl=en&q=VC%2B%2B+%E3%82%AD%E3%83%A3%E3%83%AC%E3%83%83%E3%83%88&btnG=Search&lr=lang_ja の3番目
450 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:27:51 ] C++builderでTreeViewを使っているのですが、子を持つノードだけそのままの位置にして 他のノードのみをソートしたいのですが、alphasortだと全て並び変わってしまい うまくいきません。 何か良い方法があったら教えてください。
451 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 13:34:07 ] C++の入門書には載ってないだろうな。 C++/CLIの入門書嫁。
452 名前:デフォルトの名無しさん [2009/03/22(日) 13:54:28 ] CLIだったのか。どうりで。 ありがとね。
453 名前:デフォルトの名無しさん [2009/03/22(日) 15:29:42 ] int hoge(int n) { return n; } int hoge(const int n) { return n; } int hoge(int &n) { return n; } int hoge(const int &n) { return n; } だと、2番目だけコンパイルできないんですけど、どうしてなんでしょうか。 呼び出すときに、結局intを丸ごとコピーして引数に渡すので、呼び出し元では int であろうがconst int であろうが区別していないのでしょうか。
454 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 15:41:21 ] >>453 そう。関数引数の型としてはトップレベルの const は無視され、区別されない。 ただし定義においてはローカル変数への const と同様に働く。
455 名前:デフォルトの名無しさん [2009/03/22(日) 16:58:39 ] 暗号の本で一通りのアルゴリズムのようなものは理解したのですが、 Cに組み込むにはどうすればいいのでしょうか? アセンブリはやったことがないのですが、Cプログラムを逆アセンブルすると簡単にバレたりしませんか? たとえば全てのバイトにn加算するという暗号化を施す場合、 その加算するという処理、nという数値が逆アセンブルによって解ると思うのですが、 そうさせないために何か対策する必要はないのでしょうか?
456 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:04:17 ] アルゴリズムが判明して脆弱になるような暗号は、その時点で脆弱なのです。
457 名前:デフォルトの名無しさん [2009/03/22(日) 17:21:23 ] 例が悪かったですね。 AES等安全性の確立されたアルゴリズムを使うことを前提とします。 ある暗号化されたデータをプログラムで読み込み複合化する場合、プログラムコードに鍵を含める必要がありますよね。 その鍵は逆アセンブル等で簡単に解ったりしないんですか?
458 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 17:24:55 ] >>457 分かります AES暗号化を使っていることが分かるだけでも どこを調べればいいか分かってしまいます ある程度以上は諦めるしかないです
459 名前:デフォルトの名無しさん [2009/03/22(日) 18:09:08 ] MFCでアプリを作っているのですが、 動作確認のため、コンソールも起動しております。 _cprintf_sや_cscanf_s関数を使っているのですが、 _cscanf_s関数でバックスペースのキーを入力すると、 プログラムが無限ループで暴走してしまいます。 普通のscanf()関数のようにバックスペースで一つ前の文字を削除するには どうすればよいでしょうか?
460 名前:デフォルトの名無しさん [2009/03/22(日) 18:53:39 ] #include <iostream> int main(){return 0;} というプログラムなんですが、プロジェクトを新規作成するときに、 (1)最初から空のプロジェクト (2)Win32プロジェクトを選択して、空のプロジェクト という2つの方法でやると、(1)はコンパイルできるのですが、(2)だとコンパイルが 通らず、LNK2019というエラーになります。 この2つの方法って何が違うのでしょうか?
461 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 18:55:39 ] Win32プロジェクトはGUIプログラム用です
462 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 19:01:50 ] >>460 プロジェクトのプロパティをよく比較するとわかるが、いくつかの初期設定が異なっている。 そのエラーの元になっている違いはエントリポイントの違い。 Win32プロジェクトでは、main()の代わりにWinMain()という関数からプログラム開始する。 他にもコンソールが表示されるかとかプリプロセッサ定義とか諸々も違う。
463 名前:デフォルトの名無しさん [2009/03/22(日) 19:24:03 ] >>461-462 ありがとうです。 でもmainをWinMainに書き直しても駄目でした。 >他にもコンソールが表示されるかとかプリプロセッサ定義とか諸々も違う。 本当にほかにも色々違うんですね。
464 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:09:48 ] #include <windows.h> int WINAPI WinMain(HINSTANCE, HINSTANCE, LPSTR, int) {return 0} これが一応の最小プログラムね Windowsプログラミングでは初めて見る型がたくさん出てくるけど ほとんどtypedefしただけだから、惑わされずに命名規則と元の型を覚えるといいよ
465 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:15:12 ] >>464 何のためのtypedefだよ…
466 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 20:23:08 ] typedef元の型が変化しても書き直す必要をなくすため
467 名前:デフォルトの名無しさん [2009/03/22(日) 20:26:11 ] 個人的にはAPIENTRYの方が好きだなあ
468 名前:デフォルトの名無しさん mailto:sage [2009/03/22(日) 22:28:20 ] 可読性のためだろ
469 名前:デフォルトの名無しさん [2009/03/23(月) 00:16:56 ] memcpy.asmの mov [edi],al ;U - write second byte to destination でエラーが発生してしまいます。なぜでしょうか? 以下 プログラムです。 class ErrorDiffusion{ public: ErrorDiffusion(int campussize); ~ErrorDiffusion(); void Upperandlowerreversing(int width,int height,unsigned char *Grey); private: unsigned char *Output; }; //上下反転 void ErrorDiffusion::Upperandlowerreversing(int width,int height,unsigned char *Grey) { int i,flag=1; printf("上下反転\n"); for(i=0;i<height;i++) { //printf("memcpy mae\n"); memcpy(&OutPut[(height-flag)*width],&Grey[i*width],width); //printf("%d loop\n",i); flag++; } } //ここで関数を呼んでいます。 errordiffusion.Upperandlowerreversing(width,height,&Grey[0]);
470 名前:デフォルトの名無しさん [2009/03/23(月) 00:47:52 ] private: unsigned char *Output; にして、コンストラクタで、メモリを確保していて NULLにはなっていないのですが・・。privateへのアクセスは、普通に Outputでいいはずだとおもうのですが違うのかな?
471 名前:デフォルトの名無しさん [2009/03/23(月) 01:09:47 ] 自己解決しまsちあ
472 名前:デフォルトの名無しさん [2009/03/23(月) 09:55:51 ] ifstream ifs(filename, ifstream::binary); Windows環境で、Ifstreamの読みこみで、Ifstream::binaryを書かなかったら どうしてだめなのでしょうか?
473 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 10:16:20 ] テキストファイルの読み込みとか、書かなくてもいい場合があるじゃん。 Cの"r" "rb" と同じ関係。
474 名前:デフォルトの名無しさん [2009/03/23(月) 10:58:52 ] >>473 ありがとうです。テキストファイルの読み込みの場合は書かなくていいんですね。 ついでにあと1個質問させてください。 Ifstream.seekg()で、 Ifstream.seekg(0,ifstream::end) Ifstream.seekg(ifstream::end) はどうちがいますか?どっちもコンパイルできるし、意味も同じっぽいんですけど、、、
475 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 11:02:37 ] >>474 省略時はどの値を渡したのと同じってのを意識するといい。
476 名前:デフォルトの名無しさん [2009/03/23(月) 11:36:04 ] >>475 なるほど。 省略時は0を渡したのと同じですね。
477 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 11:46:00 ] 念のため書くけど、省略時にどの値を採用するかはその関数を書いた人が決めるのよ。 さっきのIfstream::binaryも同じ
478 名前:デフォルトの名無しさん [2009/03/23(月) 12:35:15 ] >>477 本当ですね。 VC9++で試したら、ゼロじゃなかったです。 どういう値になっているのか調べられなかったけど、 ちゃんと読めてなかったです。
479 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 12:50:29 ] ああそうか、binary modeとcooked modeはCP/M、ひいてはMS-DOSの ためにC言語時代から受け継いでいる伝統だったな unix系は意識不要
480 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 14:42:51 ] おまえFTPとか知らないだろ
481 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 14:54:43 ] File Transfer Proturk がどうかなさいましたか?
482 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:09:04 ] TDateTime now = Date(); String hiduke=DateTimeToStr(now); SaveDialog1->FileName=hiduke; 日付をFileNameのところに表示したいのですが、上記のようにやっても うまくいきません原因の分かる方教えてくださいー。
483 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 15:39:00 ] 482です 解決しました 2009/03/23の /がダメだったようです。
484 名前:デフォルトの名無しさん [2009/03/23(月) 22:00:05 ] free(array); すると、プログラムが止まってしまいます。 メモリは確保しているし、なぜfreeするとエラーになるかわからないです メモリのエラーはerrorno でチェックしろとかいてあったのですが どうやってチェックすればいいかサンプルコードをください
485 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:07:14 ] エスパーさんたのみます!
486 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:13:31 ] 間違えたアドレスを開放しようとしてる
487 名前:高橋 [2009/03/23(月) 22:15:23 ] >>485 情報がこれだけじゃ、いかに魔美くんでも無理だよ。
488 名前:Cの達人 mailto:sage [2009/03/23(月) 22:27:56 ] Cの達人と申します。 ネイティブCのことなら、お任せください。 by Cの達人
489 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:29:38 ] www.kouno.jp/home/c_faq/c7.html#19
490 名前:デフォルトの名無しさん [2009/03/23(月) 22:35:46 ] TCPで他のマシンから要求を受け付けるサーバーを書いてるのですが、過去の一定の時間内(例えば1時間)で処理した 要求の上限を設定(例えば100個まで)して、それ以上は処理しない(要求を受け付けるだけ)ようにしたいと思ってます。 そこで、受け付けた全要求の{受け付けた時間、処理が終わった時間}という構造体を作って、それをダブルリンク リストにつないで置くようにしました。新しい要求が来たらそのダブルリンクを回って、処理が終わってから1時間 たってないものの数をカウントして、処理する/しないを決めます。 ところがこれだと要求の数が増えると(10万件とか50万件とか)、どんどん重くなるのですが、何か良い方法はない でしょうか?こういう処理って結構色々な場面で使われると思うのですが。 よろしくお願いします。
491 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:38:48 ] 10万とかのオーダーになったら、DB 使うことを考えちゃうな。
492 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:43:43 ] >>490 deque を使ってみるといいよ 新しい要求がきたときに 1.一番古い [0] の時刻が1時間より前だったら pop_front で削除 2.1.で削除が行われた場合1.に戻る 3.deque のサイズが 100 未満であれば要求を受け付ける 4.deque に push_back で追加 最近同じような質問があった気がする
493 名前:デフォルトの名無しさん [2009/03/23(月) 22:50:42 ] >>491 DB使ったほうがいいですかね。 出来るだけ軽い処理で実装しろと言われてて、自分はCで実装してるのですが、、、 上限を過ぎた要求は拒否しちゃえばいいのかな、、。でも拒否された方にいつ リトライすればいいか教えるのも面倒だし。一応、受け付けた要求の数があまり 多くなりすぎた時には拒否できるようなオプションも付けようかとは思ってます。 リトライのタイミングは相手まかせです。 ありがとうございます。
494 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 22:56:09 ] C++には便利な仕組みがいっぱいあるよねー。
495 名前:デフォルトの名無しさん [2009/03/23(月) 22:57:02 ] >>492 ありがとうございます。 dequeも考えたのですが、処理中の要求がどういう順序で終わるかは決まってないので (重い要求の少し後に軽いのが来た場合、後から来た軽いのが先に処理が終わる可能性があります) dequeは使えないか、と思ったんですが、どうですか? >最近同じような質問があった気がする ありがとうございます。探してみます。
496 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:09:23 ] 処理中のものは一時的に別のmapとかに保存しておいて、処理が終了したらlistに積むとか
497 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:09:26 ] 処理の軽さがあらかじめわかるなら あの、あれ、なんていったっけ、常にソートされるコンテナ、 それ。
498 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:21:09 ] 時刻をキーにしてstd::set使えばよさげだね 重さ?シラネ
499 名前:デフォルトの名無しさん [2009/03/23(月) 23:35:58 ] どうも自分の環境だと、30万件を越えたあたりからマシンが応答なくなります。 30万件のダブルリンクを、全然内容に変化がないのに1秒とかの間に何度も何度も 回ってて、何度も何度も処理後1時間以内のエントリの数を数えてます。 この処理を減らせれば、もっといけそうな気がする。 メモリ消費自体は、構造体が16バイトなので、100万件でも16MBとかの消費のはず なんですがね、、、
500 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:41:11 ] それは「新しい要求が1秒とかの間に何度も何度も」来てるからじゃろ? そして「受け付けた全要求」、つまりここでは30万件を 要求が来るたびに「回って、処理が終わってから1時間たってないものの数をカウントして」る からじゃろ? 仕様どおりじゃないのかな?
501 名前:デフォルトの名無しさん [2009/03/23(月) 23:48:29 ] >>500 そうですね。 負荷テストやっとこうと思って、別プロセスからガンガン要求なげてみたんです。 1秒間に10000件とかです。負荷が高いときは要求を拒否しますといったほうがいいんですかね。 そうなると、要求を出す側のプログラムも変更しなくちゃいけないのがいやなんですけどね。。
502 名前:デフォルトの名無しさん [2009/03/23(月) 23:52:40 ] >>497-498 ありがとうございます。 でもC++は手元のコンパイラが対応してなくてですね、、強く要求すれば購入してもらえるかも しれないんですが、なんとかCでやりたいと思ってます。 自分でstd::setとかコンテナとか実装すればいいのかもしれないですが、 常にソートされるコンテナって重そうな感じがするし、、、、
503 名前:デフォルトの名無しさん mailto:sage [2009/03/23(月) 23:53:31 ] 全体的に仕様がおかしい気がするけど そういう仕様なら仕方ないのであきらめましょう。 プログラマは仕様について意見することはできても 仕様を変える力はありません。しようがないのです。なんちて・・・ コマネチ!
504 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:08:07 ] >>501 それは仕事でやってるの?
505 名前:デフォルトの名無しさん [2009/03/24(火) 00:11:58 ] >>501 そうです。でも売り物じゃなくて、社内のデータ管理ソフト用の処理を書かされてます。
506 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:22:25 ] すげー社内システムだな。
507 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:27:16 ] >>492 の方法なら一番軽いと思うんだけどな。処理が終了してからlistとかdequeに積めばいいだけだし。 全探索の力業を少しでも軽くしたいなら要求が来るたびに調べるんじゃなくて、少しの誤差を許容して 調べるのは一秒に1回までとすれば1/10000まで軽くなると思う。
508 名前:デフォルトの名無しさん [2009/03/24(火) 00:30:19 ] 結構大きな会社で、ストレージ管理ソフトも自社製のがあるんですが、 そういうのは管理できる人を手配するのが大変らしいです、、、
509 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:30:50 ] STLは偉大だなぁ。ちゃんと処理時間についても言及されてる。
510 名前:デフォルトの名無しさん [2009/03/24(火) 00:40:32 ] >>507 そうですね。 じゃあ、ダブルリンクには処理が終了してないものを入れておくことにして、終了したものは dequeで管理する、そしてダブルリンクの全探索は1秒に1回にしてやります。 過去1時間以内に処理した要求の数は、ダブルリンク上の処理中のものの数+deque上のもの。 これで実装してみます。 明日の朝までにできるかな。
511 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 00:41:40 ] STLは元々Adaに組み込もうと研究されてたようですね C++にtemplate機能が付け加えられたのに目を付けた Stephanov(だっけ)がC++に移植したのが初めだとか
512 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 07:02:35 ] template に関してだけど、オーバーロードにするか、templateを書くかといつも 使いどころに迷ってしまう、皆さんはどういう基準で使い分けていますか?
513 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 07:23:59 ] オーバーロードで済むならオーバーロード。 テンプレートが必要な時だけテンプレート。
514 名前:デフォルトの名無しさん [2009/03/24(火) 08:09:13 ] 時間がないとき以外は全部テンプレート。自分が成長するため。
515 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 08:30:05 ] 演算子のオーバーロードについて質問があります。STLのIteratorみたいに、 List<int> *list = new List<int>(); llist.push_back(1); llist.push_back(2); for(Iterator* iter = (ListIterator<int>*)list->iterator(); iter->hasNext(); iter++){ printf("%d ", (*iter)); } このような書き方ができるようにソースコードを書きたいのですがうまくいきません。 以下が(全部載せるには少し長いので)自分のソースの抜粋です。 class Iterator{ public: //省略 virtual bool hasNext() = 0; virtual Iterator<Type> &next() = 0; virtual Iterator<Type> &operator++() = 0; virtual Type& operator*() = 0; }; template <class Type> class ListIterator : Iterator<Type>{ public: //省略 Iterator<Type>& operator++ (int dummy){ return next();: } Type& operator*(){ return value;//現在イテレータが指しているセルの内容 } } このように定義したものを上のように実行すると、4227856のような数字が連続して表示されてしまいます。また、for文のところで実行時エラーが出ます。 どう書き直せばよいでしょうか……。 (素直にSTL使えって話なんですがね……OTL)
516 名前:デフォルトの名無しさん [2009/03/24(火) 08:41:56 ] >>515 よく1回のカキコにおさめたな。
517 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 08:48:26 ] >>516 載せるところ選ぶのに苦労しました……。 重要そうなところだけ抜粋してます。 テンプレートクラスのListは自前で教科書読みながら基本的な機能は実装してみました。 こんなことしてるのは、単に興味とステップアップのためなんですが。 ちなみに学生ではありますが、ただの(へたれ)日曜?プログラマです。 サンプルコードまねるだけでろくなソフトも作れませんが……OTL (っとこんなことはどうでもいいですよね……)
518 名前:デフォルトの名無しさん [2009/03/24(火) 10:05:31 ] あるサイトを参考にして、下記のような半角全角変換関数を 作成したのですが、試しに適当にint型の変数を入れて 動かそうとすると下記のようなエラーが出ます。 参考サイトにあるものをほぼそのまま使用しており、 修正したところはcase文の中の変換する文字のみです。 参考サイトには、そのまま使用できるようなことが 書いてあったのですが、何が間違っているのか教えてください。
519 名前:デフォルトの名無しさん [2009/03/24(火) 10:06:52 ] int han2zen(char *str) { char *buf, *p, *ptr; buf=(char *)calloc(strlen(str)*2+1,sizeof(char)); for(ptr=str,p=buf; *ptr!='0\'; *ptr++){ switch((int)*ptr){ case '0': strcpy(p,"0");p+=2;break; case '1': strcpy(p,"1");p+=2;break; case '2': strcpy(p,"2");p+=2;break; case '3': strcpy(p,"3");p+=2;break; case '4': strcpy(p,"4");p+=2;break; case '5': strcpy(p,"5");p+=2;break; case '6': strcpy(p,"6");p+=2;break; case '7': strcpy(p,"7");p+=2;break; case '8': strcpy(p,"8");p+=2;break; case '9': strcpy(p,"9");p+=2;break; case default: *p=*ptr; p++; *p='\0'; break; } } strcpy(str,buf); free(buf); return(0);
520 名前:デフォルトの名無しさん [2009/03/24(火) 10:07:57 ] (1849) : error C2001: 定数が 2 行目に続いています。 (1849) : error C2015: 定数の文字数が多すぎます。 (1850) : error C2143: 構文エラー : ';' が 'switch' の前にありません。 (1850) : error C2143: 構文エラー : ')' が 'switch' の前にありません。 (1861) : error C2059: 構文エラー : 'default' (1868) : error C2040: 'strcpy' : 'int ()' は 'char *(char *,const char *)' と間接操作のレベルが異なります。 (1869) : error C2371: 'free' : 再定義されています。異なる基本型です。 C:\Program Files\Microsoft Visual Studio .NET 2003\Vc7\\include\malloc.h(123) : 'free' の宣言を確認してください。 (1871) : error C2059: 構文エラー : 'return' (1872) : error C2059: 構文エラー : '}'
521 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 10:10:37 ] >>515 printf("%d ", (**iter)); 正直混乱するのでiteratorで多態はやめた方がいいんじゃない? Listの実装でListIteratorを返すようにして for(ListIterator iter = list->iterator(); iter->hasNext(); iter++){ printf("%d ", (*iter)); }
522 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 11:12:35 ] >>519 '0\' '\0' case default: default;
523 名前:515 mailto:sage [2009/03/24(火) 12:20:00 ] >>521 レスありがとうございます。 >printf("%d ", (**iter) なんでうまくいかないんだろうと4時間くらい混乱してました。 List::iterator()でnewしてポインタを返す仕様でした……(もちろん管理してdeleteもする)。 とりあえず一つ前のソースコードは(**iter)で動きました! どうもです。 ポインタ渡してるんだから*が一個多く必要なのは当然。初歩的なミスだったとは恥ずかしい。 初めて演算子のオーバーロードなんてやるからそれが間違ってるのかと思い込んでました。 List::iterator()は、 ListIterator<Type> iterator(){ return ListIterator<Type>(this); } 現在のソースコードはポインタじゃなくてこんな感じにしてみました。 >多態はやめたほうが…… Iteratorクラスを作って継承するのはやめる方向で書き直してみます。どうせ自分しか使わないですし。 アドバイスありがとうございました。 スレ汚し失礼しました。
524 名前:デフォルトの名無しさん [2009/03/24(火) 13:59:10 ] 518,519,520です。 ありがとうございます。 おかげで動くようにはなったのですが、 期待する値を得ることができません。 下記のような値が返ってきてしまいます。 何がいけないんでしょうか? INPUT OUTPUT HAN2ZEN("9") NULL HAN2ZEN("99") 結果なし HAN2ZEN("999") 9 HAN2ZEN("9999") 結果なし HAN2ZEN("99999") 9 HAN2ZEN("999999") 99 HAN2ZEN("9999999") 999 HAN2ZEN("99999999") 99 HAN2ZEN("999999999") 999 HAN2ZEN("9999999999") 9999
525 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 14:24:58 ] >>524 int main() { char s[100]; for (int i = 1; i <= 10; i++) { s[0] = '\0'; for (int j = 0; j < i; j++) { strcat(s, "9"); } printf("HAN2ZEN(\"%s\")", s); han2zen(s); printf("%s\n", s); } return 0; } これでちゃんと出たけどな?
526 名前:デフォルトの名無しさん [2009/03/24(火) 14:43:54 ] ありがとうございました。han2zen関数の使用方法を間違って、 例えばprintf("%s\n", han2zen(s));のように使用していたため 変な値が返ってきていただけでした。助かりました。
527 名前:デフォルトの名無しさん [2009/03/24(火) 16:19:10 ] VS2005を使っているのですが、iostreamをインクルードすると error C2913:明示的な特殊化; 'std:iterator_traits'はクラス テンプレートの特殊化ではありません。 をはじめ100以上のエラーがでます。 xutilityというファイルが原因のようですが、特に書き換え等行っていません。 プログラムは別のPC(同じOS、同じVS)に移すとエラーを吐きません。 アドバイスを御願いします。
528 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 16:37:17 ] VSを入れ直す
529 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 17:06:31 ] ところで、 C言語のスレッド関係の関数をC++のクラスでとりあえずラップ・カプセル化っぽくした簡単な自作ソースコードがあるんですけど、 需要ありますか? 機能はかなり限定されてますけど、Windows(ほぼWin32 APIのみのVC++)用、確かLinux用(pthread。簡素です)と両方あります。 これ見られたら、ダメ出しをたくさんくらいそうだけど。
530 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:13:44 ] 需要ありますか?じゃなくて ダメ出しして欲しいんで見てくれませんか?だろ boost::threadがあるしな
531 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:16:28 ] >>530 だよな いらないよな
532 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:20:01 ] えー。マルチスレッドなprintfとか欲しいよ。 文字単位でスレッド分割して最終的に正しいストリームを形成するみたいな。 どう?
533 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:21:22 ] >>529 最近ねたが無いからうpれ
534 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 18:40:22 ] 土下座して頼むならうpってあげてもいいんですが。
535 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 19:05:54 ] >>530 ,531,533 それが本音で、ネタのためにも、うpしたかったと>>529 が申しております。 よかったら見てやってくださいとのこと。 多分、これだ。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8998.zip
536 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:31:51 ] >>535 このスレ見るものが、怪しげなzipファイルを踏むとは思えないんだけど
537 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:44:13 ] オレは踏んだ そしてどちらかの環境(Win,Linux)しか使わないなら必要ないと判断した
538 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 20:59:44 ] svg形式を解析・出力するようなオープンなライブラリないのかな なけりゃ自力で作るんだが・・・完全準拠って大変だな・・・ 改めてブラウザって大変なんだなって思うわ
539 名前:デフォルトの名無しさん mailto:sage [2009/03/24(火) 21:13:22 ] ないわけないやろが
540 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:34:19 ] >>538 オープンの意味による。 GPLならいっぱいあるが、Non-GPLでC/C++から使えるオープンソース実装は多分ないと思う。 ていうかあるなら俺に教えてくれ。 OpenVGもNon-GPLで非プロプライエタリな実装が見あたらないんだよ。 リファレンス実装をGPLで配布するとかマジやめて欲しい。
541 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 00:42:20 ] ハノイの塔を解くプログラムを書いたのですが、結果が正しいのかわかりません。 どなたか検証していただけないでしょうか? ↓ソース kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/8999.c ちなみに、円盤の個数が5までなら正しいのを確認してます。
542 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:14:36 ] 5個まで正しいなら、6個目も正しいのは簡単にわかるよ。 なぜなら、6個目の解法は 5個目までの解法+一番下を動かす+5個目までの解法(ただし最初とは使う柱が違う) だから。 ちなみに7個目の解法は 6個目までの解法+一番下を動かす+6個目までの解法(ただし最初とは使う柱が違う) 以下同様。ハノイは簡単。
543 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 01:19:59 ] >>541 危なっかしい警告が出てるので、まず潰したほうがいい。 結果はこれと比べとき。 #include <stdio.h> int Solve(int num, int step, int from, int to, int tmp) { if (num) { step = Solve(num-1, step, from, tmp, to); printf("%d 手目: %d -> %d\n", step++, from, to); step = Solve(num-1, step, tmp, to, from); } return step; } int main(void) { int num; printf("円盤の個数を入力して下さい: "); scanf("%d", &num); Solve(num, 1, 0, 2, 1); return 0; }
544 名前:デフォルトの名無しさん [2009/03/25(水) 08:23:34 ] for (list<int>::iterator i = lists.begin(); i != lists.end(); ++i) { if (iが何かの条件を満たしているとき) lists.erase(i); } とやれば、リストをたどって、条件を満たしている要素全部を消していくことができますか?
545 名前:デフォルトの名無しさん mailto:sage [2009/03/25(水) 08:46:11 ] remove_if