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でのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのも手ですが直接貼る場合は、 全角空白か に置換すると見栄えだけはよくなります。
733 名前:急にごめんなさい。。。 [2010/05/04(火) 22:10:50 ] 大学2年です。もう1時間半苦戦しています。教えてください。 構造体を使い、メンバー変数に氏名、所属コース、出身高校を持つものを作成し キーボードからこれらの変数を入力し、出力するプログラムを作成しなさい。 という実習課題がでたのですが自分が作成したプログラムでは セグメンテーション違反です と表示されるばかりで。。。 教えてください。どこがおかしいのでしょうか? #include<stdio.h> struct profile{ char *Name; char *Course; char *Koukou; }; int main(void){ struct profile seito1 ; printf("氏名を入力してください。\n"); scanf("%s",&seito1.Name); printf("所属コースを入力してください。\n"); scanf("%s",&seito1.Course); printf("出身高校を入力してください。\n"); scanf("%s",&seito1.Koukou); printf("氏名:%s\n",seito1.Name); printf("所属コース:%s\n",seito1.Course); printf("出身高校:%s\n",seito1.Koukou); return 0; }
734 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 22:17:13 ] いい気になりやがって。何でもかんでも&つけりゃいいと思うなよ
735 名前:デフォルトの名無しさん [2010/05/04(火) 22:17:54 ] とりあえず徹夜しろ。
736 名前:急にごめんなさい。。。 [2010/05/04(火) 22:19:56 ] &をつけてもつけなくても セグメンテーション違反です。と表示されます。。。 どこを変えればいいんでしょうか?
737 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 22:20:21 ] >>733 char Name[100]; //保存場所が無い。 scanf("%s",seito1.Name) //配列はポインタとして使える
738 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 22:22:58 ] >>736 入力された文字列のデータはどこに格納してるつもりだい
739 名前:急にごめんなさい。。。 [2010/05/04(火) 22:26:27 ] >>737 できました!!!ありがとうございます。
740 名前:デフォルトの名無しさん mailto:sage [2010/05/04(火) 22:27:45 ] >>734 リアルゆとりにそんなこというなよ >>733 は低脳日本人が生み出した超すごい世代なんだから >>733 ゆとりだから質問するスレが分らないのはしょうがないけど、普通は pc12.2ch.net/test/read.cgi/tech/1269438098/l50 で宿題関連は質問する。次回からそこで質問汁
741 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 01:01:51 ] ポインタについて、*tに文字列を関数内で入れたいのですが、 下記のようにすると、ビルドは成功するのですが 実行時に"The variable 't' is being used without being defined" というエラーメッセージが出ます。 関数test(t)で*tに文字列を入れるにはどうしたらいいでしょうか。 教えてください。 int main(int argc, char *argv[]) { char *t; test(t); cout << t << endl; return EXIT_SUCCESS; } void test(char *t) { t = new char[100]; int i = 0; cout << "step1" << endl; t[i++] = 'a'; t[i++] = '\0'; }
742 名前:741 mailto:sage [2010/05/05(水) 01:09:57 ] pc12.2ch.net/test/read.cgi/tech/1269438098/l50 で質問しました。
743 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 01:18:04 ] >>741 void test(char *t) これはポインタを値渡ししてるからポインタを引数で返すことはできない ポインタを返すにはポインタのポインタ void test(char **t) にしなければならない 後は自分で治して
744 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 01:31:13 ] こっちにも貼っとくわ int main(int argc, char *argv[]) { char *t; test(t); cout << t << endl; return EXIT_SUCCESS; } void test(char *&t) { t = new char[100]; int i = 0; cout << "step1" << endl; t[i++] = 'a'; t[i++] = '\0'; }
745 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 01:32:30 ] >>741 つ void test(char* &t)
746 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 01:34:56 ] >>744 ポンタポンタ版もよろ
747 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 01:56:40 ] >>746 int main(int argc, char *argv[]) { char *t; test(&t); cout << t << endl; return EXIT_SUCCESS; } void test(char **t) { *t = new char[100]; int i = 0; cout << "step1" << endl; (*t)[i++] = 'a'; (*t)[i++] = '\0'; }
748 名前:741 mailto:sage [2010/05/05(水) 02:04:30 ] >>743-747 アドレス版(*&t)とポインタポインタ版(**t)共に ビルドと実行がうまくいきました。 本当にありがとうございました。 いと難しいこと限りなし
749 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 03:42:08 ] strncpyに関しての質問ですが, 実装が↓みたいな感じで かなり定型的で面倒なのですが, こういうものなのでしょうか. というより,もっと簡便な方法があったりするでしょうか? char dst[256]; memset( dst, 0, sizeof( dst ) ); strncpy( dst, src, sizeof( dst ) / sizeof( char ) - 1 );
750 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 04:00:42 ] 俺ならこうする char dst[256]; int len = strlen(src); if (len >= sizeof(dst)) { len = sizeof(dst) - 1; } memcpy(dst, src, len); dst[len] = '\0'; か、 こうする sprintf(dst, "%.*s", sizeof(dst)-1, src));
751 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 04:02:20 ] 所詮Cは高級アセンブラなのです。 マクロ使うぐらいじゃないかなぁ。 あとそのコードだとmemsetはいらないと思うけど。 Better CとしてのC++に移行するとちょっと楽になるよ。
752 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 04:11:46 ] C++でもSTL使えない環境だったらおなじですよね. あとmemsetはdstの最後に終端文字を付けてるんですね.
753 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 04:18:39 ] STLも使えないような糞組み込み環境なら贅沢言わないでCで書いてろよ……
754 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 07:05:54 ] >>749 「定型的」ってことは、文字列を入れる配列は「とりあえず0クリア」 みたいに思ってるのかね。 文字列の後ろはゴミを入れたままでいいよ。
755 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 07:53:56 ] >>732 他のメンバがあったりしてコンストラクタから例外が飛ぶと漏れることがあるから気をつけろよ。
756 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 08:55:01 ] cFunc::cFunc(HWND hWnd, bool tyui, int width, int height) { //初期化メンバ関数 this->init(hWnd, tyui, width, height); } C++の勉強をしていたのですが、とあるソースのコンストラクタの中に以上のような記述がありました クラスの中で、コンストラクタとは別に初期化用関数を作るメリットなどがありましたら教えて頂きたいです
757 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 09:12:25 ] 他のコンストラクタや コンストラクタ以外でも init() を使える
758 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 09:13:54 ] >>756 引数違いのコンストラクタが複数ある場合には必須だとか デフォルトコンストラクタを定義したいとか 色々あるだろうけど、this->厨は爆発すればいいと思う。
759 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 09:27:12 ] >>757-758 参考になりました。ありがとうございます。 ちなみに「this->」は何が問題なのでしょうか・・・?
760 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 09:34:17 ] this->厨厨は基地外だから触らなくていいよ
761 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 10:49:16 ] >>754 とりあえず0クリアがコーディング規約になってる場合もあるからなあ でも char dst[256] = ""; だけで0クリアできるんだけどね 配列の初期化では、初期化を行っている場合、値の指定されていない要素は0で初期化される (明示的に初期化していない場合は実際に何も初期化されないので、とりあえず何かで初期化する必要はある)
762 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 10:52:16 ] this->はインテリセンスが効いて便利と言う人もいるが 純粋にキモい
763 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 12:42:39 ] ゼロ終端さえあればあとはゴミだらけでもいい でも例えばその文字配列を丸ごとどこかファイルに永続化するような場合には、 予めそこにゴミが残ってる事もわかった上で使わないといけない 気にするべきポイントなんてそんなもん
764 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 12:53:34 ] ファイルに文字列、文字列のペアを保存して読み書きしたいのですが 今やってるのは ・keyの長さ(4 byte) ・valueの長さ(4 byte) ・key (x byte) ・value (y byte) を1つのデータと見て データの長さを読む→keyとvalueを読む→次のデータの長さを読む→・・・ といった感じで先頭から繰り返して欲しいkeyに対応するvalueをメモリに読み込みます ですがこれだと死ぬほど遅いので効率をよくしたいです なにか典型的な解決方法とかってありますか?
765 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 12:58:42 ] this厨 = インテリセンス厨 ってか.
766 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 12:59:12 ] >>764 まとめてメモリに読み込んでから処理する。
767 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 12:59:52 ] >>764 コード晒せ。
768 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 13:02:30 ] >>764 メモリに読んでから構造体(POD型)で取り出しちゃう
769 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 13:03:12 ] うろ覚えなんですが,構造体のコンストラクタで memset( this, 0, sizeof( this ) ); とすると良くないという話を前に聞いたんですが, どこが良くないか ご意見頂けませんでしょうか.
770 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 13:10:12 ] >>769 sizeof( this )これは置いといて。 コンストラクタで初期化されたメンバを0で塗りつぶしちゃいかんでしょ。
771 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 13:11:54 ] >>769 www.kijineko.co.jp/tech/superstitions/initialization-by-memset.html
772 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 13:17:11 ] ありがとうございます
773 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 13:46:13 ] oshiete.goo.ne.jp/qa/2727121.html このような回答もあるのですが...?
774 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 13:58:33 ] C++ でクラスのメンバ関数を関数ポインタを外部のクラスメンバでない関数に渡して 外部から叩いてもらうような処理って、外部からだとインスタンスを区別する事が出来ないから やっぱ無理なんだろうか
775 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:01:06 ] PODならmemsetを使って問題ない がしかし、 > double 型やポインタ型は、これらを構成する全ビットが 0 になったとしても、 > オブジェクトの値が 0 になるかどうかは分からない てか何でクラスのメンバ全部をmemsetで初期化しようとするのか理解できん
776 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:04:21 ] C++でもデリゲート(もどき)はできるはず
777 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:12:32 ] ヤバい。Codepad.org 落ちたかもしれない 下記コードだと、ISO なんちゃら警告が出てコンパイル不能。 class Foo; typedef int (Foo::*FUNC)(); //typedef int (*FUNC)(); void test(FUNC f) { printf("%d", f()); } class Foo { private: int x; public: Foo(int a): x(a) {} int getValue() { return x; } }; int main() { Foo f(123); test(f.getValue); //test(&(f.getValue)); return 0; }
778 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:12:45 ] >>774 メンバ関数ポインタとオブジェクトのアドレスを渡してあげれば出来るよ でもまあ普通は関数オブジェクトにして渡すけど
779 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:14:03 ] >>777 メンバ関数へのポインタを得る記述は &Foo::getValue だ。インスタンスからは取れない。
780 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:16:26 ] >メンバ関数へのポインタを得る記述は &Foo::getValue だ。インスタンスからは取れない。 静的メンバとしてそれで取り出せるのは知ってたけど、やはりインスタンスからは無理か。 外から見たらそれがどのインスタンスのメンバなのかを特定出来ない(this不明)からか >>778 Invokeさせるって話ですね。それはたまに書いてます
781 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:17:33 ] >>774 boost::function
782 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:51:49 ] すいません、ごく基本的な質問かも知れませんが #include<stdio.h> int main(void) { printf("hello world!"); return 0; } というプログラムを実行すると 実行画面が表示されてすぐに消えるのですが キーを押すまで表示したまま、というのはどうすればよいのでしょうか
783 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:58:45 ] getchar(); とか?
784 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 14:59:29 ] >>782 VisualC++ 2005なら 「デバッグ→デバッグなしで開始」(Ctrl + F5)でいけるよ 「デバッグ開始」(F5)だとすぐに消える なぜかは分かりません。当方は仕様として認識してます。
785 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 15:01:21 ] >>775 そういうのは個別に初期化すればいいでしょ
786 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 15:01:22 ] デバッグ開始として実行すると、実際に起動してるのは IDE側だから 終了次第後始末する → 閉じる って事じゃね デバッグ無しだと起動しっぱなしになるってだけ。違うかな
787 名前:デフォルトの名無しさん mailto:sage [2010/05/05(水) 15:05:34 ] >>782 exeをダブルクリックしてないか? コマンドプロンプトから呼び出せばすぐに消えないよ myapp.exeというプログラムを作ったとしたら コンパイルしたディレクトリでmyappと入力してエンターだ
788 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 12:15:00 ] >>784 >>786 デバッグなしで実行のときは、余計なお世話なことにpauseコマンド(相当)を噛ましているだけ。 デバッグ開始の場合は、止めたければ勝手に止めればいいので余計なお世話もしない。
789 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 17:14:31 ] コマンドプロンプトから起動したら消えませんでした ありがとうございます 先に言っておくべきだったと思うけどbcpadを使ってます
790 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 21:44:01 ] int a[10000000] int work[10000000]; int work2[10000000]; int main() { for(i=0;i<N_MAX;i++){ work[i] = i; work2[i] = i; } t1 = my_clock(); for(i=0;i<N_MAX;i++){ a[i] = work[i]; } t2 = my_clock(); t3 = my_clock(); for(i=0;i<N_MAX;i++){ a[i] = work2[i]; } t4 = my_clock(); printf("%f %f\n",t2-t1,t4-t3); } 質問です。以上のプログラムを実行したところ、aの配列にwork2の配列の要素を代入するほうが処理時間が早くなっています。 なぜ同じような操作を行っているのに処理速度が変わってくるのでしょうか?
791 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 21:59:23 ] >>790 原因はここに書いてない部分にある。
792 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 22:04:40 ] デストラクタって仮想にして継承すれば 派生元と派生先両方のが実行されるんだよね?
793 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 22:10:24 ] まづおまいは、 図書いてみて 言いたい事を整理し直してきなさい
794 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 22:23:23 ] >>790 最初のループでa[i]も初期化してみたら結果が変わるかもね。
795 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 22:32:37 ] 一見どっちも同じ代入に見えるけど、 最初のループは初期化を行っていて、 二回目のループはコピーになってるから?
796 名前:790 mailto:sage [2010/05/06(木) 22:41:35 ] ありがとうございます。 >>790 my_clock()関数の記述は省いたのですが、そちらに原因があるということでしょうか? それとも環境的なものということでしょうか? >>794 a[i]を初期化すると、早くはなったんですが、まだ差があるようです。 この差はなぜ生まれるのでしょうか?たぶん誤差の範囲では無い気がします。
797 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 22:49:09 ] ここから見る限りは、my_clock()がまともな動作をしているのか ぜんぜんわからない。
798 名前:790 mailto:sage [2010/05/06(木) 22:53:23 ] すみません。my_clock()は以下のようになってます。 double my_clock() { struct timeval tv; gettimeofday(&tv, NULL); return tv.tv_sec + (double)tv.tv_usec*1e-6; }
799 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 23:05:57 ] >>792 あまりにも勉強不足。 猫でもわかるプログラミング www.kumei.ne.jp/c_lang/ ロベールの部屋 www7b.biglobe.ne.jp/~robe/ Codian www.kab-studio.biz/Programing/Codian/ C++入門 www.asahi-net.or.jp/~yf8k-kbys/newcpp0.html ATLAS Japan C++ Course www.icepp.s.u-tokyo.ac.jp/~sakamoto/education/atlasj/cplusplus/index.html 上から順にここにあるぐらいの内容は読め。
800 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 23:18:25 ] >>798 cygwin で gcc で再現した。 0.051000 0.043000 for(i=0;i<N_MAX;i++){ work[i] = i; work2[i] = i; a[i] = i; } にしてみたら、 0.043000 0.043000 になった。不思議だな…
801 名前:790 mailto:sage [2010/05/06(木) 23:27:41 ] >>800 初期化すると処理時間一緒になってますね。 私が実行すると 0.037232 0.036249 と、差が出ています。環境はemacs+gccです。
802 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 23:30:47 ] >>801 その実行ファイルを2回か3回連続して実行してみて
803 名前:790 mailto:sage [2010/05/06(木) 23:34:48 ] >>802 3回続けてやってみました。 0.037251 0.036251 0.037230 0.036211 0.037259 0.036257
804 名前:デフォルトの名無しさん mailto:sage [2010/05/06(木) 23:41:37 ] 最適化、とかいう話でも無いもんなこれ なんだろな。 俺も不勉強でわからん
805 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 00:18:04 ] 単純に a がキャッシュに載っただけでしょ
806 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 00:37:23 ] キャッシュとかの問題じゃないの
807 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 00:40:20 ] 領域サイズが大きそうなので、cpu cacheはあまり関係しない work→aのコピーのときは、aの領域がメモリ管理に乗ってないため 毎回ページフォルトして、空きページ割り当てをするから遅くなる work2→aのときはページフォルトが起きてないか、起きても割り当て処理は 無い分だけ軽くなる だから、>>800 みたいに一度aの領域をスキャンしておけば、ほぼ同じ条件になる
808 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 00:43:59 ] グローバル変数なのにページフォルト起きるの?
809 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 00:58:52 ] 起きるんじゃないの? main()にくる前に0クリアの処理が走るとでも?
810 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 01:03:05 ] ああ、デマンドページングなのを忘れてた
811 名前:341 mailto:sage [2010/05/07(金) 03:24:49 ] APIでは無理なのかな? 一瞬だけウィンドウアクティブにして「あ」か「ち」の判断とかしかない?
812 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 04:07:23 ] >>790 ループを走らせる前に work[9999999] = work2[99999999] = 0; を一回やっておけば同じになるんじゃないの?
813 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 08:05:10 ] 質問です C++/CLI と C++で.net framework使うことって同じなんでしょうか? .net frameworkだとGUIのレイアウトが簡単で助かるのですが C++/.net frameworkの講座とかのサイトありますか?
814 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 08:17:20 ] C++って毎日触ってないと確実に忘れるね みんな毎日コード書いてるの?
815 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 09:20:19 ] 書いてるよ
816 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 09:21:51 ] お題はどこで見つけてくるの?
817 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 09:38:05 ] フレンドクラスって覚えたほうがいい? どういう場面で使うんだろ?
818 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 09:57:03 ] >>817 > フレンドクラスって覚えたほうがいい? うむ。ただしその覚えるのに5分とかからないと思うが。 friend classは設計に妥協していると言われるかもしれないが、 まあしかたないことだし。 pimplでググってみ。friend classの使いどころである。 (つかわなくても書けちゃうんだけど。)
819 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 11:39:39 ] >>813 全然違う。てかネイティブのC++から.NET使うってシチュエーションが良くわからんけど、 C++/CLIはC++のふりした正体はC#。コンパイルした結果のバイナリからして違う。 CLIの方は何か事情がある場合ぐらいしか特に意味がないので使わないと思うぞ あとVSのIDEでGUIが組みやすいからとかそんな理由でチョイスするとか本末転倒。 そういう意味ならExpressのVC++でもちゃんと意味が分かってるなら ダイアログをメインウィンドウにしてResEditとかで ビジュアルに作れるぞ
820 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 13:31:59 ] friendでpimplってなんに使うんだ?
821 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 13:49:50 ] >>819 回答ありがとうございます。 今までC++で開発してきたものを、GUIに載せて使いたく。 GUIのとっかかりにC#をGW中に勉強していたため、.netでのGUI作成は ある程度わかったのですが、いあこれまでの資産を使おうと思ったら どうにも利用できず。 ネイティブのC++資産が使えて、IDEがついていて C#みたいに組めるもの=C++/.NETかと思っていました。。。。 どうしよう…連休終わってしまう
822 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:48:08 ] >>821 資産をDLLにしたら。
823 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 14:51:11 ] friendで書いてるソースを見ると引く
824 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:12:00 ] >>823 なんで?friendを使わないと出来ない事がいろいろあるだろ
825 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 16:19:38 ] 非リアなんだろ そっとしておいてやれ...
826 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 17:43:40 ] >>823 お前が使えないってだけだろwww friend
827 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 18:22:40 ] すいません、質問です。 class Hoge; class Test { Hoge* p; }; class Hoge { }; ということができると思うのですが、Hogeの中のChildクラスをTestに含める場合はどうしたら良いでしょうか? イメージとしては下記のような感じなのですが、コンパイルエラーがでます。 環境はVC2008です。 class Hoge::Child; class Test { Hoge::Chiled *p; }; class Hoge { class Child{
828 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 18:24:22 ] すいません、途中で送ってしまいました。 あらためて・・・。 class Hoge; class Test { Hoge* p; }; class Hoge { class Child{}; }; ということができると思うのですが、Hogeの中のChildクラスへのポインタをTestに含める場合はどうしたら良いでしょうか? イメージとしては下記のような感じなのですが、コンパイルエラーがでます。 環境はVC2008です。 class Hoge::Child; class Test { Hoge::Chiled *p; }; class Hoge { public: class Child{} }; classHogeの中身を先に宣言すればいいじゃん。というのは無しでお願いします。循環参照とかをするのが目的なもので・・。
829 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 18:29:23 ] class Test{class Hoge{class Child{};};Hoge::Child *p;}; typedef Test::Hoge Hoge;
830 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 19:15:36 ] たのむ>>820 に答えてくれググッても見つからん
831 名前:818 mailto:sage [2010/05/07(金) 19:23:38 ] >>830 > ググッても見つからん んなわけねーだろwww と思ったら本当に見つからないな。 まあ別に使わなくても書けるから心配するな。
832 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 21:44:40 ] ネストされたクラスは、それを囲んでいるクラスの定義内でしか 前方宣言できない。そのため、Foo::Bar* ポインタを操作するヘッダファイルには、 Foo のクラス宣言をすべて入れておく必要があるだろう。 無理っぽいね
833 名前:デフォルトの名無しさん mailto:sage [2010/05/07(金) 23:01:57 ] >>828 Test も内部クラスにするのは駄目なん?