1 名前:デフォルトの名無しさん mailto:sage [2008/02/28(木) 00:00:47 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
136 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:32:21 ] 使わなくても定義は必要じゃね
137 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:38:31 ] だから、仮想デストラクタを持たないvectorを継承すんなよw
138 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:40:56 ] そろそろvirtualから離れようぜ
139 名前:133 mailto:sage [2008/03/16(日) 13:48:13 ] 何か問題が?
140 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:53:31 ] >>139 使い方によってはvectorのデストラクタが呼ばれないことがある。
141 名前:133 mailto:sage [2008/03/16(日) 13:56:17 ] 使い方?vector<T> *にキャストする話? 出来るの?private継承なのに。
142 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:14:38 ] >>141 定義をそれ以上いじらなければ問題ないっしょ。 std::vector<T>* p() {return this;} みたいなメンバ関数を追加したりすれば、 privateな継承でも基底のポインタが得られるので、 単にprivate継承であるというだけで常に安心できるわけではない。
143 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:17:26 ] それをdeleteしたら吹くw
144 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:23:24 ] そんなメンバをつくって、しかもdeleteしちゃうような輩は、 vector<int> v;を使わせても delete &v[1];とかするだろうなw
145 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:25:01 ] イテレータは循環するようにしなくていいのか?
146 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:28:34 ] ちょw end()どこだよw コンテナじゃないんだし、いらないっしょ
147 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:35:21 ] どのイテレータをインクリメントしてもendと等しくはならない、とか
148 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:46:28 ] STLのアルゴリズムに食わせられないじゃん
149 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:48:38 ] >>134-135 extern BMPImgData bmpA; extern BMPImgData bmpB; class BMPImgData { public: HDC mHdc; int w; //幅、高さ int h; int anmx; int mv; //・・・・ //↓bmpAには不要 POINT ptgt; //リアルマップ座標(移動)0~10 POINT tgt; //目標リアルマップ座標 POINT Root[MAX_MAPX][MAX_MAPY]; //マップ座標 //・・・ BMPImgData(); ~BMPImgData(); }; 多次元とか宣言すると不安で不安で。 もしかして宣言ってメモリ確保しなければ全然処理重くならないですか? すげえ初歩ですが。
150 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 14:53:38 ] メモリを喰うのが嫌ならクラスを分けるか、 動的に確保するしかないかと
151 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:03:56 ] >>149 bmpAに不要なメンバを BMPImgData から除去して、BMPImgDataを継承した別クラスBMPImgData2にそのメンバを追加すれば? BMPImgData bmpA; BMPImgData2 bmpB; もちろん、クラス名は適切に。
152 名前:デフォルトの名無しさん [2008/03/16(日) 15:13:50 ] namespace AAA { void func() {} } class Hoge { friend void AAA::func(); }; とするとコンパイルできません。どうすればよいですか?
153 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 15:15:57 ] >>152 >どうすればよいですか? コンパイルエラーのメッセージを書く。 そのメッセージについて>>152 が何を考えて、何が分からないのかを書く。 エラーメッセージの内容を調べて無いなら、調べてから出直し。
154 名前:149 mailto:sage [2008/03/16(日) 16:02:00 ] >>150-151 ありがとうございます。^^
155 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:02:38 ] >^^ むかつくからやめろ
156 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:11:29 ] ^^;
157 名前:デフォルトの名無しさん [2008/03/16(日) 16:20:40 ] --;
158 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 16:54:21 ] (;:. @u@)
159 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:08:37 ] vectorやらlistを使用する際 コンストラクタで指定した長さ以上の要素を食わせるとどうなるのでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:09:22 ] >>159 「食わせる」って何?
161 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:10:32 ] ああ、すいません 要素数20のlistに21個目の要素を追加しようとするとどうなるのかなぁと
162 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:11:03 ] int型の変数をchar型の配列にするにはどうすればいいのでしょうか?
163 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:13:13 ] >>161 そりゃ、追加されるんだろ。
164 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:15:17 ] >>161 STLのコンテナは、追加はいくらでもやってよい。 コンストラクタで要素数を指定するのは、 あらかじめメモリを確保しておくことで、後から再確保するのを防ぐ、単なる最適化に過ぎない。
165 名前:164 mailto:sage [2008/03/16(日) 18:17:49 ] すまん、reserveと勘違いした。 コンストラクタで指定した要素数は、ちゃんと要素が追加されるよな。
166 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:21:25 ] v[20] = 1; とかで追加した気になってるかもしれないから 「追加」 の定義をきちんと聞いておいた方がいいぜ。
167 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 18:26:50 ] >>166 それは既存要素に対する代入だろ。sizeには反映されない。 下手したらコンテナの整合性を壊す。 て、>>166 は言いたいんだと思う。
168 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:11:13 ] >>162 やりたいことをもっと明確に説明しないと回答のしようが無い。 たとえば12345という値を持つint型変数があったとして、どのような状態のchar配列が欲しいんだ?
169 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:32:59 ] >>162 int型をchar型の要素数4(とは限らんが)の配列として扱うの? それなら共用体になるが
170 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 19:45:07 ] ありがとうございます 共用体しらべてみます
171 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 20:19:59 ] >>170 エンディアンには気をつけてな どうせsprintfとかいうオチだとは思うが
172 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:21:29 ] www.imgup.org/iup575962.jpg.html ・・・VISUAL C++というソフトを使っていたら突然こうなりました OSはVISTAで、これ以降いくらプロジェクトを作成しようとも、どうやら自動生成されるファイルが欠落しているようです アンインストール、再インストールも試しましたが無駄でした、当然管理者権限もです。 どうすればいいでしょうか?
173 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:32:10 ] メッセージのファイルはあったか?あったらそれを直接クリックしてみな。
174 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:36:03 ] >>173 なかったです、正常動作している友人のプロジェクトフォルダを丸ごとZIPで送ってもらったら DEBUGフォルダがありましたが、自分のほうでは生成されなくなってました
175 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:38:59 ] ウイルス・・・じゃないよな? 今までは正常に実行できてたんだよな?
176 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:48:51 ] ないってことは、コンパイルされた結果のファイルが無いんだな。 リビルドして、出力ウインドウにエラーメッセージがないか確認するべし。 プロジェクトのプロパティーページのリンクの項の出力ファイルのパスを確認しよう。その友人のプロジェクトが絶対パスになってないか?
177 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:51:08 ] VC2005 って Vista に対応してたっけ?
178 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:57:08 ] Vista対応パッチがあるという話は聞いたゾ。俺Xpだからよくわかんね
179 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 23:57:50 ] >>176 // test.cpp : コンソール アプリケーションのエントリ ポイントを定義します。 // #include "stdafx.h" int _tmain(int argc, _TCHAR* argv[]) { return 0; } これに int main(void) { return 0;} これを書き足してリビルドしたら 1>------ すべてのリビルド開始: プロジェクト: test, 構成: Debug Win32 ------ 1>プロジェクト 'test'、構成 'Debug|Win32' の中間出力ファイルを削除しています。 1>コンパイルしています... 1>stdafx.cpp 1>test.cpp 1>コードを生成中... 1>マニフェストをリソースにコンパイルしています... 1>リンクしています... 1>LINK : 前回のインクリメンタル リンクで C:\Users\owner\Desktop\Documents\Visual Studio 2005\Projects\test\Debug\test.exe が見つからなかったか、ビルドされませんでした。フル リンクを行います。 1>LINK : warning LNK4067: エントリ ポイントがあいまいです。'mainCRTStartup' が選択されます。 1>マニフェストを埋め込んでいます... 1>ビルドログは "file://c:\Users\owner\Desktop\Documents\Visual Studio 2005\Projects\test\test\Debug\BuildLog.htm" に保存されました。 1>test - エラー 0、警告 1 ========== すべてリビルド: 1 正常終了、0 失敗、0 スキップ ========== で、ぱっとみは何とかなったみたいです 再度printfをためしてみます 一旦ありです
180 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:01:22 ] えー
181 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 00:04:13 ] mainは一個でいいです。どちらか一方だけにしましょう。
182 名前:デフォルトの名無しさん [2008/03/17(月) 04:09:01 ] イテレータを循環に、ってできるのですか?
183 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 04:26:18 ] 演算子オーバーロードすればできるんじゃね?
184 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 07:29:05 ] 自分でイテレータを作れば。
185 名前:デフォルトの名無しさん [2008/03/17(月) 09:09:35 ] >>183-184 自分でイテレータってつくれるんですか? あと、演算子のオーバーロードでできるんでしょうか?
186 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 09:11:19 ] できるっていってるじゃない。
187 名前:デフォルトの名無しさん [2008/03/17(月) 10:44:58 ] >>186 もうちょっとだけ具体的に言ってみてよ。
188 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 10:54:37 ] >>187 何を?
189 名前:デフォルトの名無しさん [2008/03/17(月) 11:09:18 ] 独自イテレータのつ•く•り•か•た
190 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:13:53 ] 質問すればいいじゃん
191 名前:デフォルトの名無しさん [2008/03/17(月) 11:16:27 ] ググッたけどわかりませんでした。
192 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 11:33:44 ] class iterator {}; できあがり。 これ以上具体的な回答は、質問が具体的でない限りあり得ない。
193 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:03:46 ] ありえないのはオマエの禿頭
194 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:19:10 ] ムキになるなよw
195 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:27:01 ] ムケてるのはオマエの禿頭
196 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 13:41:30 ] ムケてないのか…
197 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 14:24:11 ] 包茎で無能じゃ救いようがないよ・・・
198 名前:デフォルトの名無しさん [2008/03/17(月) 14:39:59 ] 包茎で無能だけど禿げてはいないぞ(怒)
199 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:12:57 ] しまった……全部に当てはまる……。
200 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 15:35:27 ] 包茎で禿げてるから、無能と呼ばれないように頑張るわ……
201 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 20:56:53 ] 包茎で禿で不能です
202 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:45:45 ] operator==とかの引数の対称性って手動で保守するしかないんですか? こういうやつ↓ bool operator==(const A& lhs, const B& rhs) {...} bool operator==(const B& lhs, const A& rhs) // これを自動化したい { return rhs == lhs; }
203 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:52:23 ] boost
204 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 21:52:26 ] >>202 Boost.Operatorsにまとめられている。 その例だと、Aがequality_comparable<A, B>を継承して、 operator==(const A& lhs, const B& rhs)を定義すれば、 operator==(const B& lhs, const A& rhs)とoperator !=が作られる。
205 名前:デフォルトの名無しさん [2008/03/17(月) 22:56:40 ] 大体の人はよく使う関数などをまとめた個人用ライブラリを作ってると思うのですが どのように管理しているんでしょうか? * mylib/*.{h,c} と一つのディレクトリにヘッダとソース。 * mylib/include/*.h,mylib/src/*.c で mylib/lib/libmylib.a とか。 普通のライブラリ風に。 で使うときにはどうしてます? * mylib ごとコピーして? * mylib/include/ とかにパスを通してる。で -lmylib どうすると楽なのか悩んでます。
206 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:59:48 ] 不良債権が流行った頃 護送船団とか何とか叩いておいてアメリカがこの様なわけだが
207 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 22:59:54 ] >>205 コンパイラオプション (多分 -I) + makefile
208 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:44:55 ] クラスAがあり、クラスBがクラスAのインスタンスのポインタpを持っている形のプログラムがあります。 クラスAにはchar変数textがあり、クラスBからsprintf(p->text, "test");を実行します。 この時エラーが起きてプログラムが強制終了するのですが、何かおかしな手順を踏んでいるのでしょうか?
209 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:47:16 ] if文とfor文だけで一次元配列を大きい順にソートしたいんですけど 自分の力量では出来ませんでした。 やり方を教えてください。
210 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:50:39 ] >>208 クラス定義を貼れ
211 名前:デフォルトの名無しさん mailto:sage [2008/03/17(月) 23:56:47 ] >>209 ソートでググれ。
212 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:08:51 ] >>210 クラス定義はしてあります。
213 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:11:05 ] ぬう。言葉が通じない
214 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:12:11 ] >>208 ・pがAのインスタンスを指していない。 ・pが指しているAのインスタンスはすでに死んでいる。 ・A::textが5byteに満たない。 ・sprintfの前までに何かメモリを壊している。 ・その他 この中のどれなのか判定してやるから、ソースを貼れと言ってるの
215 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:15:58 ] 意味をはき違えました。 コードが非常に長いので今編集しています。
216 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:29:58 ] class Task { public: void Add(Task *obj, LPCSTR name);//インスタンスを登録する関数です。 Task* Find(char *name);//インスタンスのポインタを返す関数です。 void Do();//登録されたインスタンスのExec();を実行 protected: virtual void Exec(); } class Font : public Task { public: char text[10]; protected: void Exec(){ cout << text << endl; } } class Edit : public Task { public: Init(){ font=(Font*)Find("font"); } void setFont(){ sprintf(font->text, "text"); } private: Font *font; protected: void Exec(){ setFont(); } }
217 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:30:21 ] main() { Task task; task.Add(new Font(), "font"); task.Add(new Edit(), "edit"); while(true) task.Do(); } 色々大量に省きましたが大体こんな感じです。
218 名前:208 mailto:sage [2008/03/18(火) 00:33:47 ] すいません、自己解決しました。
219 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:37:07 ] EditのInit()はどこで呼ばれてんの
220 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:41:22 ] >>205 これ俺も気になる。なかなか話題にもならないし、ぐぐっても出てこないし、 みんなどうしてるって疑問は昔からあった 俺は mylib/include、mylib/source、mylb/lib にして、 include、lib にパスを通す派
221 名前:208 mailto:sage [2008/03/18(火) 00:45:27 ] >>219 Add内に実行する部分があるのでそこで実行されてます。 上のだと省いてます。 インスタンスの登録順序のせいでポインタが格納できていないのが問題でした。
222 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:51:13 ] >>220 コピーしたら元を変更したときにコピーした数だけ更新してまわらないといけないだろ。 ディレクトリ分けてパス指定するのが当然だから、話題にもならないんじゃない?
223 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 00:55:36 ] Visual C++で FileInfo^ fi = gcnew FileInfo(filename); __int64 size = fi->Length; のように取得したファイルサイズを32bitに変換し、さらにリトルエンディアンに変換した後、 バイナリでファイルに書き出したいのですが、何か良い方法はありますか?
224 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:00:11 ] >>223 c++/cliは別スレで。
225 名前:208 mailto:sage [2008/03/18(火) 01:01:47 ] 文字列代入でつまりました。 LPTSTR text; _stprintf(text, "text"); これでエラーが起こるのですが、正しくはどうすればいいのでしょうか?
226 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:02:01 ] >209 とりあえず速度とか、プログラムらしさというのを全く気にしなくて良いなら(勉強の一貫なら) 一度、数字の書いたカードを手作業で並べ替えてみるといいかもしれない。 そのときの手順を1つ1つメモしていくんだ。
227 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:04:09 ] >>225 text はどこを指しているのか。
228 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:04:26 ] >>223 VC++なら、x86だから元々リトルエンディアンですが。 つーか、下位バイトから順番に出力すればいいのでは?
229 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 01:07:32 ] >>226 やってみます・・・
230 名前:208 mailto:sage [2008/03/18(火) 01:08:08 ] >>227 ありがとうございました。 TCHAR関係すべて勘違いしていました。
231 名前:202 mailto:sage [2008/03/18(火) 01:30:50 ] >>203 ,204 レスthx いろいろなoperatorを定義する時に便利そうですね。 でも、operator==だけを見ると、あまり便利に感じないです。 // Hoge.cpp #include "A.h" #include "B.h" bool operator==(const A& lhs, const B& rhs) {...} というのを考えていたので、Aに修正を加えないといけないのがちょっと・・(Bはそのままというのも気になる)。 普通に定義することにします。
232 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:07:56 ] 209です。ググったりしたのですが難しいです。 よろしければ手直ししていただけませんか。Visual C++ 6.0です。 int hairetu(int jun[N]){ int max,j,k,retu[N],jun2[N]; for(j=0;j<N;j++){ jun2[j]=jun[j]; } for(k=0;k<N;k++){ for(j=0;j<N;j++){ if(max<jun[j]) max=jun[j]; jun[j]=jun2[k]; } retu[k]=max; max=retu[k]; } for(j=0;j<N;j++){ jun[j]=retu[j]; } return(jun[N]); }
233 名前:デフォルトの名無しさん [2008/03/18(火) 02:12:58 ] 開発環境はVS6、コードはANSIです。 _msize()ってmalloc()やrealloc()などで 指定したメモリサイズを返すと思ってましたが、 つなげるランタイムライブラリによって変わるのですか? 現状でコンパイルオプション「コード生成」の「使用するランタイムライブラリ」を 「シングルスレッド(デバッグ)」にすると指定したサイズ、 「シングルスレッド」にすると指定したサイズから直近の16の倍数値が返ってきます。 これってC言語をする人にとって知ってて当たり前のことなんですか? それともオプションで調整できることなんですか?
234 名前:205 [2008/03/18(火) 02:17:24 ] >>207 ,220 やっぱりそういう感じになるんですかね。 >>222 そう思ったんですけど頻繁に mylib は更新されて少し前に書いたものが コンパイル通らなくなったりして結局使ってる側を修正しないといけなかったりで… どうするといい感じに管理できるのかなぁと。
235 名前:208 mailto:sage [2008/03/18(火) 02:17:32 ] >>232 バブルソートでググってみ。 選択ソート、挿入ソートでもOK。 それでダメなら、並び変えるときに自分がどういう手順を追っているか考えてみ。 10 8 3 5 7 1 6 2 4 9 ↓ 1 2 3 4 5 6 7 8 9 10 1つずつ動かして、その手順を元にコード起こす。
236 名前:デフォルトの名無しさん mailto:sage [2008/03/18(火) 02:19:42 ] >>232 とりあえず要素5つくらいの配列を考えて、そのプログラムを動かすと配列の要素がどう変わっていくかを 紙の上で1ステップずつ書き出してみな。 ・勉強したアルゴリズムの通りに並んでいかないなら、プログラムのロジックが間違っている。 ・ググって調べたアルゴリズムがまだ理解できていないなら、まずはそれを理解するとこ。 アルゴリズムの説明が欲しいなら、どこか適切なスレへ。 ・自分で書いたプログラムがどういう動作になるのかを追えないなら、勉強不足。 C言語の仕様的に分からないことがあるなら、また質問してみれば?