- 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でのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
- 802 名前:デフォルトの名無しさん [2009/04/03(金) 22:38:38 ]
- 彼女 『大体、256色ってなに?しかもデフォルト16色のゲームまであるしw
こんなので満足できるの?しょぼいエロゲならこの色数でいいのかも知れないけどさw スーファミじゃないんだからさ。分かるでしょ?だいたいアメリカと日本って時差が あるのよ、どうやって寝てる人とやり取りすんのよ?それに外部から操作なんて、画面 もみないでどうやって操作すんのよ?あんたおかしいんじゃない?』 おいら『...』 彼女 『うわー音が汚いwなにこれ?FM音源?だけなの? PCMは?MIDIは?使ってないの?』 おいら『...そうだ、C++のコンパイラからまず作らないとだめだな。。。.』 彼女 『動きが汚ーい!遅ーい!最低ー! スプライトもないのに多重スクロールなんて見栄張って馬鹿じゃないの? なにこのカクカクスクロールは?ファミコン以下じゃん!』 おいら 『...俺の話も聞いてくれよ。ほんとにいいアイデアなんだって!当たったらデカイよ?』 彼女 『しょうがないからうちでX68000で遊ぶ? 出たなTwinBee!やファイナルファイトの2Pプレイとか楽しいよ?』 おいら『うん...(今まで誰もおいらの話をまともに聞いてくれないんだよな。どっか間違ってんのかな。。)』
- 803 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 22:39:50 ]
- 女の我侭は異常
おいら『パソコン買ったから遊びに来る?ゲームも出来るよ!』 おんな『シネよキモデブ。二度と話しかけんな』
- 804 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 23:40:26 ]
- >803
ついでに此処へも書き込みしないでいいよ。
- 805 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 23:42:50 ]
- コピペとしてはまだまだいけてないな
もっとブラッシュアップしてくれ
- 806 名前:デフォルトの名無しさん mailto:sage [2009/04/03(金) 23:48:07 ]
- ヘルプです。環境は「mingw32,gtk,fc10+rawhide,wine」
やりたいことは「stdin(fd=0)からCALLBACK関数」で、 順次データを読み出すだけなんですが、私の環境ではうまく動かないです。 止まったり、データがなくなったり。Fedoraの板でサワイでたんですが、 もう諦めモードにはいってきたTT;mingw32環境ある方、試してもらえないでしょうか? よろしくお願いします。以下、サンプルソース #include <unistd.h> #include <stdio.h> #include <gtk/gtk.h> int main(int argc,char **argv); gboolean inputcb(GIOChannel *source,GIOCondition condition,gpointer data); GIOChannel *gio; int main(int argc,char **argv){ gtk_set_locale(); gtk_init(&argc,&argv); gio = g_io_channel_unix_new(0); fprintf(stderr,"gio(%d,%d)\n",(int)gio,G_IO_IN); g_io_add_watch(gio,G_IO_IN,(GIOFunc)inputcb,NULL); gtk_main(); return 0; } gboolean inputcb(GIOChannel *source,GIOCondition condition,gpointer data){ char temp; fprintf(stderr,"gio(%d,%d,%d)\n",(int)source,condition,(int)data);fflush(stderr); read(0,&temp,1); fprintf(stderr,"temp(%d)\n",temp);fflush(stderr); return TRUE; }
- 807 名前:デフォルトの名無しさん [2009/04/04(土) 11:28:40 ]
- スマポで質問があります。
class MainClass; class SubClass { public: void func2(MainClass* mc) {} }; class MainClass { public: MainClass() : m_SubClass(new SubClass()) {} ~MainClass() {} void func1() { m_SubClass->func2(this); // このthisをスマポ(shared_ptr)にする方法はありますか? } private: boost::shared_ptr<SubClass> m_SubClass; }; int main() { MainClass m; m.func1(); return 0; } どうかよろしくお願いします。
- 808 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 11:31:52 ]
- お前どう見てもスマポの使い方判ってないからやめとけ
- 809 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 11:39:33 ]
- scoped_ptrでいいじゃん
- 810 名前:デフォルトの名無しさん [2009/04/04(土) 11:39:47 ]
- >>808
どうしてですか? private:でshared_ptrにしたからですか? なんとか使えるようになりたいんです。 どうかお願いします。
- 811 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 11:39:49 ]
- >>808
なんつー的確な指摘w
- 812 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 11:40:58 ]
- どっちかとういうとthisがまったくわかってないじゃないか?
- 813 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 11:46:52 ]
- なんつーか、『オムレツ作りたいんです! 教えてください!』と言って来た奴が
材料として卵とチェーンソーと蚊取り線香を持ってきたような感じ。 ただ判ってないだけじゃなくて、判ってないままあらぬ方向に突き進んでいる。
- 814 名前:デフォルトの名無しさん [2009/04/04(土) 11:49:53 ]
- 色々返事くれてありがとう。
void func2(MainClass* mc) {} ここなんですが、最初は void func2(boost::shared_ptr<MainClass>& mc) {} こう書いてました。でもこれだと呼び出し元でthisを引数にしたとき コンパイルが通りませんでした。スマポの使い方として、生のポインタは 基本的に全部スマポで置き換えるのが正しいと思うのですが、そうすると thisはどうやって渡せばいいかわからなかったので。。。
- 815 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 11:50:37 ]
- オムレツ作りたいんです!
はいいけど、君それ、手に持ってるのゆで卵だよね? みたいな。
- 816 名前:デフォルトの名無しさん [2009/04/04(土) 11:51:37 ]
- >>813
なにか肝心なもの(フライパン)が抜けてるということですか?
- 817 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 11:59:38 ]
- とりあえずconst
- 818 名前:デフォルトの名無しさん [2009/04/04(土) 12:08:37 ]
- m_SubClass->func2(boost::shared_ptr<MainClass>(this));
こう書くとAssertionに引っかかるし、、、 これって循環参照になってるから?
- 819 名前:デフォルトの名無しさん [2009/04/04(土) 12:26:50 ]
- プログラム中に可変で動的にメモリ確保をしたいのですが
Animationset m_animset; という構造体があり、m_anim->GetAnimset(); というメソッドで個数が取得できます m_animsetを最初から配列で100個くらい作っておけば問題ないのですが 可変で作る場合はどうすればいいのですか?
- 820 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 12:28:59 ]
- >>819
vectorつかう
- 821 名前:デフォルトの名無しさん [2009/04/04(土) 12:29:56 ]
- >>820
ありがとうございますvectorについて調べてみます
- 822 名前:デフォルトの名無しさん [2009/04/04(土) 12:36:32 ]
- ダブルポインタでいいだろ
Animationset **m_animset;
- 823 名前:デフォルトの名無しさん [2009/04/04(土) 12:57:52 ]
- vector<AnimationSet> m_animset;
for(DWORD i = 0; i < m_animectrl->GetNumAnimationSets(); i++) { m_animset.push_back(i); m_animectrl->GetAnimationSet(i, &m_animset[i].pAnimSet); } という風にしたのですが 'std::vector<_Ty>::push_back' : 1 番目の引数を 'DWORD' から 'const AnimationSet &' に変換できません とエラーが出ます メモリを確保するにはどうすればいいのでしょうか・・・・
- 824 名前:823 [2009/04/04(土) 13:05:05 ]
- for(DWORD i = 0; i < m_animectrl->GetNumAnimationSets(); i++) {
AnimationSet anim; m_animset.push_back(anim); m_animectrl->GetAnimationSet(i, &m_animset[i].pAnimSet); } という風にしたらできました
- 825 名前:デフォルトの名無しさん [2009/04/04(土) 13:39:00 ]
- 何が出来たの?
- 826 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 13:50:42 ]
- >>807
enable_shared_from_this使えばいいんでないの?
- 827 名前:デフォルトの名無しさん [2009/04/04(土) 13:55:39 ]
- >>825
欲しい分だけメモリ確保です
- 828 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 14:20:58 ]
- コピコンあるのね把握した
- 829 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 17:57:33 ]
- >>822
ダブルポインタって、ただのポインタのポインタとなにが違うんですか?
- 830 名前:>>829 [2009/04/04(土) 18:37:39 ]
- Ragnarok **m_ragna;
- 831 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 18:39:38 ]
- >>829
その言葉を使う人間ができるプログラマかどうか。
- 832 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 20:14:39 ]
- ダブルポインタ、なんて変な言葉使う人間こそプログラマじゃないだろうな
- 833 名前:デフォルトの名無しさん [2009/04/04(土) 20:35:11 ]
- >>826
enable_shared_from_thisを使ってみましたが、コンパイルは通るけど実行すると Boostが例外を投げます。 class MainClass; class SubClass { public: template <class T> void func2(boost::shared_ptr<T>& mc) {} }; class MainClass : public boost::enable_shared_from_this<MainClass> { public: MainClass() : m_SubClass(new SubClass()) {} ~MainClass() {} void func1() { m_SubClass->func2(shared_from_this()); } private: boost::scoped_ptr<SubClass> m_SubClass; }; int main() { MainClass m; m.func1(); return 0; }
- 834 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 20:42:29 ]
- >>833
ああごめん。大元のm自体をshared_ptrに格納するようにしないとshared_from_this()も使えないよ。
- 835 名前:デフォルトの名無しさん [2009/04/04(土) 20:54:19 ]
- >>834
ありがとうございます。 >大元のm自体をshared_ptrに格納する というのは、 boost::scoped_ptr<SubClass> m_SubClass; を boost::scoped_ptr<SubClass> m_SubClass; とするということですよね? そうしてもBoostから例外を投げられます。聞いてばかりですいません。。
- 836 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 20:59:29 ]
- >>835
違う違う、こっち。 int main() { boost::shared_ptr<MainClass> pm(new MainClass); pm->func1(); return 0; }
- 837 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:09:54 ]
- >>832
俺、ポッぽインタって言っている で、3つはぽっぽっぽインタだな
- 838 名前:デフォルトの名無しさん [2009/04/04(土) 21:10:23 ]
- >>836
なるほど、動きました! thisがboost::shared_ptr<MainClass>でなければならなかったということですね。 本当にありがとうございました。
- 839 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:17:04 ]
- C++再考 という本のサンプルコードの一部です、コンパイルすると、下記のエラーが出ます
何処がおかしいのでしょうか? VS2005 pro SP1 winXP SP3 #include <iostream> using namespace std; class Expr_node { friend ostream& operator<<(ostream&, const Expr&); friend class Expr; int use; protected: Expr_node():use(1){} virtual void print(ostream&) const = 0; virtual ~Expr_node(){} }; error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません error C2143: 構文エラー : ',' が '&' の前にありません。
- 840 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:22:15 ]
- >>839
friend ostream& operator<<(ostream&, const Expr_node&); Exprなんて型ないからExprを変数名だと推定してる
- 841 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 21:28:37 ]
- >>839
なぜエラー行を抜いた class Expr;を前方宣言か?
- 842 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:05:38 ]
- >>814
> スマポの使い方として、生のポインタは > 基本的に全部スマポで置き換えるのが正しい どこからそんなアホな理屈が出てきたんだ?
- 843 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:10:59 ]
- 全部が全部正しいとは思わないが
C++ Coding Standardsでは「できれば」スマポを使うべきだとしているし Googleコーディング標準でもスマポがいいねって書いてあるから まぁ初心者はそのくらいの気持ちでもいいかも。 ただ、だからといってboostを使うのではなく 一度は自前で参照カウンタつきのスマポを設計してみる必要があるんじゃないだろうか。 ちんぽちんぽ。
- 844 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:16:10 ]
- Accelerated C++でもネタになってるな>スマポの自作
- 845 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:17:31 ]
- >>843
貴方の自前の参照カウンタつきのスマポ見せて、まんこ、まんこ
- 846 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:30:40 ]
- >>843
>807 の例は参照に置き換えれば済むだろう。 所有権の移動や共有のためのポインタ引数なんてそんなに多いとは思わない。
- 847 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:33:15 ]
- >>846
ああなるほど。 確かに、参照が使えるところには ポインタよりも参照を使うべきだというのには同意。
- 848 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 22:33:25 ]
- もうね、スマポ
- 849 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 23:01:56 ]
- >>840
>>841 スマンカッタ 大きな勘違いというか、錯誤していた 前方参照も、後方参照もあったもんじゃない、一つのincludeファイルに、全てのクラスを書いて、混乱してしもうた もちついて、1ファイル、1クラスに書き直して、本の順番でヘッダーを書いて、規則通り読み込ませたら スコーンと一発でコンパイルできてもうた、全部晒してもいいが、長くて迷惑になるので、止めておくが 多少の誤植や、ミススペルは、このクラスの本になると、いたしかないかなと、思う最近なのですが、丁寧に〜.h、〜.cppはこれです なんて書いてないので、仕方ないかなと思ったりする、内容は良い本なのだけどね
- 850 名前:デフォルトの名無しさん mailto:sage [2009/04/04(土) 23:13:03 ]
- 今写経していた、C++再考 第8章 オブジェクト指向プログラムにもスマートポインタの原型のような、技法が載っていたよ
コピーコンストラクタで、カウンタを1増やし、デストラクタで-1してカウンタが0になったら、 オブジェクトを破棄するという、実に巧妙な仕組みだね
- 851 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 00:35:28 ]
- コピーコンストラクタ....ってなんだっけ。忘れちゃったよ、だめぽ
- 852 名前:デフォルトの名無しさん [2009/04/05(日) 02:50:30 ]
- 関数にクラスを値渡しするときに呼ばれるやつ
- 853 名前:デフォルトの名無しさん [2009/04/05(日) 02:51:41 ]
- >>846
Boost::shared_ptr使うよりも、参照にしたほうがよいということですか?
- 854 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 02:59:29 ]
- >>853
所有権の移動や共有が必要ないなら、当然。
- 855 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 06:56:41 ]
- 下のクラスをビルドして実行するとコンストラクタでvectorがエラーになります
どこがまずいのでしょうか?? struct pointV { int x ; int y ; }; class Test { std::vector<pointV> vecTest ; public: Test() { vecTest.reserve(8) ; vecTest[0].x = 0 ; ←ここで発生するみたいです } }; よろしくお願いします
- 856 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:19:16 ]
- reserveじゃなくて、resize
- 857 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 07:50:26 ]
- reserveだと配列の大きさ自体はそのままだったんですね
有難うございました
- 858 名前:デフォルトの名無しさん [2009/04/05(日) 13:08:57 ]
- weak_ptrを使ってよかった、という例があったら教えてください。
自分的には全部shared_ptrで書いておき、問題があったら生ポインタにしちゃえば いいんじゃないか、と思ったんですが。
- 859 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 13:21:17 ]
- >>858 www.google.co.jp/search?q=boost+weak_ptr
- 860 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:25:12 ]
- 256の倍数を入力すると正常な数値を出してくれません
内容はVBのテキストボックスに入力した数値をマイコンに送信し マイコンに転送したCで作った制御プログラムで受け取り外部に転送するものです いろいろ考えてみましたがさっぱりわかりません。よろしくお願いします VB側 dim data(1) as Byte data(0) = CByte(inputData Mod 256) data(1) = CByte(inputData \ 256) comSerial.Output = data comSerial.Output = chr(0) /*c言語*/ /*データ受信(マイコン側のフラグ処理は省略してます*/ unsigned char receive(void) unsigned char data; data = RDR;/*PCから受け取ったデータがあるレジスタRDR return(data); int main(void) { unsigned char data[2]; int i; while(1){ i=0; do{ data[i]=receive(); i++; }while(data[i-1]!='\0'); };
- 861 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:45:50 ]
- >>860
じゃあためしに入力した256の倍数の値と,出力される正常じゃない値を書けよ… あとVBガワのCOMポートはバイナリ?
- 862 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:54:23 ]
- >>861
たとえば1000と入れるときちんと1000が出力というか1000mm動くのですか 1024と入れるとほんの少ししか動きません。 VBがフリーズするときもあります。 VB側はバイナリーです。 よろしくお願いします
- 863 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 14:57:07 ]
- 256の倍数の値ということはdata(0)は0ということなので、マイコンの動作は正常なのでは?
- 864 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:04:18 ]
- >>863
つまり0が送信された段階で'\0'と同じと判断されるのですね 0が怪しいとは思ったりはしましたが「NULLじゃないしな」とかいろいろ考えたりしてました データの終了判断は他の数値にした方がよさそうですね
- 865 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:05:18 ]
- >>862
実機ないから試せないけど,1000まではちゃんと動作確認できたと. あとは 1023 とか 1025 だとどうなる?正常? ついでにVBガワのdata()とCガワのdata[]を標準出力なりファイルなりデバッガなりで期待通りになってるか試せる? > VBがフリーズするときもあります。 なんとなくパリティかボーレートが怪しい気がする. プログラミングしてるなら分かると思うけど,"フリーズ"って種類ありすぎてどうしようもない. for(;;)でもフリーズするし,GUIならウィンドウイベント処理しないだけでフリーズしてるように見える.
- 866 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:06:30 ]
- >>864
そっちかー
- 867 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 15:38:56 ]
- >>865
1023と1025は正常に動作しました Cとは関係ない話になりますがPC側のフリーズは 1024で動かす→正常に動かない→他の動作をVBで実行(正転とか逆転とか) →VBの反応なくなる→タスクマネージャーで強制終了→VB再起動 →「ファイルは既に開かれています」→プロセス見るとVB6.EXEが2つ →後から起動したVB終了→残ったVB6.EXEをプロセス終了→できない こんな感じです。 C側はH8に転送してますので確認は出来ませんが VB側は出来ると思います。 手元にシステムがないので今は無理ですが。 >>864 VBの送信も悪いですが受け取るC側にも問題があるようです
- 868 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:28:42 ]
- >>867
VBが固まるのはMSCOMMのバグかもしれないけど,よくわからん. シリアルポートのデバッグに何か使えそうなソフトあったと思ったんだけど,忘れた/(^o^)\ データの\0は\0\0などにエスケープするようにVBとCで調整すればいいって既にやってそうですねわかります
- 869 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 16:50:15 ]
- >>858
すいません。まだやってません というか\0\0というのは2回送信してCで受け取れってことでしょうか?
- 870 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:08:45 ]
- >>869
まず仕様を確認しろよ \0(=0x00) を終端としてるようだが、それだと 256の倍数で おかしくなるのは当然に思える。
- 871 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:12:01 ]
- そうそう。例えば、inputDataが256のとき、
data(0) = CByte(inputData Mod 256) data(1) = CByte(inputData \ 256) 上は下と同じことだと忘れていない? data(0) = 0 data(1) = 1
- 872 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:13:52 ]
- まずはベーシック手順から
- 873 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:21:54 ]
- エスパーすると、do〜whileのところは
data[0] = receive(); data[1] = receive(); にするのが正しいんじゃないかと思う
- 874 名前:デフォルトの名無しさん mailto:sage [2009/04/05(日) 17:54:13 ]
- みなさんありがとうございます
実習用のテキストだけどこういう感じです(´・ω・`) >>870-871 アッー!!(;゙゚'ω゚') そうだった。1バイト文字だからを終端にしたら256の倍数だと0ですよね >>873 すいません。このプログラムは他の部分を除いて書いてるので 実は受信したデータが'O'だと次の文字見て'F'で正転、'R'で逆転みたいなことしています でも受信したデータでdo〜whileを分ければいいだけでしょうけど ちなみに数値データがある場合は comSerial.Output = chr(80)←数値データあるよ comSerial.Output = data comSerial.Output = chr(0)←データ終わり としています 入力されたデータはこんな感じです dim inputData as Integer inputData = Val(txtData.Text)
- 875 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:13:00 ]
- C++で関数のグラフを作る問題があるんですけど、
グラフィックを表示するにあたって追加でインストール しなきゃいけないものってあるんでしょうか? OSはXP、visual c++ 2005を使用しています。
- 876 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:16:03 ]
- VCありゃいける
GDI使うだろうし
- 877 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:36:12 ]
- >>876
ですが教科書の通りにプログラムしても なぜか動いてくれないんですよね・・・ これが問題ありそうな5,6,7、8行目なんですけど、 void CVc31view::OnDraw(CDC* pDC) { CVc31Doc* pDoc=GetDocument(); ASSERT_VALID(pDoc); で、エラーがこう出ます。 ex3.1.cpp .\ex3.1.cpp(5) : error C2653: 'CVc31view' : 識別子がクラス名でも名前空間名でもありません。 .\ex3.1.cpp(5) : error C2065: 'CDC' : 定義されていない識別子です。 .\ex3.1.cpp(5) : error C2065: 'pDC' : 定義されていない識別子です。 .\ex3.1.cpp(6) : error C2448: 'OnDraw' : 関数の定義が間違っています。
- 878 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 00:51:24 ]
- >>877
CVc31view クラスの宣言はどうなってる?
- 879 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 13:14:25 ]
- >>877
たぶんその教科書の途中からやりはじめたか、教科書自体が「前章の〜参照」ってなってるだけじゃね?
- 880 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 13:54:04 ]
- int* pValue = new int[10];
pValue[1] = 10; のように配列をnewすると、 代入時に*が付かないのに変数にpが付くのがシックリ来ません。 vector使えとか、そういう話とは別に ポインタ変数にpを付けられているかたにお聞きしたいのですが、 こういう場合にもpを付けられていますか? それとも、int value = new int[10]; と書かれてますか?
- 881 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:02:57 ]
- 宗教論争の予感。
- 882 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:05:42 ]
- >>880
コーディング規約に従うだけ。 ポインタにpを付ける規約だとして、pValue[1]でもとくに違和感はない。
- 883 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:09:59 ]
- おれは vector 使うし、ポインタだからって p 付けたりしないし、
話には参加できないな。うれしいぜ。
- 884 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 14:12:42 ]
- >>880
その場合でも、*(pValue + 1) = 10;ならどうよ。余りに下らな過ぎるぞ。 # なんでvaluesじゃないのか、その方が気になる。
- 885 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 15:39:41 ]
- それはpointerだから
- 886 名前:デフォルトの名無しさん [2009/04/06(月) 20:30:01 ]
- クラス内に性的なメンバがあってメモリ割り当てが必要な場合、それを初期化するタイミングは
クラスの外部でするべきでしょうか?
- 887 名前:886 [2009/04/06(月) 20:37:48 ]
- すいません、間違えました。
-性的なメンバ +静的なメンバ あと、この静的なメンバがいまのところprivateになっているので、外部で初期化するには publicに動かす必要があるのですが、意味的には完全にprivateなのでどうすればよいか わからずにいます。 目的としては、多数のオブジェクトを作るのですが、この静的なメンバは画像でクラス全体で 1個あればいいんですが。
- 888 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 20:44:33 ]
- 最初のインスタンスが作られるときにクラスの内側で割り当ててもいいし、そうでなくてもいい。
- 889 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 21:37:18 ]
- 性的結合..いやらしい
- 890 名前:デフォルトの名無しさん mailto:safe [2009/04/06(月) 22:43:42 ]
- >>887
静的メンバ自身のクラスのコンストラクタでやればいいんじゃないの?
- 891 名前:デフォルトの名無しさん mailto:age [2009/04/06(月) 23:20:39 ]
- スマートポインタについて最もよく解説されている本や
webページを教えて下さい。お願いします。
- 892 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:23:47 ]
- 使い方の解説? 実装の解説?
- 893 名前:デフォルトの名無しさん mailto:age [2009/04/06(月) 23:50:57 ]
- 実装の解説でお願いします。
概念はある程度わかるんですが実際 どうやって実装しているのか 分からないんです
- 894 名前:デフォルトの名無しさん mailto:sage [2009/04/06(月) 23:58:06 ]
- 検索すればでてこない・・・?
boostのコードでも見たらどうか。
- 895 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:14:27 ]
- あと、スマートポインタにもいろいろあるけど、どれのこと?
もっとも、基本はデストラクタでdeleteするという点は共通だけど。
- 896 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:26:07 ]
- auto_ptr
- 897 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:35:54 ]
- 質問させていただきます
変数を宣言するときに char buf[1000]; とするのと char buf_0[100]; char buf_1[100]; ... ... char buf_9[100]; として確保するのでは、必要なメモリの量は変わってくるのでしょうか?
- 898 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 00:37:02 ]
- >>897
やってみればいいじゃん。
- 899 名前:デフォルトの名無しさん [2009/04/07(火) 00:59:46 ]
- メモリが連続になるかならないかではないかな
- 900 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 01:17:09 ]
- Cから見えるメモリの使用量は等しいけど、
実際に必要な物理メモリの量は、コンパイラとかターゲット環境によっては違うかもしれない
- 901 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 02:07:25 ]
- >>897
CPUのアラインメントの関係で違ってくるかもしれんな
- 902 名前:デフォルトの名無しさん mailto:sage [2009/04/07(火) 05:58:06 ]
- 例えば、以下のように二次元配列の確保方法はありですか?
コンパイラは通ったんですが、なんか怪しいような。 そして、もしありだとして、delete 文はどのようにかけばよろしいのでしょうか? int (*p)[10] = new int [3][10]();
|

|