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
116 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:12:47 ] [i][(i + 1) % 3] を [i * N + (i + 1) % N] にするだけでしょ。
117 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:14:36 ] for 使うなら % だろうけど、逆向きの時は少し注意が必要(i が負になるとマズい)。
118 名前:デフォルトの名無しさん [2008/03/16(日) 02:21:37 ] >>116 i=0 0*3+(0+1)%3 = 0 i=1 1*3+(1+1)%3 = 3 i=2 2*3+(2+1)%3 = 7 こうなるんじゃないんですか?
119 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:23:30 ] >>118 頭大丈夫か
120 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:26:40 ] 小学生からやりなお(ry
121 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 02:26:50 ] >>118 とりあえず今日はもう寝とけ
122 名前:デフォルトの名無しさん [2008/03/16(日) 02:26:54 ] >>119 すいません勘違いしてました どうもありがとうございました
123 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:30:09 ] ∧∧ / 中\ ( `ハ´) いつになったら福田康夫は日本人が犯人だと認めるアルか ( ⊃┳⊃ c(_)ヘ⌒ヽフ 【中国産・毒ギョーザ】日本人が“犯人”? 共同通信の日本人記者拘束で中国のネット世論沸騰★5 (朝日(-@∀@) mamono.2ch.net/test/read.cgi/newsplus/1204264902/ ≡≡≡ ◎―◎⊃⊃ キコキコ
124 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 11:40:32 ] 毒餃子は中国工場内での混入がほぼ間違いなくなったよな。 濃度は3000ppmって。。漬け置きレベルらしいな。 シナはどこまでも外道。オリンピック開催させるなよ。
125 名前:デフォルトの名無しさん [2008/03/16(日) 11:41:33 ] 102です。以下のように実装してみて、動作することを確認しました。でも2点質問させてください。 (1)vectorを継承した方で、size()はusingsしておけばいいといわれましたが、やり方がわかりません。 でも知りたいのでどうか教えてください。 (2)同じくvectorを継承した方で、public継承するのはよくないと言われましたが、(繰り返しになりますが) private継承するとpush_back等のvectorクラスの機能が使えないと思います。ここはどうするべきなのでしょうか? template <typename T> class ring_vector { public: T operator[](const int n) const { int index = (n >= 0) ? (n % v.size()) : (v.size()-(-n % v.size())); return v[index]; } std::vector<T> v; }; template <typename T> class ring_vector2 : public std::vector<T> { public: T operator[](const int n) const { int index = (n >= 0) ? (n % this->size()) : (this->size()-(-n % this->size())); return std::vector<T>::operator[](index); } };
126 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 12:00:48 ] >>125 (1)レスを追ってないから知らん (2)転送関数
127 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:00:00 ] Linux+gccでCPUの型番や周波数などを取得する方法を教えてください
128 名前:103 mailto:sage [2008/03/16(日) 13:00:16 ] >int index = (n >= 0) ? (n % v.size()) : (v.size()-(-n % v.size())); >>103 のは元のソースがreturn [index % size()];なので、それを前提としてたんだけど・・・。 return v[index];にするなら、負の数の方も、もう一度%しないと、 n == -size() のとき、return v[size()]; になっちゃうよ。
129 名前:103 mailto:sage [2008/03/16(日) 13:02:20 ] return v[index]; を return v[index==size()?0:index]; にするのでも良いけど。
130 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:04:24 ] >>125 ring_vectorの方で良いよ。 継承するの変だと思うし。
131 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:04:53 ] system("cat /proc/cpuinfo");
132 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:12:54 ] クラスで場合によっては定義しない変数は宣言できますか? ありましたら、どうすればいいか教えてください。
133 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:17:07 ] template <typename T> class ring_vector3 : private std::vector<T> { typedef std::vector<T> parent; public: T operator[](const int n) const { int index = (n >= 0) ? (n % this->size()) : (this->size()-(-n % this->size())); return parent::operator[](index); } using parent::push_back; }; みたいな。
134 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:24:34 ] >>132 質問をもう少しkwsk
135 名前:デフォルトの名無しさん mailto:sage [2008/03/16(日) 13:26:44 ] >>132 使わなければ
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(); } }