1 名前:デフォルトの名無しさん mailto:sage [2006/03/12(日) 16:08:39 ] おそらく、.NET開発でデファクトスタンダードに最も近い であろうC++/CLIについて語ろうぜ! このスレはC++および.NET Frameworkについて一定以上の知識を持っている人が対象となります。 .NETのクラスライブラリの使い方といった質問は姉妹スレ「くだすれC++/CLI(初心者用)」に お願いします。 前スレッドはこちら (p)pc8.2ch.net/test/read.cgi/tech/1126450441/l50 姉妹スレ くだすれC++/CLI(初心者用) (p)pc8.2ch.net/test/read.cgi/tech/1142144110/l50 managed C++ やろうぜ!! 002 (p)pc8.2ch.net/test/read.cgi/tech/1139043535/l50
598 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:47:58 ] >>597 それが C++/CLI + フォームデザイナではないのか? あくまでネイティブにこだわる?
599 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 10:56:11 ] >あくまでネイティブにこだわる? これは詭弁。 実体は、M$が非ネイティブにこだわる。 gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、 ターゲットマシンが別0$になっちゃう。
600 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:02:02 ] C# で mono とか tcl/tk とか何かならわかるが、 pure C++ で Win32 アプリがRADで開発できても、 >gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、 >ターゲットマシンが別0$になっちゃう。 ってことにはならないと思うが。
601 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:17:25 ] >ってことにはならないと思うが。 ってことにはならない、じゃなくて、M$が阻止する。 売る側からしたら端末みたく膨大な数を売るものだったら1台あたりに0$代払いたくない。 開発マシンとターゲットマシンと別々なのはふつー。 Winの前の時代なら、UNIXで開発&Makeして汎用機(メインフレム)に転送していた。
602 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:18:57 ] >UNIXで開発&Makeして汎用機に転送していた。 あ、やっぱ、コンパイルは汎用機でやってたね。
603 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:21:44 ] >>601 そういう意味じゃなくてさ、MS の作る Win32 アプリの RAD の出してきたコードを gccでコンパイルしても、実行できる環境が Linux にある? Wine がそんなに実用的になってる?
604 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:48:30 ] >>603 Windowsヘッダーがgcc環境に移植されてM$が慌てたのを知らないの? RADなら製品としては成立しなくて終了したっぽいけど、Delphi / Kylix、 C++ Builder / C++ Builder Linux があるお。
605 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:53:54 ] >>603 あ、C++ BuilderにwxWidgetsのプラグインがあってポトペタできる。 wxWidgetsだからLinuxとMacは対応できる。
606 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 11:57:58 ] >>605 MS がクロスプラットフォームな UI フレームワークを採用した RAD を 出すわけないと思うけど。pure C++ になったとしても、Win32 べったりでそ。 次はそれに文句言うの? それとも Wine があるから >gccですんなりコンパイルできちゃったらWinが単なる開発マシンで、 >ターゲットマシンが別0$になっちゃう。 だ、って主張? >>604 漏れも cygwin は使ってるけど、そういうおまいは使ってるのか? きつい言葉だが、現実見えてる?
607 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 12:00:06 ] じゃ、wxWidgetsだ! MFCアプリケーションをLinuxに移植する ttp://www.ibm.com/developerworks/jp/linux/library/l-mfc/
608 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 12:55:39 ] おおい、C++/CLI スレなんだかから、 RAD にかんしては mono で Windows.Form が使えるかどうかってのがメインの話題にならんの? そういう俺は Hello world しか試したことがないよ。 mono では。
609 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:01:01 ] mono=Hello worldツール
610 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:06:45 ] RHD = Rapid "Hello world" Development
611 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:07:06 ] RAD = RApid "Hello world" Development
612 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:12:21 ] CLI = Common "Hello World" Language Infrastructure
613 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:13:08 ] HAL = HALlo world is typo.
614 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 13:25:47 ] V$ドトネトは、ドトネト Framework の機能を最大限に利用することによって、Hello worldの生産性を劇的に向上させます。
615 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 15:08:48 ] 質問です。 int sample(int (* func)(void*), void* arg); というCの関数を呼び出したいのですが、argにマネージオブジェクトを引き渡す手段に悩んでいます。 struct Arg { gcroot<array<int>^> obj; }; と int on_callback(void* arg) { Arg* parg = (Arg*)arg; Console::WriteLine(part->obj->Length); } を用意して Arg arg; arg.obj = gcnew array<int>(4); sample(on_callback, &arg); みたいな方法を考え付いて一見問題なく動いているように見えますが、何か問題があったりもっと一般的な方法があったりするんでしょうか。 ていうかon_callbackはなぜ#pragma unmanagedじゃなくても動くんだろう?
616 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 16:54:58 ] >>615 その方法でいいと思うよ。 >ていうかon_callbackはなぜ#pragma unmanagedじゃなくても動くんだろう? その為の混合モードだから。関数はマネージドとネイティブの両方のエントリーを持っている。 #pragma unmanagedを使うのは DllMainとlongjmpのときくらいじゃなったかな。
617 名前:デフォルトの名無しさん mailto:sage [2007/10/30(火) 18:20:31 ] >>616 ありがとうございます。 これで実装を進めることにします。
618 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 01:42:07 ] IntPtrで与えられたポインタをマネージ型のByte配列に変換したいのですが、できるのでしょうか? アンマネージへの変換はMSDNの参照などによりわかったのですが、 マネージへはまだわかっておりません。 アンマネージに変換して使用して配列を扱ってもいいのですが、なるべくマネージ型でまとめたいと思いまして・・・ そもそも無理だとしたらIntPtrのReadByteを使うしかありませんか? どなたかご教授ください。
619 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 01:49:26 ] >>618 なにがやりたいのかさっぱり和漢ねえ
620 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 07:42:28 ] それへ知ってハッキングでもする気か?
621 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 08:04:03 ] ポインタにするにはちょっとGCさえごまかせば済む話だが、 配列はオブジェクトなので新しく作る必要がある。 C++/CLI使っててポインタを使わない意味はないだろ。
622 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 14:11:18 ] 何やりたいかわからんが、Marshal::Copy とかか?
623 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 14:13:53 ]  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄」 ―――――――――――――‐┬┘ | ____.____ | | | | | | | ∧_∧ | | | |( ´∀`)つ ミ | | |/ ⊃ ノ | |  ̄ ̄ ̄ ̄' ̄ ̄ ̄ ̄ | ミ C++/CLI
624 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 16:38:39 ] 懐かしすぎるぞそのAAw
625 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 19:27:06 ] 配列が三つもあるとかあほすぎ
626 名前:デフォルトの名無しさん mailto:sage [2007/10/31(水) 21:46:23 ] 618への回答にinterior_ptrっていいだろうかw? マネージ型には違いないぞ。
627 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 09:56:33 ] たぶん、IntPtr に格納されたアドレス値をバイト配列に変換したい訳じゃないとは思うんだが(w
628 名前:デフォルトの名無しさん [2007/11/01(木) 09:58:54 ] c++/cliを使うメリットってなんすか? C++に中間吐かせるなんて、ビャーネが知ったら泣くぞ
629 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:05:13 ] C++ を越えた変態になれる
630 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:09:50 ] ま、C++と文法的に相性が悪かったCOMの悪夢の続きを見れるとか。
631 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:28:51 ] .netライブラリを使える
632 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 10:43:22 ] ドトネトライブラリはイラネ 既存のC/C++ライブラリを使いたいわけ。
633 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 13:46:59 ] >>632 そういう人がなぜこのスレッドにいるのかわからん。
634 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 13:53:20 ] 何ていうか、分からないから見てみる、みたいな。 .NET「本音」相談室 ttp://www.atmarkit.co.jp/fwin2k/dnitpro/honneqa01/honneqa01_01.html
635 名前:デフォルトの名無しさん [2007/11/01(木) 19:00:04 ] VB.netからとりあえず早さを求めてC++/CLIやり始めたんですが、 //Form1.h #pragma unmanaged class hogehoge{}; #pragma managed Form1を作ったときに自動生成されたやつ private: System::Void start(System::Object^ sender, System::EventArgs^ e) { hogehoge test; } とやると動くのは分かったんですが、デザイナに クラス Form1 はデザインできますが、ファイルの最初のクラスではありません。Visual Studio では、デザイナはファイルの最初のクラスを使用する必要があります。クラスがファイルの最初のクラスになるようにクラス コードを移動して、デザイナを再度読み込んでください。 と怒られてしまいます。 いい方法を教えてくださいmm
636 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:04:11 ] >>635 IDEが作成したファイルに手を加えるのはあまりよくない。 別のファイルに書こう。
637 名前:デフォルトの名無しさん [2007/11/01(木) 19:11:14 ] >>635 ええ、絶対間違ってると思ってtest.cppってファイルを作って同じのを書いたのですが、 hogehoge という型指定子が見つかりませんと言われてしまうんです。
638 名前:635 [2007/11/01(木) 19:24:35 ] //test.cpp class hogehoge{}; //Form1.h >>635 の#pragma managedより下 って書いてみたんですけど、ヘッダーがコンパイルされたときには test.cppはまだコンパイルされてないからこういう事になってるんですかね・・・?
639 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:28:28 ] >>637 先にCをやってきな
640 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:38:55 ] >>639 C++もだろ。
641 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 19:39:25 ] だな。
642 名前:635 [2007/11/01(木) 19:41:44 ] www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html とりあえずここに書いてることは大体理解出来るんですが、 足がかりになるようなページ教えていただけませんか?
643 名前:デフォルトの名無しさん mailto:sage [2007/11/01(木) 20:05:07 ] ヘッダと cpp の関係がわかってないのかな? Form.h が メインの cpp に include されてコンパイルされる前に、hogehoge なるクラスが 定義されていないといけないんだよ だから、hogehoge をヘッダに定義して、Form1.h で include すればいいんだけど この説明の意味、わかる? 次はたぶん、混合型はサポートされていません。て、エラーになると予言(w
644 名前:635 [2007/11/01(木) 20:28:37 ] >>643 ヘッダーを作らないといけないのを全く理解してませんでした。 IDEでクラスを作って見よう見まねでいじったらうまく行きました^^ 丁寧にありがとうございましたmm
645 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 10:16:10 ] まぁ、別に cpp を include してもいいんだけどな
646 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 12:23:45 ] いやいや、リンクしたときに定義が衝突するでしょ
647 名前:デフォルトの名無しさん mailto:sage [2007/11/02(金) 16:58:28 ] それよりおれは>>635 の1行目が気になる
648 名前:デフォルトの名無しさん [2007/11/03(土) 09:36:00 ] それよりおれは>>647 の1行目が気になる
649 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 01:27:44 ] C++/CLIって、仕事あるか?
650 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 14:08:18 ] >>647 実は俺も気になってた。
651 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 16:50:50 ] >>649 3ds/maxの会社
652 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 17:38:42 ] CLI穴だらけじゃん(`Д')ノ じゃあみんなで補完しあおうぜ(=゚ω゚)ノ 議論盛り上がりまくり(゚д゚)ウマー ドトネト対応(・∀・)イイ! ってのが製作者の狙いということか( ゚Д゚)ハッ いや…なん違うような(;´Д`)
653 名前:デフォルトの名無しさん mailto:sage [2007/11/05(月) 21:55:56 ] なすてnullptrなんて作たんだろ、nullで統一してよ
654 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:15:35 ] ぬるぽ
655 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:37:10 ] >>653 > なすてnullptrなんて作たんだろ、nullで統一してよ '\0' と混同する人がいないとも限らないからかな…
656 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 00:52:35 ] #define null 0としているプログラムは探せば結構ありそうに思う。 そんなコードでも変更なしに使えるようにという配慮では?
657 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 18:41:43 ] え C++/CLIはヘッダーに全部実装するのが流儀だろ cppファイルなんていらんのですよ
658 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 20:35:57 ] 実体化しないのかよ まさか、プリコンパイルヘッダに全部うわなんだおまえやめr
659 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:19:51 ] >>649 このあいだ、基本は.NETライブラリで、ネイティブ用のI/Fも欲しいって仕事があって 何を使っても良かったし、ずっと自分が面倒みる事になる事は分ってたから C++/CLI のラッパーで対応したが。 レアケースなのは間違いないな。
660 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:29:36 ] >基本は.NETライブラリで、ネイティブ用のI/Fも欲しいって これ、何ていうドトネトアプリの破滅。
661 名前:デフォルトの名無しさん [2007/11/11(日) 16:39:40 ] >>え C++/CLIはヘッダーに全部実装するのが流儀だろ あ、やはりそうなのか?
662 名前:デフォルトの名無しさん mailto:sage [2007/11/11(日) 17:10:26 ] こより的には、そのやり方はちょっと…
663 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 19:56:20 ] C#でいう「インターフェイス メンバの明示的実装」をやるにはどうすればいいの?
664 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 20:35:39 ] 自己解決 private: virtual Object^ Clone() = ICloneable::Clone { ... }
665 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 21:43:18 ] CLI 部分については C++/CLI って C# よりむしろ VB に近いと思う瞬間の一つだな raise とか
666 名前:デフォルトの名無しさん mailto:sage [2007/11/15(木) 22:15:02 ] >>662 マイナー杉
667 名前:デフォルトの名無しさん mailto:sage [2007/11/16(金) 11:38:24 ] >raise とか これ、何てDelphi?
668 名前:デフォルトの名無しさん mailto:sage [2007/11/20(火) 22:11:41 ] 2008入れてみた。 STL/CLI使えるぽ。
669 名前:デフォルトの名無しさん mailto:sage [2007/11/21(水) 00:02:11 ] .net fx 2.0 指定でも使える?
670 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:45:51 ] この言語って、どの程度流行ってんの?
671 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 09:49:10 ] 各国で静かなブームですよ
672 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:01:19 ] TreeViewとListViewにxVN_GETDISPINFO相当の機能がなかったので、 Controlから派生させて自作したよ('A`) (VirtualModeもパフォーマンスがよくなかった・・・) C#だとAPIや定数の定義が面倒だが、C++/CLIだとWin32ヘッダそのままインクルードして使えるから楽でいい。 だがそんなことするくらいなら最初っから つMFC ・・・そんな感じだ。
673 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:21:38 ] メッセージぐらいならわざわざControl使わんでもどうとでもなるが。 Notify系メッセージならWM_REFLECTION付きで当該コントロールに来るし。
674 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 11:22:08 ] いやWTL最強
675 名前:デフォルトの名無しさん mailto:sage [2007/11/24(土) 21:35:28 ] >>673 メッセージぐらいではどうにもならんのですよ。 WM_NOTIFY + WM_REFLECTでメッセージ引っ掛けても、先が続かん
676 名前:デフォルトの名無しさん [2007/11/27(火) 18:43:18 ] Windowsプログラムを組む必要がない場合 CLIを勉強する意味ある?
677 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:44:30 ] Windows以外で動く独自のCLIを開発する場合とか。
678 名前:デフォルトの名無しさん mailto:sage [2007/11/27(火) 18:48:44 ] ( ゚д゚ )( ゚д゚ )( ゚д゚ )…
679 名前:デフォルトの名無しさん mailto:sage [2007/11/28(水) 12:51:24 ] 独自にCLRを実装するなら、CLI の勉強は必要だな C++/CLI は不要だが
680 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 00:41:11 ] Object型の変数の値が、値型Tのボクシングされたオブジェクトであるかどうかを 調べるにはどうすればいいんでしょうか C#では obj is T とするところです
681 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 00:58:20 ] 参照型同様dynamic_cast<T^>(obj)がnullptrになるか否かで判定すればいい。
682 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 08:42:54 ] safe_cast ?
683 名前:デフォルトの名無しさん mailto:sage [2007/11/30(金) 14:51:10 ] castに失敗した時に、例外が発生したほうがいいならsafe_cast。 nullptrを返してほしいなら、dynamic_cast。 if分の条件でスマートに使いたいなら、T::typeid->IsSubclassOf(obj)もしくはIsInstanceOfType()の組み合わせで。
684 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:30:52 ] public ref class A : public Generic::IEnumerable<Object^> { public: virtual Generic::IEnumerator<Object^>^ GetEnumerator(); }; コンパイルエラーになるのだが、こういう実装はだめなの?
685 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:47:51 ] エラーメッセージぐらい書(ry System::Collections::IEnumerable::GetEnumeratorの方の宣言がない
686 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 08:57:42 ] >>685 public ref class A : Generic::IEnumerable<Object^> { public: virtual Generic::IEnumerator<Object^>^ GetEnumerator(); virtual Collections::IEnumerator^ GetEnumerator(); }; してみたけど、だめでした。 error C2556: 'System::Collections::IEnumerator ^A::GetEnumerator(void)' : overloaded function differs only by return type from 'System::Collections::Generic::IEnumerator<T> ^A::GetEnumerator(void)' with [ T=System::Object ^ ]
687 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 09:29:04 ] そりゃ返値が違うだけの同名同引数メソッドを宣言できるわけないだろ? 別名定義する必要がある。リファレンスのinterface classの解説見れ
688 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 09:51:04 ] >>687 以下でコンパイル通りました。 public ref class A : Generic::IEnumerable<Object^> { public: virtual Generic::IEnumerator<Object^>^ GetEnumerator() = Generic::IEnumerable<Object^>::GetEnumerator; virtual Collections::IEnumerator^ GetEnumerator2() = Collections::IEnumerable::GetEnumerator; }; ありがとうございました。
689 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 15:15:44 ] GetEnumerator2のほうはprivateにしたほうが
690 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 16:34:04 ] >>689 早速private: + sealedにしました。 重ね重ねありがとう
691 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 16:56:00 ] マネージクラスも共変できたらいいのにと思う。
692 名前:デフォルトの名無しさん mailto:sage [2007/12/01(土) 17:58:42 ] 共変ができないのはなんでだろう CLI 上の制約?
693 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 02:20:10 ] >>691 Genericsは共変/反変をサポートしてるけど 標準クラスライブラリと有名どころの言語がサポートしていないので事実上死に設定
694 名前:デフォルトの名無しさん mailto:sage [2007/12/02(日) 02:33:11 ] たしかデリゲートもIL上は共変・反変できたような。
695 名前:デフォルトの名無しさん mailto:sage [2007/12/04(火) 21:08:19 ] C#はデリゲートなら共変反変おk
696 名前:デフォルトの名無しさん [2007/12/08(土) 17:56:12 ] (C/C++スレから誘導されて来ました) VS2005にてC++/CLI使用中です。 Hoge()というアンマネージドクラスが既にあり、これをマネージ環境で使うことを考えています。 このとき、 Hoge *hoge0 = new Hoge(); Hoge *hoge1 = new Hoge(); Hoge *hoge2 = new Hoge(); ・・・ というのを Hoge *hoge[10]; hoge[0] = new Hoge(); hoge[1] = new Hoge(); hoge[2] = new Hoge(); ・・・ のよう配列にするにはどうしたらよいでしょう? (マネージ環境だと Hoge *hoge[10]; の時点でCLI配列使え!って怒られてしまうんですよね・・・)
697 名前:デフォルトの名無しさん mailto:sage [2007/12/08(土) 18:16:54 ] 普通にできるはずだが? エラーメッセージとか番号とかちゃんと書けよ
698 名前:デフォルトの名無しさん [2007/12/08(土) 18:21:12 ] C++/CLIでSTLって使えないんですかね。。。 アンマネージ内で使いたいんですが、#include<list>とか<vector>とかすると error C2039: 'free' : '`global namespace'' のメンバではありません。 e:\program files\microsoft visual studio 8\vc\include\cstdlib error C3861: 'free': 識別子が見つかりませんでした e:\program files\microsoft visual studio 8\vc\include\malloc.h とエラーが出ます。。。