1 名前:デフォルトの名無しさん mailto:sage [2007/08/06(月) 23:26:08 ] エスケープシーケンスやWin32APIなどの環境依存な物でもOK。 ただしその場合、質問者は必ず、環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.40【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1184717430/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
476 名前:デフォルトの名無しさん mailto:sage [2007/08/19(日) 23:51:50 ] もう見てないかな まるちか?2ちゃんではマルチポストは叩かれるですよ せめて、主とする、質問したスレを付記 機嫌が良ければ、そこにヒント書きますから
477 名前:デフォルトの名無しさん [2007/08/19(日) 23:56:08 ] 今更VC++6.0のMFCなんですけれど、 ツリーコントロールのアイテムの文字列が長いときに 横スクロールにせず、文字列を折り返すことってできますでしょうか?
478 名前:デフォルトの名無しさん [2007/08/20(月) 01:12:13 ] curses(ncurses)のプログラミングを euc-jp 環境で行って来たのですが、 訳あって utf-8 環境で行うことになりました。 euc-jp 環境で作ったファイルを utf-8 環境に持ってきて、 iconvで文字コードを変更し、コンパイル、実行すると、出力(日本語)が文字化けてしまいます。 utf-8 環境に持ってきた euc-jp のファイルを、 文字コードをそのままにして、端末の表示文字コードを utf-8 から euc-jp に変更した上で、コンパイル、実行すると、正しく表示されます。 これななぜでしょうか? curses が utf-8に対応していないとかってありますか?
479 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:14:08 ] >>478 ソース文字セットと実行文字セットは別。 gcc のオプション -finput-charset と -fexec-charset を参照すべし。
480 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:15:56 ] >>478 curses 関係あるのか? puts("あいうえお") とかで試せばわかると思うけど。
481 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:20:45 ] 先ずは問題の切り分けだね。 >480の言うように標準出力に出力してみてその時点で文字化けしているならgccのオプションなどを調節。 その上でcurses使うと化けるのなら、cursesの設定か何か、その辺りの調査。
482 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:36:08 ] operator=で返す自分の参照は、constつけるべきですか?
483 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:42:23 ] >>482 いいえ。
484 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 01:48:55 ] 寧ろつけてはいけません。
485 名前:デフォルトの名無しさん [2007/08/20(月) 02:10:18 ] >>447 どうもです XSIではコマンドを実行する際にエディタのIDのような物が必要で、 エディタウィンドウを複数開いている時には、コマンド実行前に その時アクティブなウィンドウのIDを取得する必要があります。 WM_ACTIVATEとかを使えば良いのでしょうか?
486 名前:デフォルトの名無しさん [2007/08/20(月) 02:24:33 ] 動画とかをエンコードするデコーダって色々ありますよね。 あれ使えるソフト作るのって大変なんでしょうか? AVIutlみたいなソフトって個人では簡単に作れないんですかね? どの辺勉強したらいいんでしょうか?
487 名前:デフォルトの名無しさん [2007/08/20(月) 02:27:35 ] >>478 です。 >>479 ,480,481 さんを参考にして少しいじってみました。 まず、480さんの言うように、単純に puts("あいうえお") を行うプログラムを書き実行してみました。 すると、”-finput-charset=utf-8 -fexec-charset=utf-8”が有る無しに関わらず、文字化けしませんでした。 次に、cursesのコンパイルを、”-finput-charset=utf-8 -fexec-charset=utf-8”を付けて実行してみたところ、やはり文字化けが発生しました。
488 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 02:43:20 ] 単にcursesがutf-8に対応して無いんじゃないの? utf-8だと端末上での漢字の幅がバイト長と単純に一致しなくなるし naiveな実装だと色々問題起きそう
489 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 03:30:44 ] VC++2005で<cstdio>等をインクルードすると、 std::printf はもちろん、名前空間のない ::printf も使えてしまいます。 BCB2006だと逆に、<stdio.h>をインクルードすると ::printf を使えますが、 std::printf も使えます。 どちらが正しいのでしょうか。また、正しくない方を正しくする方法はありますか?
490 名前:デフォルトの名無しさん [2007/08/20(月) 04:18:35 ] >>478 です。 www.hakodate-ct.ac.jp/~tokai/tokai/gtkmm/etc/p3.htm というサイトがあったので、 ・-lncurses ではなくて -lncursesw をリンクする ・#include <locale.h> ・setlocale( LC_ALL, "" ); を取り入れたところとりあえず、euc-jp 環境のファイルを utf-8 環境に持ってきて、 このファイルの文字コードを utf-8 に変えてコンパイルし実行すると、 文字化けしない ・・・というのは達成できました。 しかし、私は UNIX(LINUX) にあるような SLコマンド のクマAA バージョンを作って遊んでいたのですが、 euc-jp環境とutf-8環境では少し動きが変わってしまいました。 その動きの変わってしまう場所が、euc-jp環境で苦労して改良したところなので、 かなりショックです。 まぁ、なんとか解決策があればいいのですが、 私の知識ではちょっとつらいかも知れません。
491 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 07:47:38 ] for(;;) ; こんなのあるのね びっくり
492 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:25:05 ] 無限ループの常套手段
493 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:27:33 ] 俺はwhile(1)派
494 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:31:18 ] 自分も無限ループはwhile派かな カウンタが要るときはfor使うかもしらんけど
495 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 09:46:09 ] >>489 <cstdio> で std::printf が、 <stdio.h> で ::printf が使えるようになることになっている。 1つのヘッダで両方が使えるようになることは保証されない。
496 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 18:43:51 ] std::bad_allocを捕まえたりいろいろ例外処理を書いているのですが、 メモリ4GBもあるので、デバッグ中にbad_allocが投げられることは今まで一度もありません。 投げられた際の動作をデバッグしたいのですが、そういうときはどうすればいいでしょうか。 敢えてメモリを消費したりするんですか? ↑ではbad_allocのことですが、他にもWindowsのAPI関数が失敗したときとかも、 ちゃんと自分が書いた処理が動作するか確かめたいんですが。
497 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 19:07:29 ] throw std::bad_alloc();
498 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 19:37:17 ] >>496 適当にラップして失敗に相当する結果を返せばいいべ
499 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 20:47:05 ] 起動時に malloc(100000000) とか適当にやっとけば足りなくなるんじゃない?
500 名前:デフォルトの名無しさん [2007/08/20(月) 21:09:14 ] 例えば、"a"とか"あ"の文字コードを出力する方法ってありますか?
501 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 21:11:15 ] printf( "%d", 'a' );
502 名前:デフォルトの名無しさん [2007/08/20(月) 21:30:04 ] >>501 ありがとうございます。 このページ ash.jp/code/unitbl21.htm の、UTF-8の欄のような値を出力する方法ってありますか?
503 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:23:30 ] %Xでの表示をぐるぐるまわせばおわりだろうに。
504 名前:デフォルトの名無しさん mailto:sage [2007/08/20(月) 22:26:44 ] >495 www.open-std.org/jtc1/sc22/wg21/docs/lwg-defects.html#456 によると、 > Including the header <cxxx> declares a C name in namespace std. > Including the header <xxx.h> declares a C name in namespace std (effectively by including > <cxxx>), then imports it into the global namespace with an individual using declaration. ということで、xxx.h だと std とグローバル両方で宣言されるというのが規格の意図らしい。 なので、BCB2006 の挙動は(それだけ見ると)規格に合致している。 が、現実的には > If you want to assuredly declare a C name in the global namespace, include <xxx.h>. > You may or may not also get the declaration in namespace std. > If you want to assuredly declare a C name in namespace std, include <cxxx>. > You may or may not also get the declaration in the global namespace. ということで、>495 が妥当な仮定。 規格もこの現状を追認する形での修正が提案されている。 >502 自分がやりたいと思っていることをもうちょい正確に表現して欲しい。 文字が表示されて欲しいのか、文字コードが表示されて欲しいのかどっち? 入力として考えているのはどんなデータ?外部から与えられる文字列か、文字列リテラルか。文字コードは?
505 名前:504 mailto:sage [2007/08/20(月) 22:28:32 ] 最初のアンカーは >489 につけるべきだった。
506 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 02:01:29 ] 別人ですが >>499 バグでそんな値(もっとでかい、0x40000000とか)を与えたことがあるけど、 無理に仮想記憶拡大して確保しようとして、システムが実質操作不能になるだけだった
507 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 02:33:09 ] Windowsって1プロセスが使用できるメモリ空間のサイズって指定出来ないの? Win2000の頃は2G制限とかあった記憶があるけど、今はどうなんだろ。
508 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 03:06:41 ] >>507 以下は単なる思いつき。 1. プログラムの改造が可能なら、自分用の一定量しか領域確保できないメモリマネージャを作る。 2. メモリ取得APIをフックして自力で制限する。 3. SetProcessWorkingSetSizeを指定して、同時にスワップを小さくする。
509 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 05:28:56 ] たった1000行のソースも完全に把握できねぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇぇ もうだめだぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁぁ
510 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 05:38:16 ] やっと気付いたか。 さっさと人生やり直せ。
511 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:15:52 ] >>509 1関数1000行なら窓から投げ捨てろ
512 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 08:40:46 ] 10万行超えると見る気すら失せる
513 名前:デフォルトの名無しさん [2007/08/21(火) 09:28:25 ] float hoge = new float[100]; foo->CopyArray(hoge); Cfoo:Cfoo() { float m_array = new float[100]; } void Cfoo:CopyArray( float arg[]) { arg = m_array; } 配列のコピーをしたいとき、 上のように配列の名前(=先頭のポインタ?) だけコピーするだけではダメなようなのですが、なぜですか? for(int i=0;i<100;i++) arg[i]=m_array[i]; } のように中身を一つずつきちんとコピーしないとダメなんでしょうか?
514 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:37:17 ] arg = m_arrayだとコピーじゃなくて同じ配列に別名を付けてるだけになる
515 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:43:12 ] ::memcpy(arg, m_array, sizeof(float) * 100));
516 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 09:47:54 ] std::copy(&m_array[0], &m_array[100], &arg[0]);
517 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:12:35 ] >>513 >float hoge = new float[100]; コンパイルできるコードを提示しなさい。 >arg = m_array; それは、仮引き数にメンバ変数の値を代入しているだけなので、仮引き数の寿命とともに無に帰します。
518 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 11:13:18 ] >>515 そんなコードを書く香具師は野垂れ死に値すると思います。
519 名前:513 [2007/08/21(火) 11:55:54 ] 皆さんいろいろありがとうございます。 >>517 >コンパイルできるコードを提示しなさい。 float* hoge = new float[100]; でした。 >それは、仮引き数にメンバ変数の値を代入しているだけなので、仮引き数の寿命とともに無に帰します。 というわけで、分かっておられると思いますが渡してるのはポインタでして 寿命は関係あるんですかね? >>514 これもちょっと理屈が分かりません。 なぜ配列に別名をつけてることになるんですか? 配列の名前って先頭のポインタをさしてるんじゃなかったでしょうか? >>518 一行で済むのでforで要素を一つずつコピーするよりは>>515 >>516 はいいかなと思ったんですが、 どうして>>515 はダメなんですか?
520 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:04:44 ] >>519 >寿命は関係あるんですかね? その仮引き数の寿命は、その関数を抜けるまでです。 ポインタがポイントしている先のことは言及していませんね。 もう少し、ポインタ変数と言うものを理解しておいた方が良さそうです。 >なぜ配列に別名をつけてることになるんですか? ポインタ変数にポインタ変数の値を代入するだけでは、 ポイント先の複写は行なわれません。 もう少し、ポインタ変数(ry >どうして>>515 はダメなんですか? どうしてダメじゃないと思うんですか?
521 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:06:18 ] >>519 > どうして>>515 はダメなんですか? float配列ならば動くけど、一般のオブジェクトの配列なら破滅的。 たとえば、string配列をmemcpyしたらどうなると思う?
522 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:17:40 ] float で大丈夫ならダメとは言えないだろ。もっといい方法があるってだけで。
523 名前:デフォルトの名無しさん [2007/08/21(火) 12:24:46 ] >>520 >ポインタ変数にポインタ変数の値を代入するだけでは、 >ポイント先の複写は行なわれません。 いま気づきました。狂ってました。すいません。 要するに考え方として 「呼ぶ側で作った配列を渡してm_arrayの中身をコピーして貰ってくる」んじゃなくて 「ポインタを渡してm_arrayの先頭のアドレスだけ貰ってくる」っていうような 感じの書き方はできないんですかね? 呼ぶ側で、m_arrayの先頭のアドレスとサイズだけ分かれば 中身にアクセスできそうに思うのですが。 例えば、クラスメンバで持っているprivateな普通のオブジェクトインスタンスのポインタなんかの場合は わざわざ中身をコピーしないでアドレスだけGet〜とかで貰って使ったりするじゃないですか? >どうしてダメじゃないと思うんですか? 試したらとりあえずうまくいったんで・・・ >>521 わかりません。floatでは一応動きましたが、なんでダメなんでしょうか。 サイズ指定した範囲をコピーすればうまく動くと思うのですが。
524 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:29:27 ] >>523 > 「ポインタを渡してm_arrayの先頭のアドレスだけ貰ってくる」っていうような > 感じの書き方はできないんですかね? なんでできないと思うの?
525 名前:デフォルトの名無しさん [2007/08/21(火) 12:31:36 ] >>524 書き方が分からないんで そういう書き方が出来るなら教えてください、 ってことなんですが。
526 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:34:01 ] やっぱりポインタ変数とポイント先の関係がわかっていないような……
527 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:35:28 ] floatやint、char[]ならmemcpyしても問題ないが、下みたいなクラスだと問題が出てくる class hoge { char *str; int length; }; main() { hoge* v1, v2; v1 = new hoge; v1->str = new char[100]; memcpy(v2, v1, sizeof(hoge)); strcpy(v1->str, "v1"); strcpy(v2->str, "v2"); printf("v1.str is %s.\nv2.str is %s", v1->str, v2->str); }
528 名前:デフォルトの名無しさん [2007/08/21(火) 12:41:40 ] >呼ぶ側で、m_arrayの先頭のアドレスとサイズだけ分かれば >中身にアクセスできそうに思うのですが。 思いついて下のようにやったらうまくいったようなのですが、 これってなんか危険だったりしますか? float* hoge = new float[100]; hoge = foo->GetArray(); Cfoo:Cfoo() { float m_array = new float[100]; } float* Cfoo:GetArray(){return m_array;}
529 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:47:45 ] >>528 最初のnew float[100]で確保したメモリはどうやって解放するんだい?
530 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 12:52:23 ] >>528 配列のコピーをしたいんじゃなかったのか?
531 名前:デフォルトの名無しさん [2007/08/21(火) 12:58:48 ] >>527 理解にしばらく時間を要します。 脳のクロックが著しく劣っているのですいません。 >>529 これでもうまくいったっぽいですが、これならOKですか? float* hoge; hoge = foo->GetArray(); Cfoo:Cfoo() { m_array = new float[100]; } float* Cfoo:GetArray(){return m_array;} >>530 すいません、コピーというか、m_arrayの中身を どうにかして呼ぶ側で使えれば何でも良かったのですが。
532 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:00:55 ] floatの計算速度ってdoubleよりも遅いんですか?
533 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:02:09 ] >>528 巧くいってない巧くいってない。 >>531 だから、なんでコードの断片載せるんだって。 で、なんでまたfooはポインタなんだ?
534 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:03:27 ] >>532 足し算などは同じ。超越関数などは速い可能性が高い。 しかし、他の方への変換が入ったりすると遅くなることもある。 結論:一概には言えない。
535 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:06:07 ] もうスマートポインタコンテナとかRange conceptとか使う方がいいよ
536 名前:513 [2007/08/21(火) 13:14:09 ] つまりはどうしたらいいのでしょうか?もうわけ分かりません。 やりたいことはCfooのメンバとしてもってるfloatの配列m_arrayの中身を コピーするなりポインタを貰うなり、どういう方法があるのか分かりませんが 正しい方法で使いたいってことなんですが。 元の中身を書き換える必要はありません。知れればいいです。 で、とりあえず531で動いてますが、これは危険でしょうか。 要素数は別個貰うなりすれば分かるので その範囲内だけアクセスするなら大丈夫そうなんですが、ダメですか。
537 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:16:58 ] >>536 特に問題はないんじゃないの
538 名前:デフォルトの名無しさん [2007/08/21(火) 13:28:14 ] >>537 そうですか。ではひとまずこれでやっときます。 どうもお騒がせしました。
539 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:36:29 ] 書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。 それ以前に、Cfooを何故ポインタにしているかを知りたいんだが。
540 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 13:52:24 ] floatならSSEで高速化しやすい
541 名前:513 [2007/08/21(火) 13:53:03 ] >>539 >書き換えないなら戻り値はfloat *ではなくconst float *にするべきだな。 なるほど。 >Cfooを何故ポインタにしているかを知りたいんだが。 特に理由はないですが、 newしたCfooのポインタをメンバとして持ってるだけです。 ポインタで持ってるほうがいろいろ別のクラスに連れまわしたりするとき便利かなと。 むしろなぜそこが気になるのか知りたいんですが。
542 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:03:17 ] >>541 >むしろなぜそこが気になるのか知りたいんですが。 半ば個人的な興味だ。無条件にnewしたがるJava出身者が身近にいるもんでね。 # しかも、悪いことにdeleteする癖はついてないと来たもんだw
543 名前:513 [2007/08/21(火) 14:06:22 ] >>542 はい、まさに私のことです。
544 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:10:56 ] W
545 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 14:16:01 ] >>542 BCB使いもnewする癖が‥‥
546 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 15:40:21 ] OOっぽく書こうとするとそうなるんじゃないかな C++的にはスマートポインタを使え、ということになるんだが いずれにせよ常にownershipを意識している必要はあるね
547 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:02:26 ] ローカルなオブジェクトまでnewを使い始めたらもう、末期症状だ。 # オブジェクトは全てグローバルに管理されているとしたら、それはそれで難だけど。
548 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 16:03:31 ] >>545 VCL使ってると確かにnew癖つくなw
549 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 18:22:21 ] カウンタ付けて自動でdeleteするclassくらい自作しろ
550 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 21:25:00 ] 何で既にあるもん作りなおさにゃならんのん・・・
551 名前:デフォルトの名無しさん mailto:sage [2007/08/21(火) 22:27:07 ] boostの名前あげるとboost厨ウゼェとか言われるから
552 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 00:16:08 ] std::tr1::shared_ptrならいいのか?
553 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 04:50:10 ] 俺はboost::intrusive_ptrが好きだが、めんどい人にはめんどいだろうな。
554 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 10:37:52 ] もうIUnknown/comdef.hでいいよw
555 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:21:10 ] int main (int argc, const char * argv[]) { char string[] ="Hello,World"; char copystring[13]; stringcopy (string,copystring); printf("%s¥n",copystring); return 0; } void stringcopy (char *buff,char *copy){ int i = 0; while(buff[i]){ copy[i] = buff[i]; i++; } copy[i] = '¥0'; } でwhile(buff[i]){…}を for(i=0;buff[i] == 0;i++) copy[i] = buff[i]; とすると動かないんですけれど、何故ですか?
556 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:25:25 ] >>555 条件逆にして動くとでも思ってんの?
557 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:29:42 ] for(i=0;buff[i] == 0;i++){ printf("loop %d\n",i); copy[i] = buff[i]; } ってやってみたら、なにか気づくかも
558 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 12:36:13 ] わかった! for(i=0;buff[i] != 0;i++) ってすると動くぞ!
559 名前:デフォルトの名無しさん [2007/08/22(水) 12:49:13 ] Containerというクラス名をAAというクラス名にしたら、 Container.h:9: an anonymous union cannot have function members Container.h:26: abstract declarator `<無名 class>' used as declaration Container.h:26: anonumous 名前空間の集合体は static でなければなりません
560 名前:デフォルトの名無しさん [2007/08/22(水) 12:50:45 ] >>559 すいません、間違えて「書き込む」ボタン押してしまいました。 Containerというクラス名をAAというクラス名にしたら、 AA.h:9: an anonymous union cannot have function members AA.h:26: abstract declarator `<無名 class>' used as declaration AA.h:26: anonumous 名前空間の集合体は static でなければなりません というエラーが出てきたのですが、このエラーの意味が理解できません。 教えてください。
561 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:12:06 ] エスパー募集するんでもなければコード貼れよ。
562 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:16:23 ] >>560 最初のエラーだけとってみれば 無名共用体には関数メンバを持つことができない というエラー。 だから名前だけじゃなくて何か意味または構造が変わるような修正をしてると 思うけど、情報が不足してるのでこれ以上のことは分からない。
563 名前:デフォルトの名無しさん [2007/08/22(水) 13:42:53 ] >>559 です。 自己解決しました。 ContainerからAAに名前を変えたときに、 #ifndef CONTAINER #define CONTAINER #include "Container.h" #endif も #ifndef AA #define AA #include "AA.h" #endif としていたためにエラーが出ていました。 情報の足りない質問で申し訳ありませんでした。m(_ _)m
564 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 13:51:53 ] >>563 まあ、解決したのはよかったけど、 そもそものソースの構造がおかしいんじゃないのか? 普通は Container.h の中で全体を Container.h ----------------- #ifndef CONTAINER #define CONTAINER 〜 #endif ----------------- としてくくるんであって、includeする側では、二重取り込み防止マクロなんて書かないだろ。
565 名前:でいびす [2007/08/22(水) 16:08:55 ] VC++5.0でファイルリードをやってます。 その時、読込んだ値を文字として認識できるか 調べたいのですが、やり方を教えてもらえませんか? ループしながら、1文字づつ調べたいです。 ちなみに、文字列には半角の日本語と全角の日本語が混在しています。 お願いします。
566 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:23:15 ] 文字として認識ってのがあいまいだけど _ismbbprint あたり使えるか調べて見れ
567 名前:でいびす [2007/08/22(水) 16:51:43 ] >>566 _ismbbprintは使えませんでした。 ビルドが通らなかったです。
568 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:55:13 ] ttp://msdn2.microsoft.com/ja-jp/library/6d27cy2z(VS.80).aspx
569 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 16:59:27 ] なんだってVC++5.0なんてもんを使ってるんだ
570 名前:でいびす [2007/08/22(水) 17:04:29 ] >>569 古いプログラムをカスタマイズする事になったので使ってます。
571 名前:でいびす mailto:sage [2007/08/22(水) 17:11:52 ] >>570 古いプログラムをカスタマイズする事になっても使う必要ありません。
572 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:23:18 ] いやー、そうとも限らんぞー
573 名前:でいびす mailto:sage [2007/08/22(水) 17:24:06 ] >>570 いやー、そうとも限らんぞー
574 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 17:25:49 ] VC++5.0ってSTLがはじめてバンドルされた版だよな 無理やり使ったが、今にして思えばひでえ出来だった
575 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:20:05 ] new が失敗した時に NULL を返すことを前提にプログラムしてたりするんだろうなあ。
576 名前:デフォルトの名無しさん mailto:sage [2007/08/22(水) 19:22:18 ] new が失敗した時に NULL を返すことを前提にプログラムしてたりしてます。