1 名前:デフォルトの名無しさん [2008/03/30(日) 01:50:26 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.50【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1204124447/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
2 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 01:53:36 ] ____ ,. -‐''"7__,,..-─ァ |::::::`/ /-‐─-='、> ,、 `ヽ/ `>/ ) ヽ.>|_ヽ/| _,,..-‐'"´ヽ. |/ < ´) Y--‐`''"´:::::::::::::::::/i__,,.. - 、 /| `> 、_) | ̄V::::::::: , 、::::::::::::\| ヽ、,.ノ /::::| < l ) ./___∧::::::くH\:::::::/|-‐'" l__,∧ \ ,イ:;:-‐‐-、__,,.ヽ-、, >:::\|´"'' ー、'"`ヽ /:::::ヽ、 __,>ー-‐<__フ r'´ i:::::::/| | ノ  ̄ ̄ヽ、 ー‐-‐< !、 ゝ__,,..-<::::::\/___,,..-‐''" `ヽr-、..,,_____,,.>フ` ̄|´ヽ. ヽ:/ く/ /| | \/ \/ _____ ___ ____ ___ ___ / ____/ /´ ̄| / ̄l /´ ̄/ /___/ /____/ l ̄l / ̄/ /___/ /__ \ / / .  ̄ ̄  ̄  ̄ ̄ ___  ̄  ̄ ___ / / \ \_l ̄/ /´ ̄ ̄ | /´ ̄ ∨ ̄ ̄/ / __/ / ̄/ / ̄/ | ̄∨ ̄/ / __/ / ̄ ̄ / \_ / / / ̄| | / /l /| / / /___ / /_/ / | / / /___ / /\ \ / / /__/ |_|/,_,/ |,_,/ |,_/ /___/ /____/ | __/ /___/ /_/ \ \ . / / / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\ \ \  ̄  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄  ̄
3 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 01:59:08 ] し、死んでる・・・
4 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 02:01:37 ] (・ω・`)乙 ←ポニーテール
5 名前:デフォルトの名無しさん [2008/03/30(日) 03:00:43 ] 正直、番号なんてどうでもいいよな。
6 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 03:20:29 ] Ver+=9になっとるがな。
7 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 03:27:06 ] >>1 乙 GUIアプリ作りたいけど……中々そこまで勉強が進まない。 delphiとかrubyの方がいいんでしょうかな。
8 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 03:35:17 ] >>1 乙だけど次は54くらいに戻そうぜ もしくは60-6あたりで。 >>7 楽にやるならGUIでrubyは無い気がするが… delphiは少し古くなってきているのでC#あたりがおすすめ
9 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 09:15:28 ] 08/02/05-08/02/20 【初心者歓迎】C/C++室 Ver.48【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1202141921/ 08/02/20-08/02/27 【初心者歓迎】C/C++室 Ver.49【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1203478421/ 08/02/28-08/03/14 【初心者歓迎】C/C++室 Ver.50【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1204124499/ 08/03/14(3レスのみで終了) 【初心者歓迎】C/C++室 Ver.51【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1205496128/ 08/02/28,08/03/14-08/03/30 【初心者歓迎】C/C++室 Ver.50【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1204124447/ スレッド移行としてはこんな流れみたいなので、前スレが Ver.51相当、今スレは Ver.52 相当と見なせば良さそうだけどね。
10 名前:1 [2008/03/30(日) 09:29:03 ] ごめん、こんなに大変なことになるとは… 軽い気持ちで59にしてしまったばかりに、、、、 俺がこのスレの最後にまた出てきて責任をもって次はVer 53を立てろと言うよ。
11 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 10:38:16 ] 大丈夫。バージョンなんてただの飾りです。
12 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 10:53:17 ] 大変なことにはなってないから、気にすんなw
13 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 12:09:59 ] もしくは59にたどり着くまで保守してくれればおkwww
14 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 14:18:20 ] >>8 thx。そうか、delphiは古いか。 やっぱスタジオゲットしたほうがいいな。
15 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:27:35 ] C++で、演算子の多重定義というところの問題で詰まってます 「operatorを使って、++x、x++をクラス型のオブジェクトに適用できるようにしました では、前置演算子関数から後置演算子関数を呼び出すか、またはその逆にして、スマートにしたものを作れ」 という問題です メインのプログラムで呼び出すときに ++x は x..operator++() x++ は x..operator++(0) と解釈されるとあります しかし、前置関数、後置関数の区別の方法がどうにも理解できません 前置に後置を入れると、そもそも引数を受け取らない関数から、どうやって受け取る関数を実行させるのか またはその逆がどうやったらできるのか 実際に思いついたのはこんなものです Counter& operator++() { Counter x = *this; if(cnt < UINT_MAX) cnt++; if(t != 0) { Counter y; y = x; *this = y; } return *this; } 関数を呼び出してないし、実際にコンパイルしてみると、左辺値が必要というエラーで失敗します 解法をおしえていただけないでしょうか
16 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:36:17 ] tってなんだよ
17 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:39:55 ] いきなり答えを出していいのか。 前置インクリメントは普通に定義した上で、 こういう風に前置インクリメントを使う後置インクリメント演算子関数をクラスのメンバとして作る。 無理にメンバにする必要もないけど。 Counter operator ++(int) { Counter x = *this; ++*this; return x; }
18 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 16:58:27 ] >>16 いや引数をどうにかしようとおもって、後置で0が入れられるなら、前置は何も入らない!とおもってやった名残です つまり消し忘れなのです >>17 *thisの++がoperator++()ということですかなるほど 実行できました ありがとうございました
19 名前:デフォルトの名無しさん [2008/03/30(日) 17:08:48 ] C++ で2次元配列へのポインタ返したいときにどういう風に記述すればいいのでしょうか。 例えば、以下の関数で???の部分はどのような記述になりますか。 ??? getArray(){ const int ary[ ][5] = { {1, 1, 1, 1, 1 }, {1, 1, 1, 1, 1 }, {1, 1, 1, 1, 1 }, {1, 1, 1, 1, 1 }, {1, 1, 1, 1, 1 } }; return ary; } また受けて側では どのように取得すればいいのでしょうか。
20 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 17:16:24 ] >>19 ・配列を返すことはできない。 ・ローカル変数のアドレスを返すことはできない。 従って、こんなもんかな。 const int (* getArray())[5] { static const int ary[ ][5] = { {1, 1, 1, 1, 1 }, {1, 1, 1, 1, 1 }, {1, 1, 1, 1, 1 }, {1, 1, 1, 1, 1 }, {1, 1, 1, 1, 1 } }; return ary; } int main() { const int (* a)[5] = getArray(); return 0; } 尤も、これが正解かどうかは別の問題。
21 名前:19 mailto:sage [2008/03/30(日) 17:26:25 ] >>20 ありがとうございます。 実は実際のソースでは、2次元配列はクラスのprivate static const なメンバ変数なのですが クラスの外からアクセサを使ってアクセスしたいのです。 その場合の記述も上記のようなものになるのでしょうか。
22 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 17:28:01 ] だったら参照でいいんでない?
23 名前:19 [2008/03/30(日) 17:48:38 ] >>22 すいません。2次元配列への参照を戻す関数の宣言は どのように書けばいいでしょうか?
24 名前:デフォルトの名無しさん [2008/03/30(日) 17:49:30 ] こんばんは。今月、C++を始めたばかりの初心者です。 お勧めの入門書・参考書があれば教えてください。
25 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:20:55 ] >>23 const int (& getArray())[5][5] const {...; return ary;} const int (& a)[5][5] = ....getArray();
26 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:21:16 ] >>24 初心者スレか書籍スレへ。
27 名前:19 mailto:sage [2008/03/30(日) 18:32:02 ] >>25 ありがとうございます。 ややこしいですね・・・
28 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:34:43 ] >>24 ないのでお帰りください。
29 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:41:35 ] >>24 Cが理解出来ればC++は根性で分かる クラス、派生、オーバーライド、演算子のオーバーライドとかね。 あんなもん構造体のラッパー STL、テンプレートは知らんでも何とかなる C++勉強中に.NetのC++をmanagedでやると 永遠に理解出来なくなると思われ。
30 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 18:52:45 ] >>29 こいつ初心者だな・・・
31 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:01:37 ] >>30 ・・・まじ??? 自称「C++得意です」なんですけど…
32 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:15:44 ] テンプレート自分で書くかはともかく、STL使わないC++ってもはや全く想像できないなぁ。 まあ、俺もCから移った直後は>>29 みたいなノリだったんだけどね。 「STL? なにそれおいしいの?」「テンプレート? つかわねーよhahaha!!」って。
33 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:17:07 ] STLとtemplateがないC++なんぞ使いたくない
34 名前:19 mailto:sage [2008/03/30(日) 19:19:15 ] わけわかめなエラーが出て困ってます。助けてください。 たとえば"error C2143: 構文エラー : ';' が '<cv-qualifer>' の前にありません"などです。 開発はVS2008で行っています。 class Map{ public: virtual const int (& getMap())[1000][1000] const = 0; }; class FirstBasement : public Map{ private: static const int floor[30][30]; public: // 地図の状態を返す virtual const int (& getMap())[30][30] const; }; const int (& FirstBasement::getMap())[30][30] const{ return FirstBasement::floor; }
35 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:23:11 ] >>34 constの位置が違う。 virtual const int (& getMap() const)[1000][1000] = 0;
36 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:28:29 ] typedef使ったりboost::multiarray使ったほうが可読性が高まると思うが
37 名前:19 mailto:sage [2008/03/30(日) 19:29:05 ] >> 35 うまくいきました。ありがとうございます。 ただ配列の大きさも同じでないとオーバーライドできないのですね。
38 名前:19 mailto:sage [2008/03/30(日) 19:31:08 ] >>36 boostはまだ知らないのですが、typedefはそうですね。 こういう時にこそ、使うべきですよね。勉強になります。
39 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:31:43 ] 自分は趣味でやってるだけだけどCで書こうとするとSTLないから倍の時間がかかるよ。 C使いこなせる人尊敬するわ
40 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:34:11 ] CとC++の中で最も優先して勉強するのはSTLと思う
41 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:37:08 ] >>37 配列型は要素数が違えば別の型。 型が違えばオーバーライドにならない。 戻り型と違う型はreturnできない。 なんだか難儀しそうだね。
42 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 19:39:30 ] 34なんて全然分からんw強引にキャストする所だったw 配列はついついポインタにキャストするからなぁ >>39 Cだとクラス間の上下関係無いから、いつでもどこでも呼び出せて楽じゃない? メンバにstaticつけた瞬間に敗北した気がする。 classやらの基本構文書いて15分、とかイライラする。 Cならいきなり呼び出せるのに、て思うとね〜 というか、Cから入ってC++使う機会が少なかったから 脳内でクラス構造が上手に作れないらしいw STLよりANSIライブラリの方が手軽で使い易いし覚え易いし・・・
43 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:08:44 ] >>42 ウン百万行ってソースを担当すりゃわかるようになる。 >いつでもどこでも呼び出せて楽 楽だからスパゲッティーが生まれやすくなる。
44 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:17:50 ] そうだな。設計とは制限することだと言うし。
45 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:26:15 ] 厳密にアクセスの流れを制限することが売りというか オブジェクト指向のキモというか 従来どおりにやろうとするなら単なるオーバーヘッドの増加でしかないようなw
46 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:27:16 ] まぁ趣味でやる程度の規模ならCでも全然問題ない気がする
47 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:30:07 ] 29=42は超初心者
48 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:39:37 ] string("hagehage"); って、Cスタイルキャストですか?コンストラクタ呼んだことになってますか?
49 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:41:57 ] >>42 いつでもどこでも呼び出せるようにして、良いんじゃない? 俺は良いと思うよ。STLは使うことを進めるけど。 オブジェクト指向もC++で扱えるパラダイムの一つに過ぎないからね。 ラムダ万歳。
50 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:42:48 ] >>48 コンストラクタ。
51 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:47:59 ] >>50 ありがとうございます。 いままで static_cast<string>("hagehage"); って書いてたんですが、今度から>>48 ですませることにします。
52 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 20:59:35 ] >>51 状況によるだろうけど、それ書く機会少なくない? 明示しなくても変換(コンストラクタが選択)されるよ。 void f(const std::string& s); f("aaa"); //OK std::string s = "aaa"; //OK
53 名前:25 mailto:sage [2008/03/30(日) 21:03:40 ] >>19 ゴメン、constの付け所を間違えた。 やはりあれだな、>20が真実を語っていたな。
54 名前:デフォルトの名無しさん [2008/03/30(日) 21:07:04 ] 下の"移動アルゴリズム", "移動可能かチェック"で以下のようなエラーが出るんですが 何が悪いのでしょうか。 エラー 1 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\root\gamecreation\rpg\movestrategy.h 17 RPG エラー 2 error C2143: 構文エラー : ',' が '&' の前にありません。 d:\root\gamecreation\rpg\movestrategy.h 17 RPG エラー 3 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\root\gamecreation\rpg\movestrategy.h 21 RPG エラー 4 error C2143: 構文エラー : ',' が '&' の前にありません。 d:\root\gamecreation\rpg\movestrategy.h 21 RPG #include "Map.h" #include "EDirection.h" #include "DxLib.h" namespace hogehoge{ class MoveStrategy{ public: // 仮想デストラクタ virtual ~MoveStrategy(); // 移動アルゴリズム virtual EDirection Move(const Map& map) const = 0; protected: // 移動可能かチェック virtual bool IsMovable(const Map& map, const int& direction) const; }; }
55 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:09:35 ] >>52 えっと、メンバのreplace使う時とかで、リテラルの長さがほしくてstringに入れる場合、つまり str.replace(str.find("あ"),(string("あ")).length(),string("い")); こういう場面とか、文字列を+でつないでいく、たとえば str = "my name is " + name + "\n"; // エラー str = string("my name is") + name + string("\n"); こういう場面みたいな時です。
56 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:19:20 ] >>54 Mapが定義されて無いんじゃね? >>55 それならおk。
57 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:26:00 ] >>55 見逃してた。stringへの+も明示する必要ないから string("\n") は "\n" だけで良いよ。 str = string() + "my name is" + name + "\n"; でもおk。
58 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:27:50 ] >>56 ありがとうございます。解決しました。 確かにMapがおかしかったです。 原因はMapで純粋仮想関数ではなく、ただの仮想関数を宣言していただけなのに その定義を持っていなかったことでした。
59 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:36:52 ] >>57 >str = string() + "my name is" + name + "\n"; わーお(`・ω・´)いろいろありがとうございます。
60 名前:超初心者29=42 mailto:sage [2008/03/30(日) 21:39:35 ] >>43 ン百万行・・・ いいとこ10万行ぐらいだな、触ってたのは ン百万のソースを触るなんてオープン系の人?(´・ω・`)?? PCアプリでン百万行たって、 モジュール化進んでるからン百万だろうが怖くないしな 名前空間なんかイラネの世界で生きて来たからな〜w Cだとヘッダ単位でモジュール化したりするモンだが。。 規模が違うんだろうな〜〜。。。。
61 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:45:24 ] モジュール化?なにそれ?なスパゲッティコードを君にプレゼントしよう
62 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:49:29 ] 規模が大きくなってくると、人員の質にバラ付きがでてくるのさ
63 名前:54 [2008/03/30(日) 21:50:15 ] ちょっと教えてください。 以下のようなクラス宣言があります。 #include "Player.h" #include "Enemy.h" #include "Map.h" #include <vector> namespace hogehoge{ /********************************** * 概要: 地図の振る舞いを管理する * **********************************/ class Map{ public: static const int CHIP_SIZE = 15; protected: Player* player; //std::vector<Enemy> *enemy; public: // コンストラクタ Map(); //仮想デストラクタ virtual ~Map(); // 地図を表示する virtual void Display() const = 0; // 地下1階への状態を返す virtual const int (& getMap() const)[30][30] = 0; }; }
64 名前:54 [2008/03/30(日) 21:51:09 ] この場合以下のエラーが大量に出てしまいます。 エラー 1 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません d:\root\gamecreation\rpg\movestrategy.h 17 RPG エラー 2 error C2143: 構文エラー : ',' が '&' の前にありません。 d:\root\gamecreation\rpg\movestrategy.h 17 RPG ここから#include "Enemy.h"を取ると、エラーなくコンパイルできます。 Enemy.hは以下のようになっています。 #include "Map.h" #include "EDirection.h" #include "DxLib.h" namespace hogehoge{ class MoveStrategy{ public: // 仮想デストラクタ virtual ~MoveStrategy(); // 移動アルゴリズム virtual EDirection Move(const Map& map) const = 0; protected: // 移動可能かチェック virtual bool IsMovable(const Map& map, const int& direction) const; }; } 上のエラーはどういう意味なのでしょうか。
65 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 21:52:20 ] >>60 同じ同じ。 言語のサポートが優位な点だけど、 大枠でのプログラム層なアーキテクチャはC,C++で左右されないと思うよ。
66 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:01:25 ] >>54 >型指定子がありません - int と仮定しました コンパイラ:「const Map」がよく分からないので、「const int Map」だと考えますね >',' が '&' の前にありません コンパイラ:「const int Map&」、なんか変数名のあとに「&」が出て来たんですけど
67 名前:66 mailto:sage [2008/03/30(日) 22:04:46 ] 一応補足。 2つ目のエラーは、1つ目の仮定のせいで発生してるってことね。
68 名前:29=42超初心者 mailto:sage [2008/03/30(日) 22:07:33 ] >>66 Map ってクラスが入れ子になってるからじゃないの? ヘッダの相互参照になってる enemy.h の頭に class Map; ての入れてコンパイル通らない? もしくは cpp 内のみにヘッダ参照宣言入れて、ヘッダ内からの include やめるとか MS VC ならエラー行間違えない筈なんだけどな すげー適当に答えてるけどw >>61 >>62 共同作業でのプログラミング経験ほとんど無いんで〜 他人の綺麗なコードをスパゲティにした事なら何度もあります。未だバレてませんヨ、HAHAHA
69 名前:54 mailto:sage [2008/03/30(日) 22:18:50 ] >> 66, 68 ありがとうございます。 class Map; class MoveStrategy{ }; class Map; class Enemy{ }; とすると、エラーはごっそり減ったのですが、まだ以下のようなエラーが残ります。 エラー 1 error C2061: 構文エラー : 識別子 'MoveStrategy' d:\root\gamecreation\rpg\enemy.h 16 RPG ヘッダの相互参照というのは #ifndef をしていたら、必ず防げるものではないのですか?
70 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:28:30 ] class A{ B b; }; class B{ A a; }; 要はこれと同じ状態。前方宣言でも回避できない。これも class A{ A a; }; という問題に帰着できるから分かるだろ
71 名前:29=42超初心者 mailto:sage [2008/03/30(日) 22:32:18 ] >>69 無理かと #include "map.h" #include "Enemy.h" の2行は次の形に展開される class Map { ... void ( Enemy *pEnemy ); <= ★注意★class Map 宣言より上に class Enemy 宣言が無い } この時点でコンパイラは class Enemy の情報を持たないのでエラー class Enemy { ... void ( Map *pMap ); } となり、エラー だから #include が展開された時に Enemy.cpp : class Map; class Enemy { ... void ( Map *pMap ); } Map.cpp : class Enemy; class Map { ... void ( Enemy pEnemy ); } にするのが手っ取り早い VC 使ってるなら #pragma once 使った方がコードスッキリするよ
72 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:32:45 ] ゲームのように扱うデータが多かったりすると 必然的にコード量は増えるし、オブジェクト指向も取り入れるんだろう。 制御屋だとシステムの大きさに比例してでかくなるけど 担当も細分化されて、一人で担当するところはそれほどでもないね。 安全に関わるから。
73 名前:29=42超初心者 mailto:sage [2008/03/30(日) 22:40:43 ] >>72 エミュレータ使ってもバグ取れないなんてザラだからねぇ・・・ ブレークポイント張りずらいし 組込み系だとC++コンパイラが無いこと多い ミドルウェアでC以外のもの見た事ないし。 linuxのほとんどのコアソースがCでなのも傍証してる(ソースが古いのも一因) gccだけはブレークかけても、どこがバグなのかさっぱり分からん(´・ω・`;;;) モジュール化の概念はドコ行っても同じかも
74 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:42:58 ] 最近は組み込みもC++にシフトしてるよ 例外とかメモリ確保とか制限は多いけど
75 名前:54 mailto:sage [2008/03/30(日) 22:43:31 ] >>70 , 71 一応上のエラーは,これも class MoveStrategy; を追加することで消えました。 有益な情報ありがとうございます。 この問題に関して不案内なところがあるので、もう少し勉強してみます。
76 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 22:51:40 ] >C++コンパイラが無いこと そこでcfrontですよ
77 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 23:06:52 ] 日立のやつはC++使えるよね PCみたいにはいかないけど。
78 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 23:17:00 ] 組込みでmallocに頼るのがどうも・・・ 1週間後にフリーズ>再起動したら直りました、で 原因がmallocじゃどうにもならないしな〜。 RAMの必要量が予想出来ないしなぁ。。。 C++の展開命令見ると何書いてあるか分からないしなぁ Cならまだしも。
79 名前:デフォルトの名無しさん mailto:sage [2008/03/30(日) 23:49:40 ] Templateの諸機能が動的に実装してある
80 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:05:05 ] すみません。質問させて下さい。XP+VC++ 9.0です 【やりたいこと】 データファイルを読み込んで、ダイクストラ法を使って最短ルートを求める 【条件】 ノードは可変数個、コストは全て正の値、スタートノード及びゴールノードは dijkstra.exe -start_node -goal_node のようにプログラム開始時に与える。 【何が分からないのか】 可変数個のノードや、エッジがどのノードに向かって延びているか、 かかるコストはいくらか等のデータをどのようにデータファイルに格納するか、データファイルの構造決定。 データファイルの構造が決定したとして、どのように可変数個のデータを読み込むか、 どうやってデータの終わりを探すか。ファイルからデータを読み込んだとして、データの整合性を どのように検証するか。 分からないことばかりですが、誰かヒントだけでも教えて下さい。宜しくお願いします。
81 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:25:26 ] >>19 亀レスだけど、typedefするのも1つの手。 typedef int IA_5[5]; IA_5 array[3] = {{1,2,3,4,5},{6,7,8,9,10},{11,12,13,14,15}}; // == array[3][5] IA_5* func(){ return array; } int main() { IA_5* p = func(); for(int i = 0; i < 3; ++i){ for(int j = 0; j < 5; ++j) cout << p[i][j] << " "; cout << endl; } return 0; }
82 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:37:54 ] >>80 可変個のデータ読み込みは、非常に基礎的で、ダイクストラ法と関係ないですよ それをまず出来るようになって下さい
83 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:38:58 ] >>80 C++でも良いんですか? もし良ければSTLを使ってノードを管理すると簡単と思います
84 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 06:57:59 ] >>82-83 レスありがとうございます。私の修行が足りないようで、お恥ずかしい限りです。 勉強して理解を深めてからもう一度出直してきます。スレ汚してすみませんでした。
85 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 07:23:05 ] すこし作ったよ #include <vector> #include <iostream> #include <set> using namespace std; class node { public: unsigned int dis,ver; node(){ ver=dis=-1;} node(unsigned int i, unsigned int d){ dis=d; ver=i; } bool operator < (const node &x) const { return (dis<x.dis); } }; typedef set<node> vertex; main(){ vector< vertex > g; //グラフの定義 g.push_back(vertex()); //頂点追加 g[0].insert(node(1,3)); //辺と距離の追加 g[0].insert(node(2,5)); g[0].insert(node(3,2)); vertex::iterator p=g[0].begin(); cout<<(p->ver); // 最も短い距離の頂点を出力 }
86 名前:デフォルトの名無しさん [2008/03/31(月) 11:15:09 ] VC++2008EEで勉強中なのですが、 いろんなサイトの見よう見まねで下記ソースを試してみたところ ビルドして一瞬ウィンドウが出て終わってしまいます。 これはreturn 0のせいかと思って、return 0を消しても やはり一瞬で終わってしまいます。 どうすれば終了しないでコマンドプロンプトのような画面で 文字が確認できるようになるのでしょうか。 #include <iostream> int main(void){ using std::cout; using std::endl; int a; int &alias = a; alias = 100; cout << "a = " << a <<endl; cout << "alias = " << alias <<endl; return 0; }
87 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:32:42 ] getchar(); return 0;
88 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:41:03 ] >>87 ありがとうございます!ようやく確認できるようになりました。 キーボード入力待機状態にして止めるんですね。 勉強になりました。
89 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:41:05 ] Ctrl + F5
90 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:45:24 ] >>89 デバッグなしでビルドというのでも止まるんですね。 ありがとうございます。 C言語はいろいろ解らないことばかりで非常に助かります。
91 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 11:48:00 ] >>86 コマンドプロンプトで実行するか、>>87
92 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 12:04:44 ] >>90 それらはCの知識ではない。Windowsの使い方の知識とVisualStudioの使い方の知識だ。
93 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 12:36:21 ] >>84 Boostのグラフライブラリを使う
94 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:10:05 ] builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm ポインタの勉強をしているのですがサンプルのコードを動かしてみたところうまくいきません
95 名前:デフォルトの名無しさん [2008/03/31(月) 14:13:24 ] もうアパートを探すのはつかれたよ。 はやくプログラミングしたいよ。
96 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:20:17 ] >>94 コメント欄がすごいことにw
97 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:23:25 ] >>94 もうこの人終わりだなw
98 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:28:30 ] int *n; *n = 5; /* ポインタ変数nに値5を代入 */ 初期化もポイントする先も決めてないポインタをそのまま使うのって非常に不味いよねぇ 自分ははじめにポインタの初期化を必ずするよう教わったがなぁ
99 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:40:39 ] >>96 >>97 あー、前スレで話題になった奴か。 エピステーメーにまで指摘されていたのに未だに記事の修正が入らないのね。 編集がコメントなにやらゴミを書いているけどそんなものは記事の修正とは認められないし。 この程度のコメントじゃZDNETとしても著者としても痛くも痒くもないのでしょ。
100 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:46:23 ] >>99 もしや本人さま(えぴさん)で?
101 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:48:48 ] どうなるか、サンプルソースをコンパイルして実行してみたら思った通り以上終了w フォールト ->00401007 c70005000000 mov dword ptr [eax],0x5 ds:0023:00000001=???????? だってさ。 *n = 5: の部分かな。エラーがソース乗せちゃまずいでしょw
102 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:49:42 ] × エラーがソース乗せちゃまずいでしょw ○ エラーがでるソース乗せちゃまずいでしょw
103 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:54:00 ] >>101 コンパイラにもよるんじゃね? いや、試してないけど
104 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:55:06 ] 見てないけどエラーを修正しなさいって問題なんだろ
105 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:56:59 ] あんまり往生際悪いんで吹いたww
106 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:57:20 ] 「動くけど危険」とかいう話じゃなくて「動かない」コードだろ、これは
107 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 14:59:25 ] >>101 必ずしも 異常 終了するとは限らない ポインタの指す先による >>106 場合によっては動くコード
108 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:03:01 ] 最適化をオフにして次のコードを実行すると… 勘弁してほしいタイプのバグ #include<stdio.h> void hoge(void){ static int a=5; int *n=&a; printf("a=%d\n", a); } void huga(void){ int *n; *n=100; } int main(void){ hoge(); huga(); hoge(); return 0; }
109 名前:99 mailto:sage [2008/03/31(月) 15:13:55 ] >>101 落ち着け。「以上終了」になっているぞw >>100 勘弁してくれ。一緒にされたらそれはそれで迷惑だ。 もし私がエピたんなら、自分のブログでネタにしているよ。 いや、それだと本人が書いていたら拙いな。 ……と思って検索したら、やっぱり書いていたかw で、ついでにうろついたらまぁ、他にも釣れた罠。
110 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:21:40 ] επιστημηってプログラム系の掲示板でよく見かけるけどなんの人なの?
111 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:30:11 ] 掲示板でよく見かけるヤツは偽者 自称C++のちょっと偉い人
112 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:31:34 ] C++の黎明期からC++に関わってきた人。 かといって、C++の隅から隅まで知っているわけではなくて、 Boostのコミッタというわけでもなくて、 意外に中途半端な立ち位置な気がするお人。 でも、俺より知識も経験もあるのは確実。
113 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:32:34 ] 魚拓とっておこうと思ったら既に3つも取られてたw
114 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:33:23 ] エイプリルフールは明日だ
115 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:36:26 ] なんか冒頭に追記が > 現在、本稿には技術的観点から異議が多数寄せられているため、詳細をレビュー中です。 > 初めてご覧になる方は、コメント欄もあわせてお読み下さい。 > また、読者の皆様には引き続き、コメントなどでご意見を頂けましたら幸いです。 そんな大層なレベルの話なのか…?
116 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:39:40 ] >現在、本稿には技術的な誤りが存在するため、詳細をレビュー中です。 >初めてご覧になる方は、コメント欄もあわせてお読み下さい。 >また、読者の皆様には引き続き、コメントなどでご意見を頂けましたら幸いです。 厳しくなったw
117 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:44:52 ] 初心者にとってポインタの概念ってそんなに躓きやすい物なのか? ポインタの基本的な部分で苦労したことがないのでそこら辺が不思議だ
118 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:45:30 ] >>94 おい。間違えて「記事推薦者になる」ってとこクリックしちまったぞ。 どうやって取り消すんだ。おい。教えろ。
119 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:50:36 ] >>117 昔教える立場にあったことがあるが、何でかしらんが分かる奴と分からん奴がいて、 分からん奴はいくら教えてもなかなか理解してくれん。 メモリってのがリニアな空間で位置や距離の概念があることを理解できないらしい。
120 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:55:35 ] 番地とか分かりやすいものに例えればいいんじゃね?
121 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 15:56:25 ] >>118 ワロヌ
122 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:00:32 ] >>117 俺もそうだけど、アセンブラから入ると、「ポインタが分からない」と言う人がどう分からないのか分からない 新人に教えるときなんかにとても苦労する
123 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:07:17 ] 変数:戸棚 値:ケーキ ポインタ:「戸棚にケーキがあります」という母ちゃんの置き手紙
124 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:09:03 ] >>123 訳わからんw
125 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:17:56 ] >>123 戸棚の場所が書いてあるメモ、なんじゃね?
126 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:25:27 ] 変数: 箱や器のようなもの 値: 箱にいれる何か ポインタ: 箱が置いてある場所を書いてあるメモ みたいな解釈でいいんだろうか? ポインタを正しく理解できてるか自分でもよくわからん。
127 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:25:38 ] ケーキを食った後置き手紙を始末しないと後の人が迷惑するという話か
128 名前:99 mailto:sage [2008/03/31(月) 16:31:08 ] いや、置き手紙はそのままで戸棚に「中身は俺の腹の中」って書いておくんだろ。
129 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:38:46 ] JAVAの本を書いている人みたいだけど、 これほどポインタの概念がわかってなくても 使えるのか、JAVAって。 ある意味うらやましいかも。
130 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:45:21 ] >>128 そして後から置き手紙を読んだワカメが大激怒
131 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:45:51 ] >>129 でも、ポインタも理解できないような人が書いたJavaのコードって、やっぱりどこか危なげなんじゃないかね
132 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:47:44 ] >>130 Access Violationのメッセージボックスのアイコンに、ワカメの顔が表示されるとこ想像した。
133 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 16:52:23 ] >>129 それらの本も、もしかすると同じようにでたらめな知識に基づいて書いてるんじゃないかと疑わざるを得ない気がする。
134 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:06:45 ] >>131 参照がBoostのスマートポインタと同じようなもので 理解できない人は怪しいコードいっぱい書くことに
135 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:11:39 ] (Javaの)参照がBoostのスマートポインタと同じようなものってこと? なんで*Boostの*って制限を設けるか理解しかねるけど、 Javaの参照はポインタそのものと同じようなもので、 それに加えて参照されなくなってからは回収される可能性があるだけ。 C++でのスマートポインタはローカルに限れば基本的にスコープを抜けた時点で回収されるから、 JavaのGCとは少し違う。
136 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:17:49 ] 自分の知らないところでチョコチョコされる行動まで把握しないといけないのは面倒だが かといって自分で何もかも把握して処理するのも面倒 なかなかバランスが難しいのねぇ
137 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 17:20:59 ] 個人的にはRAIIは気に入ってるというか、いい方法だと思うんだけどなぁ。 もっとC++成分を取り入れたJavaライクな言語とかあればうれしいんだけど。
138 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 18:07:30 ] それならDを試してみてはどうだろう。
139 名前:デフォルトの名無しさん [2008/03/31(月) 19:35:48 ] Dは頭の悪そうな言語名だから使いたくない。
140 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 19:38:06 ] 頭の悪い人程そういうことを気にするもんだな。
141 名前:デフォルトの名無しさん [2008/03/31(月) 19:39:18 ] 予想通りのレスだな。
142 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 19:44:39 ] >>139 豆腐屋っぽいよね
143 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 19:47:25 ] D は使って欲しかったらまず言語仕様を安定させて欲しい。
144 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 19:51:40 ] python + cpp + java = D (という予定)
145 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 20:04:37 ] C++にもっさり毛が生えたのがD
146 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 20:11:27 ] D1.0は仕様確定したよ。
147 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 20:13:03 ] 2.0 へ移行することになったときに 仕様が違いすぎて大変なので面倒くさい。
148 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 21:44:25 ] >>126 違うよ。 値は数値とか文字列とかの事で、変数は値につける名札で、ポインタは値がアドレスの変数の事だよ。
149 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 22:37:22 ] >>148 エロ本が変数で、収録されてる写真が値 ポインタはエロ本という変数で(便宜上*がついてる、というかポインタであることの証)、そのポインタの値はページ数 ってな理解でいいの?
150 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 22:52:48 ] エロ本は型で、デラベッピンが変数じゃね
151 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:07:50 ] デラベッピンはエロ本の派生クラスだ。
152 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:08:45 ] エロ本が概念でデラベッピンが型だろう
153 名前:デフォルトの名無しさん mailto:sage [2008/03/31(月) 23:12:31 ] 確かに
154 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 00:20:55 ] お前らw
155 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 00:25:05 ] よりによってでらべっぴんを用いるところに何らかの意図を感じる
156 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 01:34:06 ] エロ本としてではなく美術書として扱う場合、これは派生なの?
157 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 01:56:47 ] それは扱う側が決めることだろ どう使われようがしったこっちゃない
158 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 08:09:08 ] >>156 インターフェースとして定義したクラスを継承
159 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 08:51:50 ] >>149 >エロ本が変数で、収録されてる写真が値 この解釈だとエロ本はunionの配列で、ページ数は配列のindex。
160 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 08:52:39 ] C/C++のポインタの機能--参照渡しのような処理 - builder by ZDNet Japan builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20370255,00.htm このサイトのドコがおかしいのでしょうか?
161 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 09:02:23 ] 本人? コメント欄の通り
162 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 09:50:07 ] それは4/1のために用意された記事だからあまり真に受けないほうがいい。
163 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 10:54:05 ] >>160 >このサイトのドコがおかしいのでしょうか? 殆ど全て。
164 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 11:53:26 ] サイトってw 普通に「記事」とか言えよ 安っぽい釣り針だな
165 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 11:56:11 ] 碌に査読もせずにほいほい載せちゃうようなサイトだからな。何かおかしいだろ。
166 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 12:36:03 ] 嘘を嘘と
167 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 12:56:31 ] 編集がコメントで悪足掻きしたり、著者の有り得ないコメントを代理掲載しているくらいだからね。
168 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 15:17:06 ] 記事のサブタイトルが「変数の場所(アドレス)」に変わったw
169 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 15:20:55 ] 推薦増えすぎw
170 名前:いっそ誰か転載してくれw mailto:sage [2008/04/01(火) 15:26:22 ] 一ページ目は修正掛かったようだけど、日本語が破綻している。 >ポインタ変数を定義するには、通常の型の場合とは異なり、型名の後ろに * がつけられる。 よくあるダメドキュメントのパターンである、主語と述語の関係が狂ってしまっている。 この文章は誰の手によるものだろうか。筆者? 編集? レビュアー? いっそ企画から遣り直しては如何だろうか。
171 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:03:48 ] 俺が筆者ならしばらくは人には会いたくないだろうなw はずかしすぐるwww
172 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:21:59 ] 「builder編集部 冨田」って人も大変だな。 しかし、事前の校正をしなかった報いだ。 この冨田って人が担当だったかどうかは知らんが。 builderの信頼性も、これで地に落ちたな(あったかどうかは不明だが)。
173 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:24:12 ] しかし、たったこれだけのコードの校正も出来ないってどれだけ不注意なんだ
174 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:35:58 ] プロのテクニカルライターだから信用してたんでしょ
175 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:37:49 ] かわうそうだからもうそっとしといてあげようよ
176 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:38:03 ] この連載、続くのか、打ち切りになるのか・・・
177 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:39:01 ] >>175 バンブーブレードのアニメを思い出したw
178 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:40:54 ] 前橋さんに書いて欲しい
179 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 16:41:47 ] え、連載なの?
180 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 17:10:38 ] >>164 スミマセン『記事』でしたね。でもCあまり判らないので。。。
181 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 17:11:33 ] builder.japan.zdnet.com/sp/c-programming-language/ 特集だな。 >>180 それはC言語の問題じゃないだろ。 日本語やり直せ。
182 名前:いっそ誰か転載してくれw mailto:sage [2008/04/01(火) 17:26:55 ] 問題は件のページだけではない。 こちらのページから引用してみよう。 builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20368158-2,00.htm -- データを区切る文字を空白などではないものにする方法だ。たとえば”%s,%s”とすれば、”abc def,ghi”を”abc def”と”ghi”という2つの値として入力することができる。 -- これも、実験してみれば直ぐに判るが出鱈目である。 一体全体、この特集はどんな技術者を作ろうと言うのだろうかw
183 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 17:44:37 ] 何の話かと思ったら、scanf()か
184 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 17:46:36 ] >>182 scanfで入力制限が出来ることを知らなかったorz
185 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 18:02:09 ] >>184 普通は、scanf()では使いにくいから、入力制限はsscanf()で使うんだけどね。 所謂入門書でその辺りにきちんと触れているものは、知る限りないね。
186 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 18:07:30 ] >>182 確かに酷いな
187 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 18:11:27 ] ttp://builder.japan.zdnet.com/rank/ 推薦の数が飛び抜けているな
188 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 20:53:23 ] 件の人の(ttp://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20366709-2,00.htm) >また、doubleからはlong double(12バイト分)を派生させることができるが、 >floatではそれができないという違いがある。 ってどういう意味なんでしょうか?
189 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 20:58:36 ] long float という型が無い事を言いたかったんじゃね? 日本語でおkな記事だな こんなん初心者に読ませても害にしかならないな
190 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:01:05 ] おれ、今までlong doubleって10バイトって思ってたよ。
191 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:15:41 ] >>189 なるほど。
192 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:19:08 ] long double が 12 バイトの環境は見た事無いなあ。 10 か 16 ならあるが。
193 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:22:48 ] sizeof(long double) 12bytes gcc (MinGW) 10bytes Borland C++ Compiler
194 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:23:28 ] 普通の gcc だと 16 だな。
195 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:34:38 ] 仕方ない、取り敢えず特集の全ての記事にダメ出ししてくるか。 これだけ頓珍漢な記事だらけならパーフェクトも狙えるだろw
196 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:36:46 ] >>182 これ何か不味いのか?
197 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:47:56 ] >>196 #include <stdio.h> int main() { char a[10], b[10]; switch(sscanf("abc def,ghi", "%s,%s", a, b)) { case 2: puts("a, bともに読み込めた。"); puts(a);puts(b); break; case 1: puts("aだけ読み込めた。"); puts(a); break; case 0: puts("aもbも読み込めなかった。"); break; case EOF: puts("エラー"); } return 0; } どうなるとおもう?
198 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:54:06 ] 上と下ではどっちが速いですか? bool rb = m_map.insert(std::make_pair(key, value)).second; if(rb) { ほげほげ; } if(m_map.insert(std::make_pair(key, value)).second) { ほげほげ; }
199 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:55:14 ] いっしょだろ。
200 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:56:23 ] 変数にコピーする分上が遅い。
201 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:58:21 ] >>197 aだけ成功 スペースの後が終端文字列になってた
202 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 21:58:43 ] >>200 その程度なら最適化で消えることが期待できる。 >>198 実測重要。
203 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:00:30 ] 下はスタックポインタの変動が一回多くなるので、極々僅かに遅くなる気も?
204 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:00:55 ] . 人 ( ) , '´ ̄ `ヽ / ( ( 人人) ) 最適化すれば消えるのではないかと |人| V_V|ノ ふじおかが言っている。 ノノ| |o○_⌒_○ ( エ ) . o( )o uu
205 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:05:51 ] >>193 でもMinGWだとこれが?→ unsigned int 0以上の整数 (0から65535)
206 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:15:46 ] if(!banana)と、書くのが気持ち悪いのですが、 if(true != banana)と、書くとスピードが落ちますか?
207 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:21:01 ] if(banana == flase)じゃないのが気持ち悪いな
208 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:21:46 ] うお 間違えたw
209 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:24:30 ] >>205 どういう意味でしょう? MinGW でも unsigned int は 0〜4294967295 の範囲です
210 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:32:28 ] >>206 とりあえず>>207 に直したとして、まず変わらん。 むしろ変わる環境があったらちょっと興味がわく。 で、速度は実測が基本。一応ね。
211 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:46:02 ] trueと比較するのは(速度は兎も角)確実に1ステップ無駄な処理が入る。
212 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:47:05 ] うそーん
213 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:56:11 ] >if(!banana) と、 >if(true != banana) コードの意味合いが異なる
214 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 22:58:32 ] >>209 >>188 の記事からの引用です
215 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:05:34 ] class hoge { hoge(){←エラー rcdefault.top = 0; rcdefault.left = 0; rcdefault.buttom = 480; rcdefault.right = 640; } static const RECT rcdefault; } 性的で固定な構造体の中身はどうやって指定するの?
216 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:10:47 ] ピコエロス
217 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:19:11 ] class HOge{ static const A a; }; const RECT HOge::a = {1,2,3,4};
218 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:27:05 ] ttp://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20363049,00.htm -- 本来の名称は1文字のCなのだが、それだけだと分かりにくいからか、一般的にはC言語という。 -- # C言語と表記することが多いと認めるのは吝かではないが、果たして開発現場でC言語と呼ぶ輩はどれほどいるのだろうか。 -- 子孫にあたるプログラム言語には、同じくオブジェクト指向が取り入れられているJavaなどがある。 -- # いつからJavaはCの子孫になったんだ? ttp://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20363414-2,00.htm -- しかし、前述の通り携帯電話などの機器の動作はC/C++で開発されたプログラムによって行われている。 -- # そうなんですか? 本当に? ttp://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20366709-2,00.htm -- floatよりもdoubleのほうが扱える数値の範囲が広くなる。そのため、floatよりもdoubleのほうが精密な値を表すことが可能になる。 -- # 「そのため」ではありません。無茶を言わんでください。 ttp://builder.japan.zdnet.com/sp/c-programming-language/story/0,3800083430,20366845-2,00.htm -- printf( "|%5.3f %-9.4f|", 12.34, 56.789 ); /* |12.340 56.7890 | */ -- # わざわざ初心者を混乱させなくてもいいでしょう。素直に%6.3fとしては如何?
219 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:36:51 ] さすがに重隅ウザイ
220 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:37:35 ] できました。
221 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:40:22 ] >>218 ここに書くと筆者が見てくれるの?
222 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:43:52 ] >>220 who?
223 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:46:47 ] 規格内に C 言語って記述がいくらでもあるのに・・・。
224 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:51:37 ] The Programming Language C
225 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:54:05 ] 今マルチスレッドで裏で画像読み込みとかやってるんですが、 あるスレッドが専用の関数に必要な引数を渡して、要求だけ vectorにキューイングしてで出て行く、そして読み込み用のスレッドがこのvectorから メッセージを取り出して画像読み込み操作を行うという形なんですが なんかどこかで衝突?みたいなことが起こってるみたいで成功したり失敗したりです。。。 メッセージは追加時push_backで取り出し時begin()使ってます。 Javaのsynchronizedみたいに排他にするにはどうすればいいんでしょうか?
226 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:56:50 ] >>225 STLはひどい事にマルチスレッドに対応してない実装をコンパイラ製作側が提供しても良い仕様になってるので、 別途マルチスレッドに対応したフラグを外側から用意するなど措置をとる必要がある。
227 名前:デフォルトの名無しさん mailto:sage [2008/04/01(火) 23:56:59 ] >>225 winならCriticalSectionやMutexとか。 それ以外でもならboost::threadとか。
228 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 00:03:51 ] STLportを使う
229 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:01:26 ] 文字列を配列で宣言するのとポインタで宣言するのって何か違いがあるんでしょうか? やってること同じだと思うんですけど。
230 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:10:28 ] char a[]="test";とchar *b="test";のことを言ってるなら違いはある。とりあえず配列を使っておけば問題ない。
231 名前:デフォルトの名無しさん [2008/04/02(水) 10:10:50 ] >>229 > 文字列を配列で宣言するのとポインタで宣言するのって何か違いがあるんでしょうか? > やってること同じだと思うんですけど。 その通りやってることは同じなので、好きな方でどうぞ。
232 名前:デフォルトの名無しさん [2008/04/02(水) 10:27:44 ] はじめまして。 VBを今週から始めた初心者です。 上司に教わりながらやっていますが、全くわかりません。 とりあえず、言われた仕事が モジュール2で Public Sub 関数名() '表を追加します End Sub を作成して、モジュール1でcollで呼び出すらしいんですが 表を追加の関数がわかりません。 誰か教えて下さい。
233 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:28:52 ] その上司に聞けよ。 というかスレ違いだ。
234 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:29:30 ] 落ち着け ここはC/C++スレだ
235 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:31:09 ] >>230 その違いについて知りたいんですが、、、メモリの問題とかですかね
236 名前:デフォルトの名無しさん [2008/04/02(水) 10:33:55 ] 232です。 申し訳ないです。 どこに書けばいいのかわからなくて。。。
237 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:37:38 ] それすら調べられないならマに向いてないから辞めた方が良い
238 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:48:57 ] >>226 ,227ありがとうございます。 面白そうなので自分で作ってみることにします。
239 名前:デフォルトの名無しさん [2008/04/02(水) 10:49:38 ] そうですね。 辞めてしまいたいです。
240 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 10:55:29 ] >>239 仕事じゃなくて課題なのでは? 未経験でも出来る課題を出されたんじゃないですか? プログラム経験はあるんですか?
241 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 11:10:26 ] 本当に初心者なし質問かと思うのですが ttp://tondol.ty.land.to/event/koushien/2006honsen/08.html のプログラムなんですが、数字を二つ入力するのですが 1 2 という入力ではなく 3 というように数字一つで改行されたらプログラムを終了するようにしたいのですが どのようにすればいいのでしょうか?
242 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 11:12:30 ] 文字列で受け取って自分で調べる
243 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 11:52:31 ] すいません文字列で受け取るとはどういうことでしょうか?
244 名前:238 mailto:sage [2008/04/02(水) 12:03:36 ] Mutexで神速でできてしまったんだけど、ミューテックスだとどんな制限があるんでしょうか?
245 名前:デフォルトの名無しさん [2008/04/02(水) 12:18:56 ] 多重起動防止
246 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 12:19:23 ] >>244 排他処理を追加した分遅くなる。MutexよりもCriticalSectionセクションのほうが速いので用途に応じて使い分けるとよい。
247 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 12:20:21 ] ミューテックスを使うと投機実行の処理が多くなったり、より速いアクセス速度のあるキャッシュへのデータ格納最適化ができなかったりする。
248 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 13:01:07 ] >>236 EXCELにVBAのリファレンスついてないのか? まあ該当スレは検索すればすぐ見つかるだろうけど,質問しても やってトライ.シリーズでいいからEXCEL/VBAの参考書一冊買え みたいな話になるだけですぞ
249 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 13:21:53 ] >>236 排他制御比較一覧 ttp://msdn.microsoft.com/library/ja/default.asp?url=/library/ja/jpdndllpro/htm/metrsect.asp
250 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 13:22:45 ] 上の、236じゃなくて>>236 へだった
251 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 13:23:13 ] >>238 へ 何度間違ってるんだorz
252 名前:238 mailto:sage [2008/04/02(水) 15:33:58 ] >>245-247 ,249-251 ありがとうございます。ほくほくです
253 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 20:29:09 ] c++ VisualStadio.net TestProgプロジェクトにあるCTestClassクラスをライブラリにしてMainProjプロジェクトで使おうとしています。 CTestClassクラスが宣言されているTestClass.h、TestClass.cpp、そしてほとんどカラのstdafx.hとstdafx.cppをビルドしてTestProg.libを作成しました。 そしてMainProjプロジェクト内のファイルにて #pragma comment(lib, "TestProg.lib") このようにライブラリの使用を宣言するまでは問題なかった(ビルド成功)のですが、CTestClassを使おうとすると宣言がされていないとエラーが出ます。 ライブラリ内のクラスを使うにはこれらに加えて何かしないといけないのでしょうか? ちなみにMainProjにTestClass.hとTestClass.cppを追加し、上記の#pragmaの代わりに #include "TestClass.h" を入れるとエラーは出ませんでした。
254 名前:デフォルトの名無しさん [2008/04/02(水) 20:43:05 ] TestClass.hへのパスは通ってますか?
255 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 20:55:23 ] / / / / / / / / / / / / / ,.、 ,.、 / / / / ∠二二、ヽ / / / / / ((´・ω・`)) ちょっと船の様子を見に行ってくる… / ~~:~~~〈 / / / / ノ : _,,..ゝ / / / (,,..,)二i_,∠ / /
256 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 21:30:23 ] >>253 // MainProjプロジェクトにTestProg.libとTestClass.hコピーして #pragma comment(lib, "TestProg.lib") #include "TestClass.h"
257 名前:238 mailto:sage [2008/04/02(水) 21:32:33 ] ∧_∧ ..( *) ..( )〇 なんだか胸騒ぎがする・・・。
258 名前:デフォルトの名無しさん [2008/04/02(水) 21:57:43 ] Xcodeで開発しているのですが、 "クラス::関数()", referenced from: とエラーが出ます。 調べてもどういう意味のエラーかも分からずです。 どういう意味のエラーなんでしょうか?
259 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 22:12:53 ] >>258 エラーメッセージはそれだけじゃないでしょ。前か後にも何か書いてあるはず。
260 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 22:14:58 ] >>256 ありがとうございます。使えるようになしました。 >>254 それは何度も疑っていたので大丈夫でした。 パスが通っていないとエラーが出ますしlib自体が正常に更新されているかどうかも確認していました。 複数のサブプロジェクトでクラスを作り、メインプロジェクトでこれらをライブラリとして読み込むために試行錯誤していました。 .hと.cppをコピーしてメインプロジェクトに追加するとメインプロジェクトだけで変更が可能なのと ファイル数が膨大になり管理がしにくくなるので改善したいと言うのが主な理由です。 今回の場合ですとMainProjプロジェクトでCTestClassクラスのメンバ変数や関数を自由に追加することが出来てしまったり TestProgプロジェクトでCTestClassクラスを更新するとMainProjプロジェクトのTestProg.libだけでなくTestClass.hの更新も必要になってしまいます。 MainProjプロジェクトのCTestClassクラス自体に変更が加えられないような仕組みや 更新がlibだけで済むような方法は無いものなのでしょうか。
261 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 22:31:40 ] ヘッダをいじらなくて済むようにするイディオムとしてpimplが有名。 少なくともprivateメンバの変更では共有するヘッダに影響を与えないで済む。
262 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 23:05:52 ] ある型がクラス/構造体かどうか調べる方法はありますか? あと、クラスのメンバ関数を列挙する方法はありますか template<typename T> void enum_functions() { if (T::is_class()) { for (int i = 0; i < T::func_count(); ++i) { std::cout << T::func_name(i) << '\n'; } } } みたいな感じで。
263 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 23:22:54 ] >>231 嘘はいかんよ。 >>235 >char a[]="test";とchar *b="test"; *a='T'; /* OK */ a[0]='w'; /* OK */ // *b='T'; /* NG */ b=a; /* OK */ *b='T'; /* OK */ b[0]='w'; /* OK */ // a=NULL; /* どうだったっけ?*/
264 名前:238 mailto:sage [2008/04/02(水) 23:28:59 ] >>262 どんな実装だよ。 せめてclass Tにしようぜ
265 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 23:30:32 ] // *b='T'; /* NG */ *b='T'; /* OK */ どっちだよ
266 名前:253,260 mailto:sage [2008/04/02(水) 23:32:01 ] >>261 初めて知った単語なので非常に有難いです。 結局クラスをライブラリにするのはcppファイルの中身が見えなくなるだけで(ビルドが早くなったりもしますが) いかにヘッダ部分をcppに移せるかで使用先(メインプロジェクト)での可変性が変わると言うことでしょうか。
267 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 23:34:28 ] >>262 思い描いている形とは違うかもしれないけど、 BoostまたはTR1にType Traitsに、is_classというものがある。 かなりコンパイラを選ぶだろうけど。 さすがにメンバの列挙はない。
268 名前:デフォルトの名無しさん [2008/04/02(水) 23:35:43 ] >>259 すいません。 "クラスA::関数()",referenced from: クラスB::関数() in クラスB.o symbol(s) not found collect2:ld returned 1 exit status とあります。
269 名前:デフォルトの名無しさん mailto:sage [2008/04/02(水) 23:40:16 ] >>265 // *b='T'; /* NG */ b=a; *b='T'; /* OK */ 分かりにくくてスマソ
270 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 00:43:38 ] >>268 クラスB.o の中に入っている クラスB::関数() から参照されている "ク ラスA::関数()" というシンボルが見付かりません、 とリンカー様(ld)が怒ってらっしゃる。 つまり、クラスA::関数() をコンパイルした .o ファイルやそれが入っ ているライブラリをコマンドラインに指定する必要がある。
271 名前:デフォルトの名無しさん [2008/04/03(木) 04:53:36 ] 文字コードの問題です。 wchar_t buff[3]; とあって SHIFT-JISで書かれたテキストから、fgetwsで読み込む事で 例えば、 「もじ」 ならば buff[0]<=も buff[1]<=じ と、入る事を望みます。 このような処理をする場合、どのようにすればいいのでしょうか? ちなみに、fgetwsで読むと、buff[0]とbuffr[1]で"も"が入ってしまいます。 fgetwsはsjisで書かれたテキストを自動で変換して読み込んでくれると聞いたのですが・・・。
272 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 05:00:49 ] あ、一応自己解決しました。 テキストを、UTF16のBOMなしにして setlocale(LC_CTYPE, "");を設定し、バイナリモードで読めばよかったんですね。 出来れば、SJISから変換されるとありがたいんですが・・・。
273 名前:デフォルトの名無しさん [2008/04/03(木) 08:16:33 ] std::vector<int> vec; という変数があるとして、 for (int i = 0; i < vec.size(); i++) {.....} とか書くとintとunsigned intを比較してるという警告がでて嫌なのでstatic_cast<int>(vec.size()) とかやってるのですが、これもいやです。どうすればいいですか?
274 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 08:28:55 ] 1.iをstd::vector<int>::size_typeにする。 2.iteratorを使う。 3.STLのアルゴリズムを使う。
275 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 08:43:33 ] >>273 4.iをunsignedにする。
276 名前:デフォルトの名無しさん [2008/04/03(木) 08:51:22 ] ありがとうございます。 STLのアルゴリズムを使うというのは、for文の中でやりたかったことがSTLのアルゴリズムで 表現できる必要がありますよね?常にできるということではないですよね?
277 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 08:55:56 ] >>271-272 まずは環境を書こう。
278 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 08:59:30 ] >>276 {...}の内容によってはちょっと面倒かも知れんので、その場合は2.かな。
279 名前:デフォルトの名無しさん [2008/04/03(木) 12:04:46 ] class complex { public: double re; double im; }; こういうクラスがあるときに、operator>>(istream &, complex &a) を定義するとすると、 どういう風にやるのがよいでしょうか?
280 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 12:07:17 ] そんなクラスは作らずに、標準ライブラリのcomplexを使う。
281 名前:デフォルトの名無しさん [2008/04/03(木) 14:05:47 ] windows2k MinGW を入れたいのです MinGWインストーラがネット無いので使えません ソースフォージからどれを落とせば良いでしょうか またそれは全て同じフォルダに上書きで良いでしょうか binフォルダなどかぶっているものがおおいんです 使いたいのはC、C++、SDL、OpenGLです パスは適当に通そうと思っています
282 名前:デフォルトの名無しさん [2008/04/03(木) 15:08:36 ] >>281 大陸へカエレ
283 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 15:10:11 ] 専用スレで聞いた方がいいんじゃない。自分はDev C++の日本語版で入れたけど
284 名前:281 mailto:sage [2008/04/03(木) 15:20:11 ] >>283 ではMinGWスレに移動したいと思います レスdでした
285 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 15:47:08 ] C/C++ってつおいですか
286 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 15:48:47 ] >>285 未定義です
287 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 15:52:35 ] BCBの__propertyはVCでも使えますか。VCで書いてみたら、色が変わったので。
288 名前:デフォルトの名無しさん [2008/04/03(木) 15:54:42 ] MFCを使ってCMainFrameから継承されたウィンドウとCDialogから継承されたダイアログを MTI(Multiple Top Level Window)風に同時に取扱たいです。 何か参考となるキーワードやソースやwebpageを教えて頂けないでしょうか。
289 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 16:00:47 ] >>287 VC入ってるのならF1押してヘルプを見るのだ
290 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 16:43:19 ] >>288 キーワード: モードレスダイアログ タイマー
291 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 17:14:42 ] VCのどっとねっとでないやつでVBやC#みたいなプロパティを作るものはありますか?
292 名前:288 mailto:sage [2008/04/03(木) 17:16:36 ] >>290 モードレスダイアログだとダイアログが子になってしまって、ちょっと欲しいものじゃないんです。 親子関係はなし、もしくはCMainFrameを子にしたいんです。
293 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 17:16:39 ] ATL
294 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 17:44:43 ] >>279 comlex& operator>>(istream & a)
295 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 17:52:31 ] >>292 ウィンドウ無か非表示の親からメインフレームとダイアログ作れば兄弟になる
296 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 17:59:36 ] _declspec(dllexport) こういうのって、Cの仕様なんでしょうか? それともコンパイラの方の仕様なんでしょうか? まとまった文章や文献をご存知の方がいらしゃいましたらよろしくお願いいたしますm(_ _)m
297 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 18:05:31 ] DLLはWindows用語
298 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 18:09:02 ] 文献はMSDNにある
299 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 18:12:00 ] >>291 msdn2.microsoft.com/en-us/library/yhfk0thd.aspx >>296 独自 msdn2.microsoft.com/en-us/library/3y1sfaz2.aspx
300 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 18:20:47 ] 先頭にアンダースコアが2つ付いたのは 一部の組み込みマクロを除いて、他は全て処理系の拡張仕様。
301 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 18:21:29 ] >>297 >>299 ありがとうございます。勉強してみます。
302 名前:300 mailto:sage [2008/04/03(木) 19:09:12 ] 俺は無視か・・・。まあいいけどさ。
303 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 19:19:55 ] >>302 ばかじゃねぇのw
304 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 19:31:24 ] >>302 質問者がレス読んでから投稿ボタン押すまでに書き込むとスルーされる アフリカではよくあること
305 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 19:45:47 ] >>302 すみません、気づきませんでした^^; ありがとうございます。 同じWindows環境でも、処理系に依存する部分は結構ありそうなので、頑張って調べてみます><
306 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 21:15:07 ] template<class T> class A{ public: void put( T t ) { std::cout << t << std::endl; } }; このようなテンプレートを用意したとして、 A<int> a; のようにintとして定義した場合に、put()にint以外の引数を 入れるとコンパイルエラーになるようにしたいんですが a.put( 1.0f ); // 例えばこの場合コンパイルエラーが出るようにしたい
307 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 21:21:19 ] A<float>().put(1.0f);
308 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 21:34:58 ] template<class T> class A{ public: template<class T2> void put( T2 t ) { BOOST_STATIC_ASSERT(boost::is_same<T, T2>::value); std::cout << t << std::endl; } };
309 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:00:35 ] C言語から自作したAPIを呼び出すにはどうすれば良いのでしょうか? Windows APIは、#include <windows.h>で呼び出すことができるようなのですが、 ソフトウェア屋が作ったAPIをCのソースから呼び出す方法がさっぱり。 ググっては見たのですが具体的な書き方が見つかりませんでした。 参考になるサイト、もしくはソースがあれば教えてください。
310 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:02:40 ] extern "C"
311 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:04:05 ] >>309 DLLを動的に呼び出すか、ソースなら#include ""だろ
312 名前:デフォルトの名無しさん [2008/04/03(木) 22:06:51 ] operator<<()の定義の中で、宣言なしにwsという変数を使ってwhite spaceを読み込んでいるものをみたのですが、 これが一体なになのかわかりません。コンパイルは出来ているのでつかえるみたいなのですが、、 ググってもいいのがひっかかりません。どうか教えてください。
313 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:20:15 ] >>310-311 ソフトウェア屋が用意したAPI(恐らくDLL)を手元のCソースから利用したいんですが… いまいちわからないです。C言語をやるのは初めてで。
314 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:22:13 ] 恐らくとか言われても・・・。 .lib をリンクして提供されてるヘッダファイルインクルードすればいいだけじゃね?
315 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:23:48 ] LoadLibrary
316 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:35:46 ] >>312 空白を読み飛ばすマニピュレータのstd::ws
317 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:36:49 ] >>297 OS/2やTOWNS-OSでもDLLだったけど生き残ったのはWindowsだけか
318 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:40:25 ] OS/2はNTの元ネタみたいなもんだし
319 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:40:38 ] >>314 なるほど…APIを触ったことがないのでどういうものかわかりませんでした。 ライブラリと同じような扱いでインクルードできるんですね。 ありがとうございました。
320 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:43:17 ] OS/2 って何?そんな子はいませんでしたよ!
321 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 22:45:56 ] API ttp://e-words.jp/w/API.html
322 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 23:42:51 ] std::mapのinsert()で戻ってくるiteratorとboolのpairな型はどこかに定義されていないの?
323 名前:デフォルトの名無しさん [2008/04/03(木) 23:43:33 ] c++のcomplexのoperator>>の実装を見たのですが、4+5i という複素数があったとすると、 (4,5) という文字列で入力するようになっていました。実装は()とかの括弧やコンマをみて ちゃんと処理やってたのですが、普通に考えたら、4+5iとかの文字列の入力の方が自然なような 気がするのですが、(4,5)の方がよいという理由がありますか? よろしくお願いします。
324 名前:デフォルトの名無しさん mailto:sage [2008/04/03(木) 23:47:48 ] C言語が(,)の入力に対応している点 a+biはC言語が対応していない
325 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 00:44:30 ] 他人の書いた CやC++ソースが大量にあったとして、 コード解析するときってどうやってる? Linux 環境で grep や vim + ctags で解析 → gdb で動作確認なんて やり方してる俺は激しく時代遅れな希ガス
326 名前:デフォルトの名無しさん [2008/04/04(金) 00:51:17 ] >>325 動作させられるなら、動作させてみて、どの関数が一番頻繁に呼び出されてるかをみてみる。 全体の20%のコードが80%の時間を使ってるというしな。
327 名前:デフォルトの名無しさん [2008/04/04(金) 01:06:04 ] >>324 c言語が対応してないというのは、どういう意味ですか? scanf()で一文字づつ読み込んで解析すればできませんか?
328 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 01:14:47 ] >>327 文字列を解析すればできるよ しかし、直接プログラム内で kansuu(x,y)とかけるのとは違う
329 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 01:15:14 ] >>327 何がいいたいのかよくわからんが・・・ >complex x = 3 + 2i; って使い方がしたいんじゃないのか?そいつぁ無理だ。(少なくともおれの知識じゃ) なぜそこでscanfが出てくるのがさっぱりわからんが >complex x = "3 + 2i"; なら、実装は可能だ。 ただ、種々の書式に対応するとめんどくさそうなことこの上ない実装になりそう。
330 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 01:15:48 ] プログラム内では、(x,y)の形にするか複素数型に変換するしか無い
331 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 01:22:17 ] scanf("%d+%di", &x, &y); みたいな?w
332 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 01:35:28 ] いや、入力は文字列で扱ってるんだが、 "1+2i"じゃなくて、"(1,2)"みたいに、実装してあるのは何で? って質問だと思われw
333 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 01:54:54 ] C++標準のcomplexって使ったことないんだけどそういう仕様なの? 仕様なら仕方ないが信じがたいんだがw
334 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 01:58:38 ] C++はこうだろ? std::complex<double>(1, 3)
335 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 02:10:39 ] complexをiostreamで出力するときに、 "1+2i"じゃなくて"(1,2)"となっているのは何で? ってことだろ。
336 名前:335 mailto:sage [2008/04/04(金) 02:12:00 ] × complexをiostreamで出力するときに、 ○ complexをiostreamで入出力するときに、
337 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 02:23:09 ] コピペして使えるようにじゃね?
338 名前:デフォルトの名無しさん [2008/04/04(金) 02:41:24 ] 335の人が言っているのが、こっちの意図です。でも最初の人がC言語ではサポートしていない、 というのがどういう意味だったのかはわかりました。 文字列で扱うんなら、4+5iとかでも問題ないと思ったのですが、(,)で実装してしまったし、、、 4+5iとかはちょっと面倒くさそう。
339 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 07:40:38 ] iだったりjだったりするからじゃねw
340 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 12:05:27 ] テンプレートクラス作って、 そのポインタをlistにつっこんで イテレータで走査しようとしたら怒られる //Error list<Hoge<T>*>::iterator it; expected `;' before "it" テンプレートクラスを テンプレートのままぶち込むのがいけないのか、 それとも別のところがいけないのかでいいんで教えてください
341 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 12:30:31 ] - list<Hoge<T>*>::iterator it; + typename list<Hoge<T>*>::iterator it;
342 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 12:34:55 ] ああ、そういうことだったのね(´・ω・`) ありがとー
343 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 12:35:00 ] >>340 そりゃ型決まってないと無理でないか? list<Hoge<int>*>::iterator it; とかならいけると思うけど。
344 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 12:41:23 ] gccだとちゃんとエラーはいてくれるがVCだと通るから困る
345 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 15:28:40 ] を、2ページ目にも修正入ったみたいだな。
346 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:45:18 ] 教えて!! 言語を勉強したいのだが何がお勧め?? C++??Java??
347 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:46:17 ] 目的は? 趣味なら何でもいいと思うよ。
348 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:47:57 ] >>346 BASIC
349 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:51:06 ] >>347 >>348 仕事でUNIXのオペレータをしています。 言語を覚えてスキルアップしたい。と思っています。 でも色んな言語がありすぎて何を始めればいいのか 分かりません。今の時代にあっていてこれからも使っていけそうな 言語を教えて下さい。お願いします。
350 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:53:20 ] >>346 スレタイが読める程度の日本語。
351 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:53:45 ] UNIXならまずはシェルスクリプトからはじめてみては? で、awk&sed、perl、python or rubyと進むとか。
352 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:57:41 ] C/C++のスレで訊かれたなら、やっぱりC/C++と答えるべきか
353 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:58:14 ] C#といってみる
354 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 16:59:02 ] C++では簡単に出来てJavaでやりにくい事 その逆などを教えて下さい。
355 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 17:03:38 ] その手の質問はぐぐったほうが丁寧な解説出てくるよ ここで聞いてもすれ違いのうえ端的だったり極端すぎる答えしか返ってこないよ
356 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 17:15:06 ] 初心者のためのプログラミング言語ガイド Part7 pc11.2ch.net/test/read.cgi/tech/1200807067/
357 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 20:28:22 ] 初心者はまずこれを読んで ポインタを理解すること builder.japan.zdnet.com/sp/c-programming-language/story/0%2C3800083430%2C20370255%2C00.htm これができない奴はC/C++いじるの辞めろ 適正が0かマイナスだ
358 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 20:58:48 ] >>94
359 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 21:22:45 ] それ1週間前のネタ
360 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 21:50:48 ] C++にポインタ排卵だろ
361 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 21:57:43 ] まあ大部分は排除できるな。
362 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 22:21:10 ] constメソッドからでもポインタ型メンバの参照先なら操作し放題とか駄目活用している
363 名前:238 mailto:sage [2008/04/04(金) 22:32:21 ] protectedでstaticな独自クラスの配列の参照の初期化で他のクラスのメンバ変数を与えたいんですが 無理ですよね・・・? もし他のクラスのstatic変数なら大丈夫でしょうか?
364 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 22:36:38 ] RTTIは実際にどういう場面で使われるんですか? template<typename T> void hoge(const T &a) { if (typeid(a) == typeid(int)) { ... } } とかやるんですかね
365 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 22:37:35 ] クラスのインスタンス自身への参照ならいくらでも可能だと思うが、 その中のメンバ変数と言われると難しいというか、 そもそもそんな怪しい事しようとしている事にまず疑問を持たざるを得ない。
366 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 22:38:45 ] >>364 dynamic_cast も RTTI を利用してる。 typeid はあまり使う事は無いな。
367 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 22:54:27 ] dynamic_castなら、よくこういう状況で使いたくなる。 1. ライブラリの用意した基底クラスBから派生した自作クラスDを作る。 2. Dのインスタンスをライブラリに渡す。 3. ライブラリからのコールバックで2で渡したものがB型への参照・ポインタで与えられる。 この例だと結局boost::polymorphic_downcastにするんだけどね。 >>364 その例だったら特殊化で十分。
368 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 23:00:11 ] 配列の参照のスタティックなクラス変数のクラス定義外での宣言って Hoge Piyo::(&foo)[][100]; じゃないの・・・?
369 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 23:05:51 ] とりあえずコンパイルの通るコードを頼む
370 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 23:09:04 ] >>360 多態とか
371 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 23:09:50 ] スマートポインタでいい。
372 名前:デフォルトの名無しさん mailto:sage [2008/04/04(金) 23:58:47 ] でいいというか、ポインタ使えないなら、ポインタもどきを使うしかない。 クラスがメンバに参照を持つとコンテナに突っ込めなくなってしまうので、 嫌でもポインタ使わなきゃならないと思うんだけど。
373 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 00:07:58 ] 大体ポインタを理解できないならスマートポインタも理解できないかと 360は何を言いたかったのだろう
374 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 00:08:53 ] スマートポインタはアドレス演算とかやらないから scoped_ptr くらいなら何とかなるんじゃね?
375 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 00:15:57 ] ダメな奴は、やり方が言語仕様に引っ張られる。
376 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 00:17:42 ] いやイテレータ使うならアドレス演算と大して変わらないんじゃないか ポインタわからないようではC++できないというのは真実だと思うけど
377 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 01:24:51 ] 排卵日
378 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 03:16:18 ] メンバ変数の文字列の一部を新しい文字列として返したいんですが どういう方法がありますか? こういうのです class Test { private: char data[256]; public: char * getStr() { char *ret = new char[3]; ret[0] = data[0]; ret[1] = data[1]; ret[2] = data[2]; return ret; } }; これを std::string str = getStr(); このように使った場合retのデリートができないので メモリリークしますよね?何かいい方法ありませんか?
379 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 04:35:02 ] const std::string getData() const { return std::string( data ); }
380 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 06:48:36 ] 終端に '\0' を追加するのも忘れずに
381 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 08:04:56 ] クラスがメンバに参照を持つとコンテナに突っ込めなくなってしまうので、
382 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 08:49:39 ] void getStr(std::string& str) const { str.assign(data, 3); } std::string getStr() const { return std::string(data, 3); } 後者は代入する時にコピーが発生するので場合によっては効率悪いが (初期化の場合は大抵のコンパイラなら戻り値最適化してくれるので大抵コピーは発生しない)、 かといって前者は必ず変数用意しないといけない。 どっちにするか、あるいは両方用意するかはお好きなように。 まあ、string にどんなメンバがあるかくらい見とけ。 www.wakhok.ac.jp/~sumi/stl/header/string.html
383 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 10:43:49 ] >>381 参照のようなconstなメンバー変数を持つとコピーコンストラクタが書けない 一方ほとんどのコンテナはメモリ確保を自動でするからコピーが発生する 常識だと思ってたんだけどどこかおかしいのか
384 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 10:53:24 ] デフォルトコンストラクタが書けないと言った方が正しいか
385 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 11:06:11 ] コピコンは書けるだろ? 書けないのは代入演算子。
386 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:09:51 ] 終了文字の\0って入れなきゃいけないんでしょうか。 サンプルで\0を使っているコードを\0消しても正常に動作するんですが。
387 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:14:40 ] BCCで「異なる 〜型へのポインタが混在している」って出るんですが、 これってどうすれば解決できるんでしょう? 箇所は vsprintf(unsigned char*,const char*,va_list); って使ってるところなんですが、unsignedのポインタからsignedのポインタにはキャストできないって言われたし・・・
388 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:14:41 ] >>386 コードによる。サンプル晒せ。 実はどこかで\0が付いているだけかもしれない。
389 名前:386 mailto:sage [2008/04/05(土) 12:28:09 ] >>388 これです。 int CreateSave() { HANDLE hFile; SYSTEMTIME st; TCHAR szTime[128]; TCHAR *lpszBuf; DWORD dwAccBytes; DWORD dwSize = 0L; HGLOBAL hMem; DWORD dwLen; GetLocalTime(&st); wsprintf(szTime,_T("\r\nファイル作成時: %d年%02d月%02d日%02d時%02d分%02d秒"), st.wYear, st.wMonth, st.wDay, st.wHour, st.wMinute, st.wSecond); dwLen = (DWORD)lstrlen(szTime);
390 名前:386 mailto:sage [2008/04/05(土) 12:28:48 ] 続き hFile = CreateFile(_T("ファイルログ.txt"),GENERIC_READ, 0, NULL, OPEN_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); dwSize = GetFileSize(hFile, NULL) + dwLen; hMem = GlobalAlloc(GHND, sizeof(TCHAR) * dwSize + 1); lpszBuf = (TCHAR*)GlobalLock(hMem); ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL); CloseHandle(hFile); lstrcat(lpszBuf, szTime); lpszBuf[dwSize] = '\0'; hFile = CreateFile(_T("ファイルログ.txt"), GENERIC_WRITE, 0, NULL, CREATE_ALWAYS, FILE_ATTRIBUTE_NORMAL, NULL); WriteFile(hFile, lpszBuf, (DWORD)lstrlen(lpszBuf), &dwAccBytes, NULL); CloseHandle(hFile); GlobalUnlock(hMem); GlobalFree(hMem); return -1; }
391 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:30:09 ] >>387 (const signed char *)にキャスト
392 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:50:12 ] >>390 よく読んでないけどstrcat(lpszBuf, szTime);この時点で¥0がついてると思われ
393 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:58:53 ] >>391 constってことは第2引数にですよね?やったら同じエラーが2個に増えたんですけど・・・
394 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 12:59:59 ] constを破るキャストがあるんですが、あれがあったらconstの意味なくないですか?
395 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 13:04:11 ] constは破るためにある だから const const charがあるだろ
396 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 14:33:43 ] >>390 lpszBuf = (TCHAR*)GlobalLock(hMem); ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL); CloseHandle(hFile); lstrcat(lpszBuf, szTime); lpszBuf[dwSize] = '\0'; このあたりか。 何か無茶苦茶危険なコードに見えるんだけど。 hMem = GlobalAlloc(GHND, sizeof(TCHAR) * dwSize + 1); ← dwSize 文字分のメモリを確保してるつもりのようだが、+1 の位置がおかしい(TCHAR が2バイトの時に領域が足りない) lpszBuf = (TCHAR*)GlobalLock(hMem); ReadFile(hFile, lpszBuf, dwSize, &dwAccBytes, NULL); ← dwSize 読み込む CloseHandle(hFile); lstrcat(lpszBuf, szTime); ← '\0' を付けないまま lstrcat は危険というか、szTime の文字数分領域がさらに必要なんだけどその領域を確保すらしていない lpszBuf[dwSize] = '\0'; ← lstrcat の前に行う
397 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 14:35:01 ] しかも、lpszBuf[dwSize] = '\0'; じゃなくて lpszBuf[dwAccBytes] = '\0'; だな。
398 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 14:41:08 ] Unicodeビルドかどうかで、ファイルの文字コードまで 影響を受けるというのは良くない場合のほうが多いと思うけど、 それはいいのか?
399 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 15:57:43 ] 何もひねらずに考えるとこうですが if( n % 2 ) printf( "奇数です\n" ); else printf( "偶数です\n" ); 奇数か偶数か調べるもっともスマートなコードってどんなんですかね?
400 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 15:59:38 ] int isOdd(int n){ return n % 2; } if( isOdd(n) ) printf( "奇数です\n" ); else printf( "偶数です\n" );
401 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:00:21 ] スマートってのが読みやすいって意味ならそれでいいんじゃね? スマートが短いって意味なら、いろいろあるだろうけど。
402 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:00:43 ] inline bool isOdd(int n) { return n % 2 != 0; }
403 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:07:03 ] 下位1bitでも調べればいいんじゃね スマートといえるかわからんけど
404 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:08:36 ] 最下位ビット調べて0なら偶数
405 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:09:05 ] かぶった><
406 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:10:52 ] この程度なら最適化されないのかな?
407 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 16:23:00 ] まともなコンパイラならするよ。
408 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:00:52 ] std::string のfind()とfind_first_of()の違いって何ですか? どちらも最初の位置を返すと思うんですが
409 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:04:02 ] findはコンテナから特定の要素を見つける。 find_first_ofはコンテナから特定のコンテナの要素を見つける。
410 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 17:21:25 ] std::string str("hogefugapiyo"); std::string::size_type find = str.find_first_of("abc"); "abc"のうち一番最初に見つかった要素の位置を返す コンパイルが通るかは試してないのでわからん
411 名前:デフォルトの名無しさん mailto:age [2008/04/05(土) 18:17:44 ] 質問です。 以下のような二つのコードの時間を計ってみたら、 コードBの方が早く、コードAはすさまじく重くなりました。 なぜでしょうか? あと、コードAの方で、変数aをデバッグで値を見ると、 1.731e-040#DEN のように表示されます。 #DENとは何なんでしょうか? よろしくお願いします。 環境はVisual c++ 2005です。 //コードA for(int i =0; i< 5000; i++){ float a = 1.731e-040f; float b = 1.731e-040f; float the_test = a*b; } //コードB for(int i =0; i< 5000; i++){ float a = 0.1f; float b = 0.1f; float the_test = a*b; }
412 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 18:31:22 ] >>411 DENormal number (非正規化数) FPUによっては非正規化数の演算をサポートしてなくて、 これをソフトウェア側でエミュレートしてる場合がある。 すると、パフォーマンスが落ちる原因になる。
413 名前:じじ [2008/04/05(土) 18:57:43 ] MFCをつかったマルチスレッドプログラミングを仕事で要求されているの ですが、APPクラスの子レッドとしておくのがいいのでしょうか?
414 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 19:17:30 ] enum は ビットマスクしてもいいですか?
415 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:03:42 ] どうやったらうまくコーディングできるんだろう? すぱげってぃーなコードになってしまう。やっぱり慣れるしかない? 以下サンプル void binary_search(double x,double y,double *z) { int i; double c,j; j = 0.0000001; for(i=0;y*y - 2 > j;i++) { if(x*x - 2 < 0 && y*y - 2 > 0) { c = (x+y)/2; if(c*c - 2 > 0) y = c; else x = c; } binary_search(x,y,z); } *z = x; } 再帰しまくりでサーセン。でもどうやったら再帰せずに実現できるだろう? 考えるのが面倒&考えても良く分からないので再帰に走る今日この頃。
416 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:04:37 ] 無理に再帰を使わない方がスパゲティ化する。
417 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:11:04 ] 再帰はスタックで実現している。
418 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:12:39 ] >>415 何がしたいんだよ? binary_search(x,y,z); ↓ //binary_search(x,y,z);
419 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:21:12 ] バイナリサーチをバイナリデータのサーチと勘違いしてたりして 変数一文字でコメントもなくて通じると思ってるんだろうか
420 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 20:29:23 ] binary search じゃなくて bisection method の間違いだったわ 恥ずかしい。。。。鬱だしのう orz
421 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 22:55:05 ] これが日本のITレベルだ pc11.2ch.net/test/read.cgi/prog/1191638525/43-44 くずばっかw
422 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:05:51 ] >>421 すまん、記事のコメントと同じ事をいいたいのか それとも、2ページ目の解説についていいたいのか さっぱり分からないから、ちゃんと説明してくれないか?
423 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:06:44 ] x 日本 o IBM
424 名前:デフォルトの名無しさん [2008/04/05(土) 23:37:02 ] 内部に二次元配列をもつクラスから、instance[0][0]みたいな書き方で値を取得したいと思ってます。 double operator[][](int x, int y) のような書き方は出来ないみたいなので、(コンパイル失敗しました)、 この場合どうすればいいでしょうか?
425 名前:デフォルトの名無しさん [2008/04/05(土) 23:47:13 ] 要素数が100万くらいあるvectorを半分にして50万要素のvector2つにしたいのですが、 50万番目のiteratorを取得するのにiterator++ を50万回呼ぶ以外の方法はないのでしょうか。 vector<int>::iterator it=vec.begin()+vec.size()/2 とかいう感じだと演算子+は定義されていない、とかでダメなもんで。 この辺がポインタとの違いかなとは思うのですが。
426 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:50:06 ] επιστημη ってこんなところにも出没するんだな
427 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:54:19 ] >>425 std::advance というか、+ は定義されているはずなのだが、 どんなコンパイラ使ってるの?
428 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:54:52 ] >>425 コンパイラ何使ってるの? vector のイテレータはランダムアクセスイテレータのはずだから、 コンパイラの実装がおかしいだろ、それは。
429 名前:デフォルトの名無しさん mailto:sage [2008/04/05(土) 23:55:08 ] >>425 vector<int>::iterator it= &vec[vec.size()/2]; みたいな感じでできないか?
430 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 00:01:24 ] >>429 それはダメ。ポインタとごっちゃになってる。
431 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 00:08:31 ] PCSX2というソフトをコンパイルしたいんですがやり方がわかりません。 プログラムについての知識0です。 勉強したいとかではなくこのソフトがほしいだけです。 Microsoft Visual C++ 2008をとりあえずインストールしましたがやり方がまったくわかりません。 サルにも判るように教えてくれる方がいれば幸いです。 ttp://www.pcsx2.net/files/10490 ttp://pcsx2.svn.sourceforge.net/viewvc/pcsx2/pcsx2/GS.cpp?view=markup&pathrev=346
432 名前:425 mailto:sage [2008/04/06(日) 00:10:23 ] すみません。できました。どこかで間違った思い込みしてたみたいです。
433 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 00:23:40 ] >>430 ランダムアクセスイテレータはポインタ互換だと勘違いしてた そういう実装が多いだけか
434 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 00:25:07 ] >>433 使用可能な演算子はポインタと同じだが、 ポインタとの間で相互変換することはできない。
435 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 00:26:14 ] ただし、ポインタもランダムアクセスイテレータの一種だけどね。
436 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 01:01:40 ] >>424 プロキシクラスを返す。 class A { public: class Proxy { public: double operator[](int y); }; Proxy operator[](int x); };
437 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 01:06:20 ] ポインタ返せるならそれでいいと思う。 範囲チェックしたければ何かクラス返すことになると思うけど。
438 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 10:48:56 ] >>431 スレ違いだということ、サルでも分かるかな?
439 名前:411 mailto:sage [2008/04/06(日) 12:00:53 ] >412 回答ありがとうございます。 遅くなる原因がわかり、勉強になりました。 ありがとうございました。
440 名前:デフォルトの名無しさん [2008/04/06(日) 12:57:53 ] >>436-437 ありがとうございます。 以下のような実装でいいですか? (あまりスッキリしてないような、、) class test { public: test(int arg_size); struct Proxy { Proxy(int arg_size) : size(arg_size) { vec.assign(size, 0.0); } double &operator[](int y) { return vec[y]; } std::vector<double> vec; int size; }; Proxy &operator[](int x) { return proc_vec[x]; } std::vector<Proxy> proc_vec; int size; };
441 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 13:36:20 ] ていうかよっぽどの理由が無いなら()演算子のでいいじゃん
442 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 14:08:59 ] クラスの中身の先頭にusing namespace 〜;は書けないの?
443 名前:デフォルトの名無しさん [2008/04/06(日) 14:11:20 ] >>441 なるほど、たしかに全然すっきり書けますね。 メンテもしやすそうだし、こっちにします。 ありがとうございます。 class Matrix { public: Matrix(int arg_size) : size(arg_size) { vec.assign(size, std::vector<double>(size)); } std::vector< std::vector<double> > vec; int size; double &operator()(int x, int y) { return vec[x][y]; } };
444 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 14:18:34 ] >>443 440でもそうだったけど、size変数って不要じゃね?
445 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 15:13:16 ] >>443 更にで何だけど、要素数のパターンが少なくて、定数でしか使わないなら要素数テンプレートにしちゃうと ベクターも使わずに済むが・・・ 用途分からんからしらね
446 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 15:15:45 ] エラー 1 error LNK2001: 外部シンボル ""private: static int Forms::Application::nCmdShow" (?nCmdShow@Application@Forms@@0HA)" は未解決です。 main.obj ってどういう意味のエラーですか?
447 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 15:21:22 ] >>446 宣言だけされてて関数が定義されていない。
448 名前:デフォルトの名無しさん [2008/04/06(日) 15:34:25 ] >>445 どうやるんですか? 要素は、二次元ベクトルなんですが、1000×1000要素くらいです。
449 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 15:36:35 ] >>446 プロジェクトのリンクするライブラリの設定で 必要な関数入ったLIBファイルを設定しわすれてるんじゃない
450 名前:デフォルトの名無しさん [2008/04/06(日) 15:37:08 ] >>444 その通りですね。 size変数は消します。
451 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 15:46:43 ] >>448 vectorの要素数って変わるの?
452 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 16:25:26 ] >>448 横レスだが、こういうことだと思う。 template<int size_x, int size_y> class Matrix { public: double& operator()(int x, int y) { return v_[x][y]; } private: double v_[size_x][size_y]; }; 1000×1000は大きいので、スタックには置けないけど。
453 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 16:43:03 ] よくみるLPクラス名って、そのクラスのポインタ型って事?
454 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 17:00:20 ] >>453 そういう名前付けの規則が昔はやってたんだよ。
455 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 17:02:13 ] ある天気予報サイトの三重県の天気情報の文字列だけを抽出して自分のホームページに乗せるプログラムを書きたいのですが、どういったことを勉強すれば良いのかご教示願えないでしょうか。宜しくお願いします。
456 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 17:13:54 ] >>455 ・サイトにアクセスしてページを入手する ・ページを加工する ・自サイトに貼り付ける WebProg板へどうぞ。
457 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 17:32:48 ] エラー 1 error C2143: 構文エラー : ';' が 'Forms::Application::frm' の前にありません。 application.cpp 7 エラー 2 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません application.cpp 7 エラー 3 error C4430: 型指定子がありません - int と仮定しました。メモ: C++ は int を既定値としてサポートしていません application.cpp 7 エラー 4 error C2371: 'frm' : 再定義されています。異なる基本型です。 application.cpp 7 >>449 >>447 解決しました。 が、今度はこんなエラーが。 定義はしたんですが、今度は定義した場所でエラー吐くようになりました。
458 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 17:52:08 ] >>457 >>54-
459 名前:デフォルトの名無しさん mailto:sage [2008/04/06(日) 19:44:31 ] ありがとうございました。 名前空間をちゃんと指定してなかったのが原因でした。
460 名前:デフォルトの名無しさん [2008/04/07(月) 02:21:47 ] ヘッダに定義とか書けちゃうんだけど、 分けた方がええの? 分ける理由ってなんですか?
461 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 02:41:53 ] >>460 定義のほうをあらかじめコンパイルしてオブジェクトにしとける 小さいなら定義も一緒でいいだろ boostとかにもそういうのあるよ
462 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 02:46:51 ] >>460 プログラムサイズが増えたり重複オブジェクトができたりコンパイルが通らなかったりする
463 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 02:49:17 ] ヘッダに関数書くならstaticつけるかファンクタにするかテンプレートにしとけよ。
464 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 02:54:18 ] こういう質問をする人のレベルだと、一番掴みやすいのはコンパイル時間の問題かなぁ。 >>460 たとえば、計10万行くらいあるソースファイル群のすべてが 直接or間接的にhoge.hppというヘッダファイルをincludeしているとして、 hoge.hppが実装まで全部書いてあるモノだったとすると、 その実装部分をほんの1行変更しただけで、10万行のソースファイル群が すべて再コンパイルされることになる。 定義を別ファイルにしておけば、変更したときに再コンパイルするのはそのファイルだけで済む。
465 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 04:53:14 ] LinuxにおいてHDDの容量を取得したいのですがどの様にすればよいのでしょうか?
466 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 04:59:01 ] ただのグローバル変数とstaticをつけたグローバル変数って同違うんですか?
467 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 06:43:59 ] >>465 Linux板へどうぞ。ulimitでできるでしょ。 >>466 前者は文字通りGlobal。後者はファイルスコープなので違う翻訳単位からは見えない。 どちらにしても、可能な限り使わないに越したことはない。
468 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 07:14:53 ] >>464 >>463 >>462 >>461 ありがとう。 なんとなくわかった。
469 名前:デフォルトの名無しさん [2008/04/07(月) 07:45:15 ] >>463 ヘッダに関数書くときに、static付けたり、ファンクタにしたり、テンプレートにしたりすると、 どういう点でいいですか?全然考えてませんでした。
470 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 07:59:53 ] 関数が複数実体化されることを抑制できる。
471 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 12:23:30 ] ★ 今世紀最大の大祭り!聖火を巡る障害物リレー 日本イベント来たる! ★ 【目的】 街中をオニが駆け巡ります。 オニは聖火を持って移動します。これを消すのが目的です。 ただし、今回は参加者が多いため難易度がはね上がりました。 今回のみ、オニは壁役に守られながら走ります。 壁役を突破して聖火を消せばゲームクリアとなります。 【ルール】 〜勝ち〜 オニが持っている聖火を消すとその時点でゲームクリアとなります。 〜負け〜 オニが若里公園まで逃げ切るとその時点でゲームオーバーとなります。 【日時 】 2008年4月26日(土)8:30スタート 【場所 】 長野県長野市 【ルート地図】 ttp://www.city.nagano.nagano.jp/upload/1/taiiku_lane.pdf 【詳細情報 】 ttp://www.joc.or.jp/beijing/torchrelay/index.html ------------------------------------------------------------- イギリスで行われたイベントの様子 ttp://jp.youtube.com/watch?v=1-KMVWRFLes フランスで行われたイベントの様子(1分30秒から) ttp://jp.youtube.com/watch?v=9mYEtkW2bsw 『2ch大規模OFF会場』 ttp://sports11.2ch.net/test/read.cgi/offmatrix/1207495088/ ttp://sports11.2ch.net/test/read.cgi/offmatrix/1207418064/ 『各国の競技結果』 ttp://ja.uncyclopedia.info/wiki/%E3%82%A8%E3%82%AF%E3%82%B9%E3%83%88%E3%83%AA%E3%83%BC%E3%83%A0%E3%83%BB%E8%81%96%E7%81%AB%E3%83%AA%E3%83%AC%E3%83%BC
472 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 18:43:10 ] 四則演算ってさ、 char でも int でも double でもしてくれるが、 それってコンパイル時に適切にマシン語に変換してくれてるんですか? CPUが持ってる算術演算の機能を使えるように 置き換えてるのであってCPUが int なのか char なのか判断して 処理してるわけではないですよね?
473 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 18:51:06 ] >>472 そうだよ ないです
474 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 19:12:35 ] ただし格上げされて計算されるので種別はそんなに多くないです。
475 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 20:03:56 ] 格上げ、というか汎整数拡張あたりじゃないのかな
476 名前:デフォルトの名無しさん mailto:age [2008/04/07(月) 22:26:22 ] とりあえず宿題スレの方で提出が終わったので、 自分なりに作ろうと思っているのですが、いきなり行き詰ってしまいました; 整数の場合8桁、負数の場合9桁、エラー仕様など、問題が山積みですが、 どうかご教授お願いします。 ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6203.txt
477 名前:476 mailto:sage [2008/04/07(月) 22:28:20 ] #define buffersize 10ですね;
478 名前:デフォルトの名無しさん mailto:sage [2008/04/07(月) 22:41:06 ] >>476 何がしたいんだ?宿題をといて自分なりに課題を拡張して勉強しようとしたのか? そのテキストファイルを見せられても、課題を丸投げされているようにしか見えないが。 とりあえずバッファオーバーフローしてたり、いろいろまずいぞ。
479 名前:デフォルトの名無しさん [2008/04/08(火) 10:55:17 ] ttp://www.nicovideo.jp/watch/sm2820444 この動画でやっている、画像ファイルをテキスト(AA)に変換は どのようにやっているのですか?
480 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 11:03:12 ] 動画にコード出てるじゃないか……
481 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 11:08:11 ] 画像の輪郭抽出→予めこのパターンにはこの文字を使うというデータを登録しておく→ 画像の上から順にパターン解析と文字割り当てを行う。 って感じしか思い浮かばん
482 名前:デフォルトの名無しさん [2008/04/08(火) 11:08:35 ] >>480 初心者なもので・・・ 画像を読み込んで、テキストに変換してさらにそれの色を判別してつけるのは どの辺のコードを見たら良いのでしょうか?
483 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 11:19:20 ] 今動画見てきたぜ。想像してたのと違ったぜ。とりあえずBMPを配列にするとこからはじめたら? BMPのフォーマット↓凄く簡単だからすぐできるはず。 ttp://www.kk.iij4u.or.jp/~kondo/bmp/ 後は色に合わせて<font color="色">■</font>をひたすら出力すればできるだろ。 中級入門くらいじゃね?動かしたいならJavaScriptの解説かじればおk
484 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 12:38:37 ] >>476 とりあえず、どのあたりで困ってるのかな。? mainに全部書くのではなく関数を作ってみよう。 引数をまとめれば、何をするべきかわかるんじゃないかな。
485 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 12:43:09 ] 昔、先輩が「コンストラクタではnew使うな」と言っていたのを思い出したのだけど、 これってどういう意図なのでしょう。 一般的なルールなのか、特定の状況で有効な話だったのか……。
486 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 12:47:03 ] >>485 コンストラクタ内で例外が発生すると、デストラクタは呼ばれない (仕様) → new でコケたらリーク! じゃね? コンストラクタ内の例外は漏れなくコンストラクタ内で処置すれば無問題。
487 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 13:04:20 ] >>479 お絵かきとかでもあるネタだけど、むしろどうやって動画にしてる のかの方が気になる。コーディング中ずっと録画してあとで編集 してるんだろうが…根性あるなw
488 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 13:17:33 ] コーディング中のキータイプを記録、編集 ↓ 動画を取りながら記録したキータイプをマクロで動かす ↓ (`゚'Д`゚')
489 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 13:24:03 ] >>479 画像を読み込んで表示するところから始めたらいい 結構親切っぽいから彼のサイトの掲示板で聞いてみれば 講座の方はかなり酷いスパゲティコードだからお勧めしないw
490 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 16:01:19 ] この講座、どんな感じ? ttp://weblearningplaza.jst.go.jp/cgi-bin/user/top.pl?next=lesson_list&type=simple&field_code=40&course_code=585
491 名前:デフォルトの名無しさん [2008/04/08(火) 18:21:58 ] cinからdoubleを1つまたは複数入力させます。入力されたのが1個なのか、複数なのか判定したいのですが、 以下のコードでよいですか?Macだとうごくのですが、windowsでもこれでいいのかわかりません。 double a; std::cin >> a; if (std::cin.peek() == '\n') { // 数字は一個だった } else { // 一個じゃなかった。 }
492 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 18:48:09 ] >>491 やってみりゃいいじゃない。
493 名前:デフォルトの名無しさん [2008/04/08(火) 19:06:50 ] >>492 ありがとうございます。今手元にwindowsがないのです。 また、自分のところのwindowsでやってみて動いても、ほかの人のwindowsでは どうなるかわからないし… その、規格的に入力の文字列末判定はこれでいいのかどうか、知り痛いです。
494 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 19:10:04 ] >>485 VC8で大量にメモリの確保しているとコンストラクタの中のnewで「メモリが不足しています。」とエラーがでる。 理由が分からずallocにしたら問題なかった。 というか今も原因が掴みきれない件。
495 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 19:20:20 ] 使う型がある程度限定できるテンプレートだったら MyTemplate<型名>をtypedefしてしまえば良いような気がするけど これってありなんですかね?
496 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 19:38:16 ] まさにstringとwstring
497 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 20:08:28 ] >>493 つボラギノール
498 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 21:56:33 ] >>495 あり。
499 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 21:59:56 ] ありあり。
500 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 22:04:32 ] ありありありあり。
501 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 22:05:12 ] ありが十匹で
502 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 22:14:19 ] さよならだ
503 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 22:23:50 ] アリーヴェデルチ
504 名前:476 mailto:age [2008/04/08(火) 22:28:39 ] >>478 様 ですよね、失礼しました; >>484 様 エラー仕様を作ろうとしたのですが、 【整数の場合最大8桁までを有効とし、9桁以降を無視する。 負数の場合は、最大9桁までを有効とし、10桁目以降は無視する。】とあり、 【『−』のみ、または改行のみ入力されたらエラーメッセージを表示し、終了】 というのもあるので、 エラーとしては if(a[0]=='\n') if(a[1]=='-' && a[0]=='\n') みたいなのを使えばいいのかなぁ、程度で考えてるのですが、 どこに入れればいいのかなどイマイチ判らないのです;
505 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 22:34:19 ] ひょっとしてその数え方だと、「-1」は2桁なのか?
506 名前:476 mailto:age [2008/04/08(火) 22:53:28 ] >>505 私的にはそういう風に考えてます;
507 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 22:54:05 ] >>486 なるほどー例外ですか。それは思い浮かばなかった。 newしたときの初期化の処理が無駄だったりするのかとか当時考えたのを思い出した。
508 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 23:02:41 ] >>504 whileを抜けて >if(a[0]=='\n') if(a[1]=='-' && a[0]=='\n') の場合にreturnで終わればOK returnの前にprintfで適当にエラー出せば目的のものになるだろ。 >どこに入れればいいのかなどイマイチ判らないのです; どこに入れてダメだったんだ?
509 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 23:09:47 ] classのなかにnamespaceは作れますか?
510 名前:デフォルトの名無しさん mailto:sage [2008/04/08(火) 23:19:28 ] muri
511 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 03:14:20 ] 質問なのですが、(VC++ 2008 EE を使用しています。) 以下のコード。 COORD coord; HANDLE hConsoleStdOut = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleCursorPosition(hConsoleStdOut, coord); は、<windows.h>をインクルードして使える、というのは判断できますが、 これはwindowsプログラミングなのでしょうか? WinMain()関数も無いし、DOSで表示されるのですが、 こういったコードの総称は何と呼ばれているのですか? 説明下手で申し訳ないです。
512 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 03:17:27 ] WindowsのAPIに依存してるならどう考えてもWindowsプログラミングだと思うが…。
513 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 03:39:45 ] WindowSystem(≒GUI)プログラミングではないが、 (MS-)Windowsプログラミングだな。 ついでに言えば、コンソールウィンドウはDOSではない。
514 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 04:02:03 ] >>512 >>513 ありがとうございます。 この「COORD coord;」や「HANDLE」の意味が解らず、 じゃあ総称が判ればネットで検索できる、と思い至ったのですが、 ネットを見ても、C言語による(MS-)Windowsプログラミングが掲載されていないんですよね。 はぁ。。。
515 名前:デフォルトの名無しさん [2008/04/09(水) 05:19:59 ] >>514 日本語訳は無いけどMSDNに載ってるよ。
516 名前:Alexander The Great WAS ALBANIAN, the PROOF by Flamuri [2008/04/09(水) 06:53:32 ] www.youtube.com/watch?v=YHmV_1nXpX8
517 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 07:30:25 ] >>507 ちゃんと delete すれば問題ない。 例外を一旦コンストラクタ内でキャッチして delete するのもいいが、 スマートポインタに入れておけばあとはデストラクタが勝手に何とかしてくれる。 コンストラクタ内で例外が発生した場合に呼ばれないデストラクタは 構築中のオブジェクトのデストラクタだけだからね。 既に構築されたオブジェクトのデストラクタは全て呼ばれる。 例えば基底クラスのデストラクタとか 構築されたメンバ変数のデストラクタとかは全て呼ばれる。 new に関して気をつける必要があるのは事実だけど、 使っていけないってことはあり得ない。 まあ、初心者は使わない方が無難ってこと程度の話じゃないのかな。
518 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 09:01:29 ] いいえ、newを生で使っている人はちゃんとスキンをつけるようにしてください。
519 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 09:26:43 ] newに限らず例外を投げる可能性のある関数をコンストラクタ内で 呼び出すときはstack unwindを考えて対応する。
520 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 09:32:36 ] コンストラクタ内でnewが例外吐いたのをキャッチしたとして、 そのあと何をすれば良いのですか?
521 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 09:38:26 ] >>520 ケースバイケース スワップが頻発してるなどメモリ不足でシステムがヤバイ状態なら 終了してシステム全体のシステムの再考。 そのエラーを無視してでも少しでも長く生き続ける必要が条件なら ログにでも吐いて続行。
522 名前:デフォルトの名無しさん [2008/04/09(水) 11:47:43 ] VC++2008EE ListBoxの1行削除ができたので、今度は削除前に メッセージボックスを出して見ようとしたのですが、 エラーがものすごい数出てしまいました。 System::Windows::Forms::DialogResult result; result = MessageBox::Show("削除しますか?","DELETE CHECK",MessageBoxButtons::YesNo); Debug::WriteLine(result); if(result != System::Windows::Forms::DialogResult::Yes)){ return; } if文全体を削除すると問題なく動作し、 また、出力ではYes,No確認できるので、 if文のSystem::Windows::Forms::DialogResult::Yesが、 問題なのかと思い、"Yes"とかにしてみたのですがやはりエラーが出てしまいます。 これはなぜエラーが出てしまうのでしょうか
523 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 11:56:41 ] >>519 それコンストラクタ関係ないだろ。
524 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 12:00:08 ] >>522 それ.netじゃん AfxMessageBoxかAPIのMessageBox使うべし
525 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 12:03:48 ] >>520 コンストラクタ内で catch なんて書かないでいいように RAII を徹底したほうがいい。
526 名前:デフォルトの名無しさん [2008/04/09(水) 12:14:47 ] >>524 ひと目でわかる Microsoft Visual C++ 2008 アプリケーション開発入門 という本を読みながらやっていて、 本書はC++/CLIで書いてある。とあるので、たぶん.netというやつだとおもいます。 この本の通りにやるとエラーが出てしまい、 エラーの内容見てもよく分からなくて、 いろいろ試してたのですが、結局原因が分からず聞いてみました。 この本で使っているMessageBoxにはなにか問題があったりするんでしょうか
527 名前:デフォルトの名無しさん [2008/04/09(水) 12:21:41 ] >>526 C++/CLIてのはC++でなんとか.net使いましょうよ・・・っていう仕様 .netだけならC#の方がいいし、速度的にC++ならC++/CLIしないでMFCかAPI使った方がいい
528 名前:522 [2008/04/09(水) 12:30:18 ] 申し訳ありません。もの凄く下らないミスでした。 if(result != System::Windows::Forms::DialogResult::Yes)){ かっこが一つ多かったです・・・スレ汚しすみませんでした。 >>527 うう、本まで買って気合い入れてしまったため再スタートは辛いです。 とりあえずこの道進んで、あとから徐々に方向転換してみます。 ありがとうございました。
529 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 12:33:15 ] >>528 C++/CLIなら↓の方で聞いた方がいいよ C++/CLI part3 pc11.2ch.net/test/read.cgi/tech/1206447234/
530 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 15:29:32 ] >>528 甘いな。俺は最初どの本買ったらいいかわかんなくて結局3冊目まで買ったぞ
531 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 15:36:05 ] MFCってまだ使われてるのか?
532 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 15:44:23 ] >>531 きみのPCのMFC関連のDLL等を全て削除して使用してみればきみの環境での依存度が分かる
533 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 15:46:40 ] >>532 滑ってるよ
534 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 15:52:50 ] マジレス
535 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 17:07:16 ] MFC関連のDLL、スタティックリンクするから無くても動いちゃうよ (俺のアプリは)
536 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 17:14:37 ] CString m_combo = "notepad.exe"; WinExec((LPCSTR)(LPCTSTR)m_combo,SW_SHOW); これアプリが起動しないんですけどなんでですか
537 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 17:23:00 ] LPCTSTRをLPCSTRに変換しているのが限り無く怪しい。 LPCTSTRを引数に取るShellExecuteか何かを使え。
538 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 17:30:01 ] WinExecが好きなんですけど変換は不可能ですか?
539 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 17:33:34 ] なら(LPCSTR)(CStringA)m_comboでどうだ。 あと、引数の少なさなら<tchar.h>の_tsystemがいいぞ。
540 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 17:35:33 ] っていうかWinExecはdeprecatedな扱いのAPIのような気がする。
541 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 17:37:24 ] struct hoge_a{ int a; int b; }; struct hoge_b : public a{ int c; int d; }; としたとき、hoge_aのメンバのメモリ上の並び順はabとなるのは保証(規定)されていると どこかで見た記憶があるのですが、hoge_bの場合、abcdとなることは保証されるのでしょうか?
542 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 17:54:09 ] >>539 動いたwお前すごいわ どこにも乗ってなかったぞこんなの
543 名前:デフォルトの名無しさん [2008/04/09(水) 18:27:43 ] srandのseedが同じ場合、マシンやOSが変わっても同じ乱数を発生させることができるのでしょうか?
544 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 18:32:25 ] >>543 No
545 名前:デフォルトの名無しさん [2008/04/09(水) 18:42:27 ] そうすると何に依存するのでしょうか? コンパイラですか?それともOSですか? AMDとintelのようにCPUが変わっただけでもダメですか?
546 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 18:44:58 ] libcの実装次第? 時間と空間を使えばかなりランダムになりそうだけどなぁ。
547 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 19:10:37 ] >>543 移植性を考えるなら同じ種で同じ乱数列の出力を保証するにはライブラリに頼らず乱数発生器も実装してしまう
548 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 19:46:10 ] C++について質問なのですが、 オブジェクトを作らずにメンバ関数を呼び出すことは可能でしょうか。
549 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 19:49:19 ] 静的メンバ関数なら。
550 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 19:54:24 ] >>548 できる。 struct a{ void f(){} }; reinterpret_cast<a*>(NULL)->f();
551 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:06:20 ] なるほど。勉強になりました。 レスありがとうございました。 #include <stdio.h> class A { public: static A* make_obj(void); void my_puts(void){ puts("Hello\n"); } }; A* A::make_obj(void){ A* a = new A; return a; } int main() { A* a = A::make_obj(); a->my_puts(); return 0; }
552 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:12:24 ] >>550 やめなさい
553 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 20:36:54 ] >>551 わかってると思うけど生ポではなくスマポに入れて返しとけよ
554 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:09:35 ] using namespace 〜; は取り消せますか?
555 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:16:28 ] 永遠に取り消す事が出来ない呪いです。 using は計画的に。
556 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:24:07 ] namespaceをusingすると、そのnamespace内のusingまで見えてしまうのには泣く。意味ねーじゃん
557 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:27:35 ] だからヘッダにusing書いちゃ駄目ってママ言ったでしょ
558 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:30:57 ] >>550 staticメンバ関数が無い時代の苦肉の策ですなあ。 ただ非静的メンバーは参照できない。
559 名前:デフォルトの名無しさん mailto:sage [2008/04/09(水) 21:31:50 ] turboPascalのusing見たいな使い方したかったのに。
560 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:22:01 ] VC++ 2008 EE でWindowsアプリケーションを作成したいのですが、 そのまま<windows.h>をインクルードしてもエラー表示なので、 どのような設定が必要なんですか?
561 名前:デフォルトの名無しさん [2008/04/10(木) 00:24:06 ] >>548 なんのためのメンバ関数なんだか。
562 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:33:29 ] >>561 いや、他人の書いたコードを解読してるんだ。。
563 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 00:39:03 ] >>560 [ファイル]-[追加]-[新しいプロジェクト] [Visual C++]-[Win32]-[Win32プロジェクト]-[プロジェクト名]-[OK] [次へ]-[Windowsアプリケーション]-[■空のプロジェクト]-[完了] [ソースファイル]-[追加]-[新しい項目] [Visual C++]-[コード]-[C++ファイル]-[ファイル名]-[追加]
564 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 01:46:59 ] >>563 ありがとうございます。3行目まではうまく設定できたのですが、 4行目の「ソースファイル」?が何を指しているのかわからず、 そのまま5行目の作成を行いました。 結果はやはりビルドエラーです。 コードは以下です。 LRESULT CALLBACK WindowProc(HWND,UINT,WPARAM,LPARAM); /* アプリケーションエントリーポイント */ int WINAPI WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR CmdLine, int CmdShow) { //処理 return ; } /* ウインドウプロシージャ */ LRESULT CALLBACK WindowProc(HWND hwnd,UINT message,WPARAM wparam,LPARAM lparam) { //処理 } return DefWindowProc(hwnd,message,wparam,lparam); }
565 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 01:50:01 ] エラーの内容は?
566 名前:デフォルトの名無しさん [2008/04/10(木) 01:54:31 ] ファーストへの悪送球。
567 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 01:54:45 ] 1>------ ビルド開始: プロジェクト: C800, 構成: Debug Win32 ------ 1>コンパイルしています... 1>MJ_1.cpp 1>.\MJ_1.cpp(26) : error C2440: '=' : 'const char [6]' から 'LPCWSTR' に変換できません。 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 1>.\MJ_1.cpp(41) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 1>C800.cpp 1>.\C800.cpp(28) : error C2440: '=' : 'const char [6]' から 'LPCWSTR' に変換できません。 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 1>.\C800.cpp(43) : error C2664: 'CreateWindowExW' : 2 番目の引数を 'const char [6]' から 'LPCWSTR' に変換できません。(新しい機能 ; ヘルプを参照) 1> 指示された型は関連がありません。変換には reinterpret_cast、C スタイル キャストまたは関数スタイルのキャストが必要です。 1>コードを生成中... 1>ビルドログは "file://d:\My Documents\Visual Studio 2008\Projects\C800\C800\Debug\BuildLog.htm" に保存されました。 1>C800 - エラー 4、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== です。
568 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 02:02:15 ] >>567 なぜコンパイルエラーの部分を省略する。 ググればいろいろ見つかる。 www.google.co.jp/hws/search?hl=ja&q=LPCWSTR+char+c2440&client=fenrir&adsafe=off&safe=off&lr=lang_ja
569 名前:デフォルトの名無しさん mailto:sage [2008/04/10(木) 02:21:14 ] >>568 ありがとうございます。 文字変換だったのですね。 しかしググっても出てこないので最後に嘆きます。 1>------ ビルド開始: プロジェクト: GAME, 構成: Debug Win32 ------ 1>マニフェストを埋め込んでいます... 1>.\Debug\GAME.exe.intermediate.manifest : general error c1010070: Failed to load and parse the manifest. U_U!$kLdK 1>~[ 1>ビルドログは "file://d:\My Documents\Visual Studio 2008\Projects\C800\GAME\Debug\BuildLog.htm" に保存されました。 1>GAME - エラー 1、警告 0 ========== ビルド: 0 正常終了、1 失敗、0 更新不要、0 スキップ ========== なるエラーが出るのですが、まったく意味不明です。
570 名前:569 mailto:sage [2008/04/10(木) 18:46:06 ] 申し訳ないです。 自己解決しました。 ありがとうございます。
571 名前:デフォルトの名無しさん [2008/04/10(木) 21:45:49 ] VC++2005で、ADOでSQLSERVER2005に接続して、binary型のフィールドに 1000byte程のバイナリデータを保存したいのですが、 long型の配列にデータをmemcpyし、それをrs->Updateしようとすると、 コンパイルで「bool値に変換します」というような警告がでて、データを転送できません。 バイナリデータを転送するにはどのようにすればいいのでしょうか? (配列には正常にデータがコピーされていることはファイル出力で確認できております)
572 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 00:26:01 ] >>571 support.microsoft.com/kb/258038/ja
573 名前:デフォルトの名無しさん [2008/04/11(金) 06:15:26 ] vector〈基底クラス*〉に数種類の派生クラスをプッシュバックしてオーバーライドした関数を実行するようなことはできますか?
574 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 06:18:09 ] >>573 virtualなメンバ関数を実行ということなら、可能です。
575 名前:デフォルトの名無しさん [2008/04/11(金) 06:33:22 ] もちろん仮想関数にしてあります &の付け忘れでした 解決できましたありがとうございます
576 名前:デフォルトの名無しさん [2008/04/11(金) 06:38:48 ] >>573 =>>574 =>>575
577 名前:デフォルトの名無しさん [2008/04/11(金) 06:50:20 ] 573=574=575=576
578 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 07:17:15 ] >>575 メモリリークに気をつけような。 boost::ptr_vector の使用も検討してみるといい。
579 名前:デフォルトの名無しさん [2008/04/11(金) 12:34:50 ] 動的に二次元配列を確保するにはどうすればよいですか? int x=10; int y=10; double a[x][y]; という風に書くのは、xyが小さい間は出来たのですが、newで確保しようとすると yを変数にできません。vectorを使わずに上記のようなことができるでしょうか? よろしくお願いします。
580 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 12:37:06 ] double **a; *a = new double[x] for( int i = 0; i < x; ++i ) a[x] = new double[y] こんなん
581 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 12:47:33 ] boost::multi_arrayオススメ。
582 名前:デフォルトの名無しさん [2008/04/11(金) 12:52:43 ] >>580 ありがとうございます。 確保した二次元配列をほかの関数に渡すにはどうすればよいですか? あと、boost::multi_arrayは速いですか? 今書いているのは、std::vectorもあまり知らない人に見せるためなので、 boostなんてとてもだめです。
583 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 12:57:05 ] アセンブリ言語のコンパイラのCソースプログラムを持っているのですが、 アセンブリ言語をコンパイルするには、このソースをコンパイルしてから どうすればいいのでしょうか?
584 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 12:58:11 ] void func( int **a ); これでわたせるんじゃね、多分
585 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:06:03 ] >>582 そういう初心者には、素直に一次元配列を仮想化して使う方がいい。 こんな関数でも用意すればアクセスするのも割と簡単だ。 static unsigned offset(unsigned x, unsigned y, unsigned w) { return x + y * w; } 勿論、メモリ確保はこうなる。 double * a = new double[w * h]; あー、ついでに言えば>580はバグだらけだから要注意で。 つーか、>584もかすだわ。
586 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:06:38 ] >>583 Cソースをコンパイルしてできた実行ファイルを実行してアセンブルすれ ばいいのでは。
587 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:19:33 ] >アセンブリ言語のコンパイラ 有り得ない間違いだな。
588 名前:デフォルトの名無しさん [2008/04/11(金) 13:29:33 ] >>580 これは酷い。
589 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:34:19 ] mbscmp wcscmp などの違いがわからない・・・・ あと、lstrcmp とか strcmp みたいなのもあったような気がするけど気のせい? 誰か、これらの関数の違いについて分かり易く教えてください。
590 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:40:56 ] 文字として wchar_t を使うとき -> wcscmp 文字として char で mbcs を使うとき mbscmp 文字として char で sbcs を使うとき strcmp 文字として TCHAR を使うとき lstrcmp ドキュメント読まずにまず2chで聞くという態度では、わからなくて当たり前。
591 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:49:11 ] >>590 すみません。それがいまいちよくわからないんです。 charを使うときとか、tcharを使うときと言われても抽象的すぎて??? 具体的に、どういう処理をするときにmbscmp や strcmp などを使い分けるのでしょうか? 同じ文字列比較でも、mbscmp を使っていたり、 strcmp を使っていたりと、訳が分りません。
592 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:52:17 ] >>587 確かに…ご指摘ありがとうございます アセンブリ言語を実行するものの意味で使いました
593 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 13:52:50 ] >>591 それは抽象的だからわからないんじゃなくて、勉強しないからわからないのです。 mbcs と sbcs の違いなんか、Google で 「mbcs と sbcs の違い」を(カッコははずして) 検索すればいくつもそれらしい説明のページが出てくるのです。 もし手抜きじゃなくてホントのホントに何もしないで知識が身に付くと思ってるのなら、 そもそもバカなので勉強しても無駄なので止めるべきです。
594 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 14:04:17 ] >>592 それは普通、アセンブラと呼ばれる。 いや、厳密に言えば「アセンブリ言語を翻訳するもの」だが。
595 名前:デフォルトの名無しさん [2008/04/11(金) 14:05:02 ] >>593 なんか嫌なことでもあったのか?
596 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 14:05:03 ] なんとなく分ったような分らないような・・・・ 同じ英数字からなる文字列比較でもプログラムによって使っている関数が違うのは 書き手(プログラマー)の意識の違いによる? さらにワイド文字とマルチバイト文字の違いがよく分らん。。。。 出直してきます。スレ汚してすみません。
597 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 14:06:53 ] すまん *a = new double[x] じゃなくて a = new double*[x] だ
598 名前:デフォルトの名無しさん [2008/04/11(金) 14:20:42 ] >>597 それだけじゃねーだろ。
599 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 15:19:15 ] >>595 593じゃないけど、あえて言うなら「投げっぱなしの馬鹿を見てしまったこと」が 「嫌なこと」なんだろう。
600 名前:デフォルトの名無しさん [2008/04/11(金) 20:21:49 ] deleteで落ちちゃうんだけど、原因わかりません>< このコードで落ちます・・・。 int i; char *lpary[4]; for (i = 0; i < 4; i++){ lpary[i] = new char[256]; } for (i = 0; i < 4; i++){ delete [] lpary[i]; } 誰か教えてください。
601 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 20:23:53 ] 落ちる要素は特に見当たらないが・・・。 多分、他で色々やってる部分でマズいことやってんじゃないかと。
602 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 20:24:46 ] for (i = 0; i < 4; i++){ delete lpary[i] } delete[] lpary;
603 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 20:25:53 ] >>602 おいおい^^;
604 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 20:26:53 ] よく見てなかった すまん忘れてくれ
605 名前:600 mailto:sage [2008/04/11(金) 20:29:44 ] すいません。原因わかりました。 newとdeleteの間でやってる処理で確保したポインタに別のポインタ 渡してしまってた・・・。 まじごめん;;
606 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 20:30:25 ] 悪い事いわないから、vector 使え。
607 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 23:28:52 ] >>596 >さらにワイド文字とマルチバイト文字の違いがよく分らん それを調べるのが先だということに気づかないの?
608 名前:デフォルトの名無しさん mailto:sage [2008/04/11(金) 23:30:06 ] 出直してくるって言ってるんだからほっとけよ
609 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 00:33:20 ] 変数をStringだとかChar型で指定することってできますか?
610 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 00:34:10 ] ????????
611 名前:デフォルトの名無しさん [2008/04/12(土) 00:56:30 ] 静的なメモリを確保をしたクラス内に動的に確保したクラスがあるとします この場合exit(0)が実行された時に正しく破棄が行われますでしょうか?
612 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 00:59:02 ] >>611 だいたいOSがうまく解放してくれる・・・かもね。 そんな保障はどこにもない。ちゃんと解放するかJava等に移行しましょう。
613 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 01:14:07 ] ぬるぽ
614 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 01:15:38 ] >>611 ライブラリの仕様によるけど、 ・静的なオブジェクトのデストラクタ⇒呼ばれる ・main()から辿ってその時点までのスタック上にあるオブジェクトのデストラクタ⇒呼ばれない つまりスタックの巻き戻しは行われないが通常のクリーンアップルーチンは呼ばれる、 が一般的なのでは。何か重要な後処理が必要なら atexit でも書いとくべきだな。
615 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 01:34:05 ] atexitを使うことにします ありがとうございます
616 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 02:10:32 ] constポインタpDataのメンバstd::deque<Log> LogDataを参照するpastLog const std::deque<Log>& pastLog = pData->LogData を上のように作ってそのiteratorを使用したいのですが const std::deque<M3Log>::iterator itr = pastLog.begin(); とすると 左オペランドを扱う演算子が見つかりません (または変換できません) (新しい動作; ヘルプを参照)。 と怒られます 何処をどうしていいのかわかりません、アドバイスをいただけないでしょうか
617 名前:616 mailto:sage [2008/04/12(土) 02:12:31 ] 訂正 const std::deque<M3Log>::iterator itr = pastLog.begin(); ↓ const std::deque<Log>::iterator itr = pastLog.begin();
618 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 02:12:40 ] c++ は良く知らないけど、 std::deque<Log>::const_iterator itr = pastLog.begin(); じゃないの?
619 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 02:19:58 ] >>618 ありがとうございます 無事コードがコンパイルを通るようになりました const_iteratorなんてあったのか・・・
620 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 03:41:33 ] >>619 >const_iteratorなんてあったのか・・・ 超ワロタじゃないかよ
621 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 04:19:52 ] 静的確保と動的確保でプライベートメンバ関数の実行に違いが出るようなことは有るでしょうか?
622 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 09:55:51 ] 外から借りない限り終了すれば仮想プロセス空間ごと消滅するかと。
623 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 11:01:31 ] さあて。delete thisするんでない限りは、まー無いんでないかね。
624 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 12:57:40 ] #define sucide delete this
625 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:40:30 ] suicide
626 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:49:06 ] oh misu superu
627 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 14:50:30 ] ifの条件部で変数を宣言したい時に、boolとして評価できない型だとコンパイルエラーになりますよね std::set::const_iterator it = hoge.find(....); if (it != hoge.end()) { // ここで it を使う } のようなことをするときにifのブロック内にitのスコープを限定して if ((std::set::const_iterator it = hoge.find(...)) != hoge.end()) { のようなことをしたいんですけど無理ですか?
628 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:23:43 ] 無理
629 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:39:39 ] for ( std...it = hoge.find(...); it != hoge.end(); ) { break; } おすすめはしない
630 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:40:03 ] { std::set::const_iterator it; if(...){...} }
631 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:40:50 ] あるいは空スコープを使うとか。 { std...it = ...: if(){ } }
632 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:54:26 ] 無理やり template<typename T, template<class> class Comp> class eval_lapper { public: eval_lapper( std::pair<T, T> rhs ) : obj_(rhs.first), target_(rhs.second) {} operator bool() const { return Comp<T>()(obj_, target_); } T& obj() { return obj_; } const T& obj() const { return obj_; } private: T obj_; T target_; }; int main() { std::set<int> s; //s.insert(123); if( eval_lapper<std::set<int>::const_iterator, std::not_equal_to > it = std::make_pair( s.find(123), s.end() ) ) std::cout << *(it.obj()) << std::endl; return 0; }
633 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:57:33 ] ifの評価部分ってboolのオーバーロードがあったらちゃんとboolとして評価してくれるの?
634 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 15:58:44 ] してくれるが、if 文以外の所でも本当に bool 値として解釈されて欲しい場合でなければ bool のオーバーロードはすべきじゃない。
635 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 16:00:12 ] if 文だけでそう解釈されて欲しい場合は、 普通には使われないようなポインタへのキャスト演算子を オーバーロードするのが一般的。 メンバポインタとか。
636 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 16:41:51 ] >>632 面白いなやり方だな でも、lapper => wrapper じゃね
637 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 16:53:02 ] //test.h struct test{ int a; test(int a_) : a(a_){} }; //instance.cpp #include "test.h" test obj(1024); //program.cpp #include <iostream> #include "test.h" extern test obj; int main(){ std::cout << obj.a << std::endl; return 0; } 別々の翻訳単位に型testが定義されてるけど、同一の型として認識されるの? VC8ではコンパイル通った。
638 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 17:01:05 ] そりゃ通るだろ 同じヘッダインクルードしてるんだし
639 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 17:01:59 ] メンバ変数が一部が#ifdefあたりで囲んであると 場合によっては非常に愉快な話になるけどね
640 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 17:09:35 ] 愉快なというかバグな話だろ
641 名前:デフォルトの名無しさん mailto:sage [2008/04/12(土) 22:59:36 ] 中々原因が掴めず笑うしかないとかそういうアレだろう 鼻から悪魔が出たらもっと愉快だな
642 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:40:49 ] String name; と String^ name; の違いはなんですか?ハンドルの意味がわかりません
643 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:48:53 ] >>642 C++/CLI はスレ違いなのです。 C++/CLI part3 pc11.2ch.net/test/read.cgi/tech/1206447234/
644 名前:デフォルトの名無しさん mailto:sage [2008/04/13(日) 22:50:41 ] >>642 とりあえず「C++/CLI ハンドル 自動変数」でググったら説明が見つかると思う。 それで分からなかったら、もう一度おいで。 # CLIってちょい過疎気味の本スレしか無いのな
645 名前:デフォルトの名無しさん [2008/04/14(月) 01:32:44 ] コピーコンスタクタ辺りで質問です。 template <bool M> struct P { int* _p; P(int* v=NULL) : _p(v) {} P(P& v) : _p(v.release()) {} // (1) ~P() { if(M && _p) delete _p; } void reset(int* v=NULL) { if(M && _p && _p != v) delete _p; _p = v; } int* release() { int* temp = _p; _p = NULL; return temp; } }; P<true> pf(int n) { return P<true>(new int(n)); } int main() { P<true> a = pf(3); } 上記だと error: no matching function for call to ‘P<true>::P(P<true>)’ とコンパイルエラーがでます。 しかし (1) を template <bool _M> P(P<_M>& v) : _p(v.release()) {} にするとエラーにならずにコンパイルできるようになります。なぜコンパイルエラーがでなくなるのでしょうか? コンパイラは gcc version 4.0.1 (Apple Inc. build 5465) です。
646 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 01:43:50 ] >>645 コピーコンストラクタをテンプレート関数にして異なるテンプレート引数の型でも受け取れられるれりれるようにしたから。
647 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 01:46:07 ] >>645 よく分からんけど、VC8だとどちらもコンパイル通ったぞ
648 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 01:49:12 ] >>647 エスパーすると645は(1)をP(P& v) : _p(v.release()) {}とした上でソースコードのどこかで P<false> oldObj; P<true> newObj(oldObj); とでもしているんだろう。
649 名前:645 [2008/04/14(月) 01:52:20 ] >>646 テンプレート引数の型は書き変える前も後も true しか扱わないのに異なる型を受け取れるようにしないと いけない理由が分かりません。 途中で P<false> に変換されているのも確認できませんでした。 >>647 gcc だけで起きる問題なんでしょうか… >>647 いやしてないのです。上記のソースのみです。
650 名前:デフォルトの名無しさん [2008/04/14(月) 02:17:53 ] 質問です。4桁の乱数を取得する関数なのですが if(num[i] == num[j])以降のdowhileで必ずループに入ってしまうのですが 原因を教えていただけませんか? void random::gt(){ srand((unsigned) time(NULL)); num[0] = rand() % 10; if(num[0] <= 0){ do{ num[0] = rand() % 10; }while(num[0] <= 1); } //その他乱数取得 for(i=0;i<4;i++){ if(i <= 4){ for(j=1;j<4;j++){ num[j] = rand() % 10; if(num[i] == num[j]){ do{ num[j] = rand() % 10; system("PAUSE"); }while(num[i] != num[j]); } }; } }; }
651 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 02:47:43 ] >>649 Pは接頭語みたいなもので一部の例外を除いて単独では使えない この場合だとP<true>とP<false>が型 たとえばP<true>を定義したとき、もしP(P&)の記述が許されると コピーコンストラクタP(P<true>)か 引数付きのコピーじゃないコンストラクタP(P<false>)か曖昧になる
652 名前:>650 mailto:sage [2008/04/14(月) 03:22:48 ] 日本語でおk dowhileは必ず1回はループ内の処理を実行するが? あと、その貼ったソースはそのままか?変更して貼ってない?
653 名前:645 [2008/04/14(月) 03:33:40 ] >>651 あーなるほど。コピーコンストラクタかコンストラクタが曖昧になるんですね。 P<true> -> P<false> の変換がされると嫌で書き方に困っていたのですが P<true> -> P<true> OK P<true> -> P<false> OK P<false> -> P<false> OK P<false> -> P<true> NG の時に template <bool M> struct P { template <bool _M> P(P<_M>& v); ... }; template <> template <> P<true>::P(P<true>& v) : _p(v.release()) {} //template <> template <> P<true>::P(P<false>& v); // NG template <> template <> P<false>::P(P<false>& v) : _p(v._p) {} template <> template <> P<false>::P(P<true>& v) : _p(v._p) {} みたいにもできるってことですね!ありがとうございました。
654 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 03:33:47 ] あああ、すいません if(num[i] == num[j]){のところで 変数num[i]とnum[j]が違っていても処理をしてしまう原因 を知りたかったのです ソースは特に変えてないと思うのですが どこかおかしいでしょうか
655 名前:645 [2008/04/14(月) 03:36:18 ] 違った。P<false> -> P<true> が嫌だった。です。
656 名前:650 mailto:sage [2008/04/14(月) 03:39:19 ] またもすいません >>654 は>.650です・・・
657 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 09:29:44 ] >>650 i が 0 から 3 をとりながら動き、 そのループのなかで j が 0 から 3 をとりながら動くんですよね。 すると, i = j ならば, num[i] == num[j] となって、system("pause") がかならず 実行されることになります。 なさりたいことは、こんなのでしょうか? (確認環境 WindowsXP, 処理系 cygwin(gcc 3.4.4) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6239.txt
658 名前:650 mailto:sage [2008/04/14(月) 11:06:42 ] >>657 まさにそんな感じです ありがとうございます
659 名前:657 mailto:sage [2008/04/14(月) 11:24:42 ] >>658 バグってました。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6240.txt
660 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 14:51:59 ] set<Class> a, b;とあってaからbに含まれていない要素を取り除きたいときに remove_ifなんかのアルゴリズムでスマートに書けますか?
661 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 15:06:05 ] operator^
662 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 16:59:15 ] >>660 #include <iostream> #include <algorithm> #include <set> #include <boost/lambda/lambda.hpp> #include <boost/lambda/bind.hpp> int main() { namespace bll=boost::lambda; std::set<int> a,b; a.insert(1); a.insert(2); a.insert(3); b.insert(2); b.insert(3); std::remove_copy_if(a.begin(), a.end(), std::ostream_iterator<int>(std::cout), bll::bind(std::find<std::set<int>::iterator, int>, b.begin(), b.end(), bll::_1 ) == b.end()); return EXIT_SUCCESS; } uu-n...
663 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 17:49:02 ] huninnkidearuboost::egg::lazywotukattemitayo #include <iostream> #include <algorithm> #include <set> #include <boost/lambda/lambda.hpp> #include <boost/egg/lazy.hpp> #include <boost/lambda/bind.hpp> #include <boost/assign/std/set.hpp> struct base { template< class Myself, class Arg0, class Arg1, class Arg2 > struct apply { typedef Arg0 type; }; template< class Result, class Arg0, class Arg1, class Arg2 > Result call(Arg0 begin, Arg1 end, Arg2 value) const { return std::find(begin, end, value); } }; typedef boost::egg::function<base> op; boost::egg::result_of_lazy<op>::type const find_lazy = BOOST_EGG_LAZY({}); int main() { namespace bll=boost::lambda; using boost::assign::operator+=; std::set<int> a,b; a+=1,2,3; b+=2,3; std::remove_copy_if(a.begin(), a.end(), std::ostream_iterator<int>(std::cout), find_lazy(b.begin(), b.end(), bll::_1) == b.end()); } uuu-nnn...
664 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 17:52:02 ] p_stade乙
665 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 18:01:20 ] >>660 a = bはだめなの? だめだから聞いているんだろうけど。
666 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 18:06:40 ] >>665 横からだけど a : 10,20,30,40 b : 20,50 この場合多分望む結果は a : 20 だろうけど、>>665 だと間違った結果を返す。
667 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 18:37:09 ] vectorやらlistで vector<int>の要素が 1 2 (空白) 3 4 (空白) の様に途中に空白をいれることはできるのでしょうか?
668 名前:デフォルトの名無しさん [2008/04/14(月) 18:46:45 ] VC++でPC情報を取得するPGを作成します。 プロジェクト作成は(Win32とか)どれを選ぶのが 適当でしょうか?
669 名前:デフォルトの名無しさん [2008/04/14(月) 19:40:07 ] >>668 Linux+GCCがお勧め
670 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 19:42:55 ] .exe が出来るならどれでもいいと思う。
671 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:02:18 ] とあるクラスに関数を一個追加しようとしたところ .hファイルに関数の本体を書き出すと正常にコンパイルが通るのに .cppファイルに書き出すと C2039 'foo' : 'hoge' のメンバではありません。 となってしまいます これはどういう事でしょうか・・・
672 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:05:04 ] ソースを見せれ
673 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:10:42 ] f´'´ ノ ヽ l 、 \! l / / // ,.ィ´ !', ト、 ヽ. ヽ . レ′, / //_,..イ// ,| l |lλぃ い. ', } / { ‐7Ζ_∠!イ 〃 /リ,}/┤!」l 小 ! ノ i| 八//'゛ -`l 〃 /ノ'´ j ! |l/| iイ/ ヽ|l//イ ャ''Tェ歹''`y゙/ 'ヾ歹¨リ`イ!ノ// まさか、ロリコンじゃないわね・・・ ) 〃A ``''''"´ '^ r; `'''"´/クK/ Y/ !トヘ. //// //// /.ィi| ;| |i( l|`Ti\,___ '⌒) ,∠lj_|iリ {い ヾLr┤:.:.:.:.`:、__,,..イ;:.::.:./勹_」! ``ァ;=<´ ̄``ヽ:ヽ;‐-/;/``Tr-.、
674 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:13:11 ] >>671 >.cppファイルに しか書いてなかったとかいうオチだったら、君が泣くまで殴るのをやめない。
675 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:14:56 ] >>672 仕事でのデータが含まれてるのでちょっとソースは公開できないですorz >>674 インテリセンスで関数宣言を確認してから中身を書いてるのでそれはないと思います
676 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:25:23 ] 問題が再現するコードを作ってそれを貼ればいいじゃん。
677 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:27:54 ] テンプレート関数だったらお前の殴る
678 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:39:03 ] hppで解決♪
679 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 20:58:05 ] リビルドし直したら通った・・・ これはどういう事??
680 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:22:35 ] VCではよくあること
681 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:53:28 ] そしてインテリセンスが延々と更新されないことも
682 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:58:23 ] インテリセンスが嘘つくのも。
683 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 21:58:43 ] >>667 vector<int>に整数以外のものは入れられません。 仮に、負値を例外として扱ってよいなら空白の代わりに-1を入れておくと言う手もなくはありませんが、 boost::optionalを使ってみてはどうでしょう。
684 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:18:55 ] メモリが断片化している場合、ポインタに+1した場合はきちんと断片先に飛んでくれるんですか? それとも型サイズ分だけ強引にアドレスが+1されるんですか?
685 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:21:43 ] 断片化? どういう状況を言ってるんだ?
686 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:22:45 ] vectorではなくdequeの実装を言っているのかもw
687 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:25:23 ] deque のことなら、イテレータに +1 したら断片化先に飛ぶけどポインタは当然無理だな。
688 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:26:51 ] >>685 1つのデータがメモリに書き込まれる時は必ず連番のアドレスに配置されるんですか?
689 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:27:37 ] >>688 少なくとも仮想アドレスは連番だが。 物理アドレスは知らんがな。
690 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:28:51 ] STLとかboostみたいので RECTとかSIZEを包んだクラスはありますか?
691 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:31:41 ] CRectならMFCにあるけどな…
692 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:31:51 ] WTLにも
693 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:32:58 ] >>689 つまり&で表示されるアドレスは仮想でWindowsが物理メモリの番地とリンクを取って隙間に埋め込んでるから考えなくていいってことですね ありがとうございました。
694 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:38:39 ] >>693 それでいいのか? 本当にそれでいいのか?w
695 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 22:43:16 ] C++でプロパティー的なものを表現する場合 getとsetはつけたほうがいいの?それともOR?
696 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:04:14 ] 漢は黙ってpublic:
697 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:06:53 ] それだとブレークポイントはれないじゃん・・・。
698 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:15:52 ] __declspec(property(get=getHoge, put=setHoge)) int Hoge;
699 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:43:26 ] winsockのsock関数の第一引数にAF_BTHを指定すると、AF_BTHが定義されていないとエラーがでます。 winsock2.hはインクルードしてるんですが、ほかになにかインクルードしなければいけないんでしょうか?
700 名前:デフォルトの名無しさん mailto:sage [2008/04/14(月) 23:55:47 ] grepかけたらws2bth.hででてきたけど。
701 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:24:06 ] std::list<int> iListの参照を作りたいのですがこの場合 std::list<int>& refList = iList; で良いのでしょうか?
702 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:31:23 ] アドレスを比べてみたらいいと思うよ
703 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:39:51 ] >>702 簡単に試してみたけど 大丈夫そうな気がしました
704 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 00:54:33 ] C言語での構造体の初期化について質問です。 typedef struct Foo_tag{ int a; int b; int c; } Foo; というような構造体があったときに、 Foo foo = {0}; という初期化を行っているコードをたまに見かけますが、これは何を行っているのでしょうか? 一応MinGW環境で同様のコードを書いてテストしてみましたが、{0} で初期化した構造体はゼロクリアされており、 初期化しなかった構造体にはゴミが入っていました。 ということは、上記のコードは構造体をゼロクリアするという認識でいいのでしょうか? それと、標準Cの規格でこういう初期化は許されていますか? 構造体のゼロクリア処理は memset() などを利用して行っているコードが多いことを考えると、標準規格ではなさそうな 気がするんですが…。
705 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:00:36 ] メンバを途中まで初期化すると 残りは0で初期化されるってヤツだったと思う。 標準Cでどうなのかは知らん。
706 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:04:31 ] Foo foo = {1};でa=1,b=0,c=0になるのが保証されてる
707 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:12:58 ] >>705-706 ありがとうございます。途中まで初期化ということができるんですね。 それなら構造体をゼロクリアするときはこれを使うと楽かもしれないですね。 (先頭にネストした構造体があったりするとどうなるのかよくわからないので、汎用ではないのかもしれないですが)
708 名前:デフォルトの名無しさん [2008/04/15(火) 01:13:32 ] >>704 初期化時のみOK
709 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:18:46 ] memsetだとパディングも初期化できるのが利点だったかな 普通の使い方で初期化する必要があるのかどうかは知らないが
710 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:36:11 ] >>709 ものすごく行儀の悪いコーディングだけど構造体同士を memcmp で比較できる
711 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:58:11 ] >>710 あくまで「普通の使い方」の話な キャストしたりすればいろいろ問題も出てくるだろうよ
712 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 01:59:59 ] >>704 標準規格です。
713 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 02:01:05 ] >>704 昔のコンパイラだと 0 で初期化されません
714 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 03:28:46 ] >>660 template<typename Class> void assign_intersection(std::set<Class>& a, std::set<Class> const& b) { std::set<Class> result; std::set_intersection(a.begin(), a.end(), b.begin(), b.end() , std::inserter(result, result.end())); a.swap(result); }
715 名前:デフォルトの名無しさん [2008/04/15(火) 08:00:05 ] * ** *** **** ... みたいな感じの出力を得たいのですが、***を出力する部分は、なにか特別な書き方とかないですか? 関数を作るしかないですか?
716 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 08:06:55 ] >>715 MFCならスタティックテキストの表示を*に変えるという機能(設定)があったり。 自前でもキー入力(KeyDownとか)→別の変数に格納→その文字数だけ*を表示で簡単に出来る。
717 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 10:30:07 ] // * を n 個出力する関数 void f(int n){ for(int i = 0; i < n; i++) std::cout << '*'; std::cout << std::endl; } void g(int n){ for(int i = 0; i < n; i++) f(i); }
718 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 14:19:49 ] std::string s(length, '*'); std::cout << s << '\n';
719 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 20:41:31 ] #include <iostream> #include <iomanip> int main() { for (int i = 0; i < 10; ++i) std::cout << std::setw(i) << std::setfill('*') << "" << std::endl; } ところでC++でいいんだよね?
720 名前:デフォルトの名無しさん mailto:sage [2008/04/15(火) 22:13:39 ] C言語ならこんなもんか void f1() { int n, i; for(n = 1; n <= 10; n ++) { for(i = 0; i < n; i ++) putchar('*'); putchar('\n'); } } void f2() { int n; for(n = 1; n <= 10; n ++) puts("**********" + 10 - n); } void f3() { int n; for(n = 1; n <= 10; n ++) printf("%.*s\n", n, "**********"); }
721 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:27:56 ] printfの書式でもっと簡単にできなかったっけ? イメージ>>720 のf3()が近いんだけど・・・使う機会が少ないとすぐにわすれちゃうな・・・
722 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:38:10 ] >puts("**********" + 10 - n); このやり方はじめて見た。目から鱗やわ
723 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 00:42:59 ] >>722 その鱗はつけておいた方がいいw
724 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:36:32 ] 課題でc++のbasic_stringの様なstringクラスを作っています。 その中でstr >> coutはクラス内でoperator>>を用意することで 動くようになったのですが、cout << strは「二項演算子<<はクラス strをサポートしていません」と言われてしまいます。 これはどのようにしたらcout << strが出来るようになるのでしょうか? またお恥ずかしながら、str = "aaa"は作れたのですが、str ="aaa"+"bbb"は 作ることが出来ませんでした。これはどの様に作ったらいいのでしょうか? どうかよろしくお願いします。
725 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:46:22 ] なんか物凄く基本的なことのような気がしますが C言語で、unsigned char から signed char に代入、もしくはその逆を行った場合、ビットバターンは常に保存されますか?
726 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 02:55:53 ] >>725 いいえ。
727 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 03:01:40 ] >>724 上:strをサポートする二項演算子を書く。 basic_ostream<foobar> & operator <<(basic_ostream<foobar> & os, str & st); 下:無理。
728 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 03:02:50 ] >>726 ありがとうございます。そうなると char* を適宜 unsigned char* にキャストしたりしないとダメですね。 一部バイナリが混ざってるファイルを読む必要があったので助かりました。
729 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 03:58:13 ] >>728 K&R2 A6.1 (promotion) を参照してください。 char/unsigned char は先に int に変換される点、特に要注意です。
730 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 04:09:29 ] >>729 promotion は関係ないだろ。
731 名前:729 mailto:sage [2008/04/16(水) 04:57:02 ] >>730 char c = 0x81; if (c == 0x81) printf("=\n"); else printf("!=\n"); の結果って、あれ〜?!ってなりませんか?
732 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 11:52:33 ] >>731 char が符号付きで最大値が 127 の場合の話なら、 char c = 0x81 の時点で未定義動作。 問題は promotion じゃなくてオーバーフロー。
733 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 12:09:54 ] 0x81がunsigned charじゃないじゃん
734 名前:732 mailto:sage [2008/04/16(水) 12:20:21 ] > char c = 0x81 の時点で未定義動作。 ごめん。間違い。オーバーフローが問題なのは違いないけど、型変換での オーバーフローは未定義動作じゃなくて、値が処理系定義のものになるか、 処理系定義のシグナルが発生する、らしい。
735 名前:729 mailto:sage [2008/04/16(水) 20:42:23 ] >>732 >>734 了解いたしました。 char buffer[N]; ... while (fgets(buffer, N, fp) != NULL) { if (buffer[i] == ...) ... } などと安易に考えると、(たとえば漢字コードの判別など)わからなくなってしまった経験がありました。 unsigned char buffer[N]; とすれば、問題ないのではありますが。 ご指摘ありがとうございました。 またひとつ賢くなりました。
736 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 20:49:18 ] >>735 漢字コードをいろいろ扱うなら >>735 だと unicode の時に困るんじゃなかろうか? (文字列に \0 が含まれる可能性が高いから)
737 名前:デフォルトの名無しさん mailto:sage [2008/04/16(水) 21:04:51 ] C++では以下のように大丈夫そうですけど。 signed char と unsigned char は同表現と書いている 読み間違い? A char, a signed char, and an unsigned char occupy the same amount of storage and have the same alignment requirements (3.9); that is, they have the same object representation. For character types, all bits of the object representation participate in the value representation. For unsigned character types, all possible bit patterns of the value representation represent numbers.
738 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 01:47:49 ] >>737 読みには自信ないのですが、 単に、 1) char/unsigned char/signed char のいずれも同じ量のメモリを占有する。 2) char/unsigned char/signed char のアラインメント(配置位置、偶数バイトを先頭にする、アドレスが4 の倍数のバイトを先頭にする、など)が同一である。 という意味でのみ same としているだけではないでしょうか。 char / unsigned char / signed char の表現がまったく同一であるというのは不可能と思われますのですが。 後続の文では、 char のすべてのビットが数をあらわしているわけではない(単に関係するといっているだけ、符号の場合もありますよ、ということでしょうか。) unsigned char はすべてのビットが数を構成する要素となる。 と読めます。
739 名前:デフォルトの名無しさん [2008/04/17(木) 07:16:24 ] template <class T> template <typename T> この2つはちがいがありますか?
740 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 07:21:28 ] 違いは無い
741 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 08:20:34 ] class じゃないのも使うよなーとか思っていつも typename にする俺
742 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 08:26:55 ] 俺もある時期から、typenameが手癖になってしまった。 別にこだわるわけじゃないから、もし仮にclassと書いてくれと職場で言われたら 二つ返事でclassにするけど。
743 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 08:30:00 ] なんとなく表明の意味で使い分けるかも。 その後しっかり中でstatic_assertするけどね。
744 名前:デフォルトの名無しさん [2008/04/17(木) 10:03:28 ] クラス配列をnewで生成する時に呼ばれるコンストラクタを指定できますか?
745 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 10:06:12 ] 残念ながらできない。
746 名前:デフォルトの名無しさん [2008/04/17(木) 11:04:06 ] strcatを使わずに char src[ ] = "seikima" char dest[4] = "tsu" という文字列を結合し、表示させることが出来ますか?
747 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:10:49 ] >>746 char result[11]; sprintf(result, "%s%s", src, dest); printf("%s\n", result);
748 名前:746 [2008/04/17(木) 11:14:54 ] 746です。言葉足らずでした。 sprintfも使わずにforを使って何とか表示させたいのですが いかがでしょうか?
749 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:25:24 ] >>747 じゃないがやっつけ仕事なんで間違ってたらごめん char ret[11]; for(int i =0 ; i < strlen(src) ; i++) { ret[i]= src[i]; } for(int i=0 ; i <strlen(dest) ; i++) { ret[i+strlen(src)}=dest[i]; } printf("%s\n",ret);
750 名前:746 [2008/04/17(木) 11:27:20 ] >>749 >>746 に書いたんですが、今回string.hに関するものは使っちゃいけないので strlenも使用出来ない感じです。
751 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:34:17 ] >>746 にそんなこと書いてNEEEEEEEwwwww strlen()をsizeof()-1に変えれば同じ動作だ
752 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:37:17 ] >>746 条件後だししすぎ char result[20], *p, *q; for(p=result,q=src;*p++=*q++;); for(p--,q=dest;*p++=*q++;);
753 名前:746 [2008/04/17(木) 11:46:22 ] 重ね重ね、申し訳ないです。 ポインタも使ってはいけないようです。
754 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:50:24 ] 宿題かよ。消えろ。
755 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:51:00 ] ついでに、その出題者はぶん殴っていい。
756 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:55:25 ] 宿題なら学習内容に沿ってるはずだから テキストでも目を通した方が早いんじゃないの? 何の項目についての課題か分からないんじゃ答えようがないわ
757 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 11:57:30 ] 入念な釣りだなあ。 次は「 [] 演算子も使えません 」とか?
758 名前:746 [2008/04/17(木) 11:59:26 ] 一旦、整理してみます。 課題:配列について 内容:char src[ ] = "seikima"; char dest[4] = "tsu"; と配列を用意し、destの中身をsrcに結合させる。 ただし、for文を使うこと・ポインタ、string.hは使ってはならない。
759 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:03:12 ] >>758 宿題は宿題スレへ。 C/C++の宿題を片付けます 105代目 pc11.2ch.net/test/read.cgi/tech/1208268461/
760 名前:746 [2008/04/17(木) 12:03:56 ] >>759 誘導ありがとうございます。ご迷惑をおかけしました。
761 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:06:07 ] 連結するための容量は確保しなくていいのか、とか dest を書き換えずに src に書き込むのか、とか、 宿題にしてもクソすぎるだろ。学校名晒してくんない?
762 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:12:22 ] 746の時点で明らかに宿題じゃないか。なにを今更
763 名前:デフォルトの名無しさん [2008/04/17(木) 12:21:40 ] printfの様な、引数の数が一定しない関数を作るにはどう定義し 中でどう読めば良いのでしょか。
764 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:25:31 ] Cで標準ライブラリが用意されてない環境なら、自動的に>>758 の条件に 近くなると思うけど、ポインタも駄目てのは解らん。
765 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:30:14 ] >>763 関数のオーバーロードとかでできんじゃね
766 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:30:41 ] 可変長引数でぐぐる
767 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:30:53 ] >>763 ttp://wisdom.sakura.ne.jp/programming/c/c62.html
768 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:31:06 ] >>763 可変長引数とかva_argsなんかでググるといいと思うよ。
769 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:31:25 ] >>763 可変引数または可変個引数でぐぐる
770 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:34:09 ] 重婚もいいところだな
771 名前:763 mailto:sage [2008/04/17(木) 12:37:07 ] 有り難うございます。 stdarg.hなんてヘッダ、目にした事すらありませんでした。
772 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:40:07 ] ところで可変長引数って設計的にどうなのかな? 個人的には設計に失敗してやむなく・・・ってイメージがあるのだが
773 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:45:05 ] ハックやチートの部類に入りそうなやり方してるよね。
774 名前:763 mailto:sage [2008/04/17(木) 12:46:42 ] >>772 **でも事足りるんですが、その場でわざわざポインタの配列を用意しないと いけない場合が出てくるだろうし、その場で列挙出来たら楽かなぁとか。
775 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 12:50:54 ] >>772 型安全性に問題があるから、特に C++ ではやむなくって意識でいいと思う。 C++ 的には iostream や boost::format みたいに演算子で繋ぐのが正解かな。
776 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 22:15:48 ] CかC++の組み込みの勉強したいんですがお勧めの本ありませんか? 組み込みの本って探してもどこにも無いし、ネットで買おうにも中身がどんな感じかも分からないんでどれを買えばいいのか分からないです あとできれば必要で組み込み初めてに適した機材とかも教えて欲しいです
777 名前:デフォルトの名無しさん mailto:sage [2008/04/17(木) 23:24:03 ] ソフィアシステムズで評価ボードを買ってBSPをいじって動作確認すればいいお^^
778 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 00:41:53 ] 以下の2つは戻り値以外に何か違いがありますか? fwrite(buf, 1, 1024, fp); fwrite(buf, 1024, 1, fp);
779 名前:デフォルトの名無しさん [2008/04/18(金) 00:45:24 ] 沢山の実数(doubleとか)が生成されるときに、その分散を計算したいんですが、これってやはり一度生成される全部の実数を どこか配列とかに格納しないとだめでしょうか?
780 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:00:21 ] >>779 分散=(X^2 の平均) - (Xの平均)^2 を使用すれば、1pass で計算できますよ。
781 名前:デフォルトの名無しさん [2008/04/18(金) 01:04:09 ] 値が生成されるたびに、X^2とXの平均を計算しておくのですね。
782 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:07:17 ] 逐一平均を計算するんじゃなくて、合計値と要素数を記憶だな。 最後にまとめりゃOK
783 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 01:23:46 ] >>778 もしかしたら処理速度が変わるかも・・・ね?
784 名前:デフォルトの名無しさん [2008/04/18(金) 02:02:27 ] 色々ありがとうございました。クラスをつくってみました。 class stat { public: stat() : sum(0), sum_square(0), num(0) {} void push(double a) { sum += a; sum_square += a*a; ++num; } double mean() { return sum / num; } double variance() { return sum_square/num - (sum/num)*(sum/num); } private: double sum; double sum_square; int num; };
785 名前:デフォルトの名無しさん [2008/04/18(金) 07:50:12 ] 意図した通りに受け取れないのですが、なぜでしょうか。 「GCCではgetche」の行のprintf()をコメントアウトするとちゃんと取れるのですが #include <stdio.h> int main(void) { int for1inc = 0; char userinput = 0; for(for1inc=0; for1inc < 10; for1inc++) { printf("文字を入力 : \n (GCCではgetche()が使えず改行コードと共に入力されるので5回までしか入力不可) \n\n"); userinput = getchar(); printf("Your input is %c. ""%c"" ASCII code is %d. \n", userinput, userinput, userinput); for( ; userinput; userinput--) { printf("%c", '.'); } printf("\n"); } return 0; }
786 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 09:32:34 ] >>778 >783の戯言はさておき、途中でエラーが発生したときの扱いが違う。 前者は書き込みに成功したバイト数が得られるが、 後者は1024バイト全てが書き込めたかどうかしか判らない。
787 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 10:10:31 ] >>786 それが戻り値の違いなんでしょ。
788 名前:141 [2008/04/18(金) 10:29:25 ] すみません。以下のコード、BCCでは一応正常にファイルから 読み込んで画面に表示してくれますが、VC++では表示してくれ ません。プログラムで何か処理が抜けているんでしょうか? #include "stdafx.h" // VC++の場合 #include <iostream> #include <fstream> using namespace std; int main() { int i; double x,y; ifstream fin; fin.open("aaa.dat"); while(fin >> i>> x >> y) cout << i << ' ' << x <<' ' << y << endl; fin.close(); // cin>>i; // VC++の場合 return 0; } aaa.datの中身(テキスト) 1 10.0 12.3 2 20.0 20.5 3 30.0 30.8 4 40.0 50.6
789 名前:デフォルトの名無しさん [2008/04/18(金) 10:39:04 ] ↑名前の141、以前のもので意味はありません。
790 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 11:04:56 ] VC9で普通に動いてるけど。
791 名前:デフォルトの名無しさん [2008/04/18(金) 11:14:42 ] メイン文で使っている*argv[]をユーザ関数内で使いたいので ユーザ関数では仮引数をchar **a[]にしているのですが、実引数は何にすればいいのか分からないので教えて下さい
792 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 11:15:46 ] >>791 argv そのまま渡せるように引数も同じ型にしとけよ。
793 名前:デフォルトの名無しさん [2008/04/18(金) 11:27:51 ] >>792 argvをそのまま渡すようにするには、ユーザ関数の仮引数と呼び出す際の実引数は何にすればいいのでしょう?
794 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 11:30:16 ] >>793 仮引数は main にある argv と「同じ型」、実引数は argv 。これでいいか?
795 名前:デフォルトの名無しさん [2008/04/18(金) 11:48:44 ] >>794 分かりました、ありがとうございました。
796 名前:デフォルトの名無しさん [2008/04/18(金) 13:36:50 ] >>788 エラーとかじゃなくて単に何も表示されない?
797 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 13:39:11 ] ファイルの置き場所ミスってるだけじゃねーの?
798 名前:788 [2008/04/18(金) 15:50:11 ] VC++2008 Express Editionでdebugモードでコンパイルし、 データファイルaaa.datをdebugフォルダに入れて実行ファイル を実行すると正常に実行されます。ですが、統合環境では何も 表示されないです。 Projects\test\test (testは私がつけたプロジェクト 名のフォルダ) というフォルダにデータファイルを置 くと統合環境ではうまくいくようです。しかし、こん なこと最初はわかんないよ。
799 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 15:55:53 ] >>798 フルパスでファイルを扱うのでなければ、カレント ディレクトリをちゃんと意識するようにしないと。
800 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 16:00:30 ] is_openでちゃんと開けたか確認したほうがいいよ
801 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 16:29:49 ] open使わずに std::ifstream fin("..."); てやったほうがいいよ close後何も処理しないのならcloseも不要だよ
802 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:12:43 ] C++やろうと思うんですけど、オススメの教本教えてください Cとjavaは一応できます
803 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 18:15:06 ] boostのソースコード(無料)(偏差値70)
804 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:10:22 ] メモリは並列にアクセスできますか? 例えばHDDだと2台あればパフォーマンス落ちずに同時アクセスできますが
805 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:17:44 ] >>804 NUMAとかそーいうキーワードで調べてみるといいと思う。
806 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:38:09 ] >>777 ありがとう。評価ボード調べてみたらくそ高けぇw ごめんなさい勉強用程度なら1万程度もあれば揃うだろうとなめてました
807 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:42:52 ] >>806 こんなのから始めた方がいいよ。 ttp://hijiri3.s65.xrea.com/sorekore/develop/pic/00_start.htm
808 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 19:51:44 ] >>807 d これは面白そう もうちょっとググって組み込みのこと勉強してきます
809 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 20:07:21 ] >>805 トンクス!
810 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 20:32:22 ] >>785 提示されたコードをコンパイルしましたが、特に異状はないと思います。 環境とコンパイルオプションを教えてください。 当方が確認した環境は WindowsXP, コンパイラはgcc3.4.4(cygwin)です。 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6272.txt
811 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:15:10 ] >>798 [プロジェクト]-[プロパティ]-[構成プロパティ]-[デバッグ]-[作業ディレクトリ]
812 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:41:28 ] #include <stdint.h> はどの環境でも使えますか? とブーストとかSTL portとか入れればどれでも使えますか? 32bit環境で、64bit整数のビット演算、掛け算の速度をかなり速いです 使い物になるので使いたいのですが互換性はなかなかあるんですか
813 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:42:11 ] 文書が色々とおかしいです エスパーでおねがいします
814 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:55:18 ] VC2008で対応していなかった為、stdint.h使うのをやめることにしました
815 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:56:44 ] わかりました がんばってください
816 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 22:58:30 ] >>812 > #include <stdint.h> はどの環境でも使えますか? いいえ。 > とブーストとかSTL portとか入れればどれでも使えますか? いいえ。 > 32bit環境で、64bit整数のビット演算、掛け算の速度をかなり速いです いいえ。 > 使い物になるので使いたいのですが互換性はなかなかあるんですか いいえ。
817 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:08:19 ] 日本語学びたての外国人か コンピューターにものすごい興味がある赤ん坊のどちらかだな。
818 名前:デフォルトの名無しさん [2008/04/18(金) 23:22:53 ] 外国人の人だと思うので、添削してみました。頑張ってね。 初心者なのですが、いくつか質問させてください。 #include <stdint.h>はどの環境でも使えますか? boostとかSTL portとかは、インストールすれば使えますか? 32bit環境で、64bit整数のビット演算、掛け算がかなり速くできて、 使い物になりそうなので使いたいのですが、互換性についてはどうでしょうか?
819 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:23:06 ] std::vector<std::string> vtSource; を UTF16 に変換して std::vector<std::wstring> vtDest; に保存したいと思っています. // string >> wstring 変換関数(中身はダミー) std::wstring A2WString(const std::string& strSource)) { return std::wstring(L"out"); } この変換関数での変換は以下のコードでできました. std::vector<std::string> vtSource; std::vector<std::wstring> vtDest; vtSource.push_back( "AbC" ); std::transform( vtSource.begin(), vtSource.end(), std::inserter( vtDest, vtDest.end() ), A2WString ); しかし,変換関数にデフォルト引数があるとコンパイルエラーになりました. std::wstring A2WString2(const std::string& strSource, int i=0)//デフォルト引数がある { return std::wstring(L"out"); } transform 第4引数で bind2nd や ptr_fun を使用すればいいような気がするんですが,どのように書けばいいんでしょうか? std::transform( vtSource.begin(), vtSource.end(), std::inserter( vtDest, vtDest.end() ), std::bind2nd( std::ptr_fun(A2WString2), 0) );//コンパイルエラー Window2000 Visual C++ 2005 express edition
820 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:26:01 ] >>812 C++なら、Boostを入れると<boost/cstdint.hpp>が使える。 名前空間boostに入っていること以外はだいたいC99の<stdint.h>と同じ。
821 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:27:47 ] >>819 いったん別の関数を挟めばいいはず。 inline std::wstring A2WStringHelper(const std::string& strSource) { return A2WString(strSource); } こういうものを作って、std::transformにはこれを渡す。
822 名前:デフォルトの名無しさん mailto:sage [2008/04/18(金) 23:54:40 ] スタティックテキストのプロパティCaptionを変更するにはどうすればいいんですか? IDC_STATIC.Caption("aaa"); で動かないんですけど
823 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:01:09 ] IDC_STATIC.Caption = "aaa"; GetDlgItem(IDC_STATIC)->Caption = "aaa"; これでも動きません
824 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:09:19 ] >>822 IDC_STATICは言わばワイルドカードなので、 キャプションを変えたいスタティックテキストに個別のIDを割り当てる必要があります。
825 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:10:34 ] つーか、そもそも書き方も判ってなくてコンパイルも通らないならエラーメッセージを張れと。
826 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:22:56 ] ありがとうございます。名前を付けました GetDlgItem(IDC_STATICTIME)->Caption = "aaa" error C2039: 'Caption' : 'CWnd' のメンバではありません。 となります
827 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:27:11 ] IDC_STATICTIME->Caption = "aaa" これだと error C2227: '->Caption' : 左側がクラス、構造体、共用体、ジェネリック型へのポインタではありません。 こういうエラーになります。
828 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:27:43 ] Captionなんて無いよ・・・とエラーが教えてくれてるじゃん なんでそんなにCaption大好きなの? GetDlgItem(IDC_STATICIME)->SetWindowText("aaa");
829 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:30:40 ] ありがとうございます 別に好きなわけじゃないんです VBの時はこうやっていたので プロパティの項目で設定できないのならVC++で項目の意味はあるんですか? 全部のプロパティの設定方法を調べなきゃいけないんでしょうか?
830 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:35:46 ] プロパティ?ダイアログの? あんなのは飾りだ。
831 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:39:07 ] 意味があるとしたら、設計時に入れれば、コーディングしなくて良い事ぐらいかな? VCは他もみんなこんな感じだから、VBからだと慣れるしかないな。 プロパティのVisible項目→コーディング時はShowWindow();
832 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:44:01 ] OK覚悟はできたwwww
833 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 00:55:43 ] C#を一通りやった者ですが、CよりC++の方が始め易いでしょうか?
834 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 01:08:42 ] C# からなら C は不便に感じると思う。 C++ のがいいかと。
835 名前:819 mailto:sage [2008/04/19(土) 01:46:47 ] >>821 ありがとう.とりあえずそうやればできました. ただ,何でこれは通らないんでしょうか? std::transform( vtSource.begin(), vtSource.end(), std::inserter( vtDest, vtDest.end() ), std::bind2nd( std::ptr_fun(A2WString2), 0) ); A2WString2() の第一引数の参照型をやめたらこれでもコンパイルできましたが, もしよろしければどなたかご教示願います…. //引数の参照型をやめる std::wstring A2WString2(const std::string strSource, int i=0) { return std::wsting(L"out") }
836 名前:デフォルトの名無しさん [2008/04/19(土) 05:07:02 ] JavaとかC#から始めた人はCやC++の世界には入ってこないでください。
837 名前:デフォルトの名無しさん [2008/04/19(土) 07:57:16 ] >>836 どうして?
838 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 09:33:00 ] ガベージコレクタは便利かもしれないが、その便利さゆえに何か重要なことを失くしているような気がする。
839 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 09:33:54 ] 「JAVAスクールの危険」ってはなし?
840 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 09:48:02 ] Java はアレだが、C# はまだマシだと思うけどな。まあ。
841 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 10:27:27 ] >>835 それは有名な参照の参照問題 詳細はSTL バインダで検索して一番上あたりがそのものズバリだと思う 解決策だけ抜きだすとboostのfunctional.hppのboost::bind2ndを使う さらにptr_funを使わずにboost::bind2nd(A2WString2)と書けるところも利点だ
842 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 11:43:18 ] >>837 温室育ちが軍隊に入ったら周りが迷惑するだろ
843 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 11:48:42 ] 軍隊という表現は語弊があるな せめてど田舎とか電気が通ってないとかそういう表現にしないと
844 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 13:06:49 ] その表現もかなりニュアンス違うな。 まぁ、無理して比喩を使う必要はない場面だと思う。
845 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:05:31 ] 2chにゆとりが入って来たでおk
846 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:06:52 ] >>845 いまいちだな
847 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 14:58:24 ] オートマ車しか乗ったことが無い人が、 マニュアル車に乗る感じとか。 でもC/C++をちゃんと理解して使い始めるなら、良いと思う。 理解するフェーズで挫折する人は、諦めてもらって、 理解するフェーズを無視して使い始める人は氏ねば良いと思うよ。
848 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:10:55 ] 1速のままで法定速度維持してエンジン壊すってか。
849 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:20:18 ] 「郷に入っては郷に従え」でいいんじゃないかと
850 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:21:01 ] > 理解するフェーズを無視して使い始める人は氏ねば良いと思うよ。 多言語から移ってきた人の3割くらいはこれかな・・・?
851 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:27:51 ] 映画と小説の共存が可能なように美麗な3Dグラフィックゲームと想像力をかきたてる2Dのドット絵ゲームというのは共存が可能だと思うのだがいかがなものか
852 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:31:57 ] ドット絵すらないroguelikeもよろしく
853 名前:デフォルトの名無しさん mailto:sage [2008/04/19(土) 15:55:49 ] 文字は高尚なドット絵だよ!
854 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 10:27:45 ] ぷァ
855 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 10:48:12 ] *nixのフレームバッファコンソール上でハードウェアアクセラレーションを使って描画とかしたい
856 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 11:39:26 ] すみません 圧縮・解凍DLLを利用して、どの形式のファイルを渡されても 同一の方法で展開することのできるライブラリってありませんか? ファイルをチェックして適切なDLLへ渡すやつです。
857 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:11:41 ] >ファイルをチェックして ファイル名で?ファイルの中身で?
858 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:12:58 ] ファイルの中身です EXEでも解凍できるやつもあります そういうのも展開したいです
859 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:20:41 ] とりあえずは 拡張子判別DLL(ググって) と 統合アーカイバ の組み合わせかな。 exeは知らない。アーカイブ本体をexe末端に付けてるか、 リソースとして持ってるか、とかの方式で変わってくるだろうし。
860 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:25:42 ] 対応形式が多いのはXacRett.dllかな
861 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:25:40 ] それらを自動でやってくれるのはないかと…
862 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 12:28:04 ] サンクス
863 名前:ミミ [2008/04/20(日) 13:10:19 ] Visual C++ でデバッグバージョンのバイナリを作るときって、 みなさんは名前を変えますか?どんな方法にしてますか? [方法1] Debug も Release も同じファイル名にして、ビルドすると上書きされるようにする。 [方法2] Debug バージョンには _d のようなサフィックスを付ける。 some_d.exe hoge_d.lib など。 [方法3] Debug と Release で出力フォルダを分ける。 bin/Debug/some.exe bin/Release/some.exe など。
864 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 13:23:48 ] デフォルトは方法3だよな。 単独で動かす時はそれで十分やね。 他のアプリから利用する必要がある場合は方法2じゃないと都合が悪い。 方法1は論外っすね。
865 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 14:40:32 ] >>858 そういうものがあるとしたら、そういうフリーのソフトが公開されている筈だよな。 そういう公開ソフトはないのだから、当然そういうDLLはない。 まぁ、>859にある「統合アーカイバ・プロジェクト」辺りを見てこいと。
866 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 15:20:46 ] XacRettで解決したんですけど…
867 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 17:28:14 ] 最近ゲームのプログラムいじってたらprint系で浮動小数が出力できなくなってしまったんだが、 同じようになったことある人いる?いたら解決策とか教えて欲しいです。 症状としては、%fを含むprint系の関数(wsprintfとかvfprintf)を実行すると 「問題が発生したため〜」っていうおなじみのダイアログが出てきて落ちちゃうんです。
868 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 17:30:03 ] 言語再インストール
869 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:34:25 ] ウィンドウを作成して、そこにビットマップを表示させたりするDLLを作ってるんだが、 外部からもらったバイナリBMPデータをどういじればいいのか分からん。。。 //--- PAINTSTRUCT psPaint; HDC hWndDC; HDC hMemDC; HBITMAP hBitmap; HGDIOBJ hGdiObj; hWndDC = BeginPaint(g_hWnd, &psPaint); hMemDC = CreateCompatibleDC(GetDC(g_hWnd)); hBitmap = CreateComptibleBitmap(hMemDC, 100, 100); hGdiObj = SelectObject(hMemDC, hBitmap); /* ここでバイナリをhBitmapに設定したい */ BitBlt(hWndDC, 0, 0, 100, 100, hMemDC, 0, 0, SRCCOPY); //--- ビットマップバイナリをどうにかしてhBitmapに突っ込んでやれば良いのかと思ってるんだけど、 方法がわからん… そもそも考え方が間違ってる?
870 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:45:57 ] >>869 SetDIBits
871 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 18:59:48 ] CreateDIBitmap
872 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 19:08:32 ] >>867 再現ソースとエラーを張れと何度いったことか
873 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 19:46:11 ] >>872 再現コードの作成はちょっと全体の量も多いし見当もつかないので難しいです・・・。 関係あるとしたらどんなことが考えられるでしょうか?ロケールとか?
874 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 20:00:57 ] >>873 スタックを壊したとか関数テーブルを壊したとか 多分バッファオーバーフローか未初期化ポインタを使って アクセスしてはいけないメモリを壊した可能性が高い
875 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 20:01:01 ] だからエラーメッセージ張れつ〜うの。テンプレに書いてあるでしょ 呼び出し規約とかランタイムとかリンクされるライブラリとか なんかプロジェクトの設定いじったでしょ。それを直せばいい
876 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 20:45:31 ] >>863 デバッグ版はインストール先のフォルダ。 リリース版はインストーラ作成のフォルダ。
877 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 21:22:45 ] >>874-875 レスありがとうございます。以前できていたところがいじってないのに 急になったので875さんの臭いかも知れないけど、気づいたらなってしまってました・・・ BCCでやっててエラーメッセージを取得できる部分が見当たりません・・・。 こういう時ってどうやってメッセージを受け取るんでしょう?すいませんアホで・・
878 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 21:58:31 ] 浮動小数とか言ってる時点でキミがアホなのはみんな分かってるよ
879 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 22:11:33 ] これでまったく関係ない場所でゼロ除算で落ちてたとかだとウケるな
880 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 22:24:46 ] あっwsprintfかw printf系じゃないから%fとか無理 sprintfつかえ
881 名前:デフォルトの名無しさん mailto:sage [2008/04/20(日) 22:29:26 ] snprintfとかswprintfでもいいよ
882 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 01:09:03 ] >>870 >>871 さんくす。 CreateDIBitmap使ってやってみたらいけた。 表示用のビットマップはCreateCompatibleBitmapで作って、 外部からもらったバイナリを描画するビットマップをCreateDIBitmapで作成 BitBltで転送して実装できたよ ありがとう
883 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 20:49:40 ] >>879 確実にvsprintfで落ちてました。 >>880-881 ダメでした。あきらめます。 親切にレスしてくださった皆様、ありがとうございました
884 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:15:55 ] null = new int[10] で確保した領域はどこに存在するの? delete[]しなければ、この確保した領域はプログラムが終了してもずっとそこに存在したままになるの?
885 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:18:33 ] >>884 ヒープ領域のどこか 終了したらちゃんと解放される 一部されないOSもなくはない
886 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:38:02 ] コンパイル時にtype_infoみたいな感じで静的にクラス名の文字列を取得できる方法ってありますか? テンプレートクラスで例外を投げる時に使いたいんですが・・・
887 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 21:52:34 ] >>886 boostのこの辺のが役に立つかもしれない ttp://www.kmonos.net/alang/boost/classes/enable_if.html
888 名前:デフォルトの名無しさん mailto:sage [2008/04/21(月) 22:10:44 ] boostって本当にすごいね・・・そんなのも判定できるとは でも型名の取得は厳しいのかな・・・
889 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 01:38:20 ] やっぱりboostでtypeofってのがあって、それで 型名は取得できるのだけど、staticな処理じゃないんだよね。 なのでその用途だとtypeid使うのとあまり変わりない。 ttp://www.kmonos.net/alang/boost/classes/typeof.html
890 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 03:19:09 ] STLをはじめ、テンプレートをよく使いなさい。 型の完全名がカオスになって諦めがつくから。
891 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 04:20:31 ] void CtimerDlg::OnBnClickedButton2() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 msgdlg aaae = new msgdlg(); aaae.Create(IDD_DIALOG1, this); aaae.ShowWindow(SW_SHOW); } このボタンを押すとダイアログウィンドウが一瞬表示されたようにみえるのですが、表示されません。 SW_SHOWがいけないんでしょうか?
892 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 07:09:45 ] それコンパイル通るの?
893 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 07:55:39 ] コンパイルできないし、それが単なるtypoだったとしても資源の管理はどうなってるんでしょうね、と。
894 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 09:21:56 ] コンパイルはできますがやはりaaae.ShowWindow(SW_SHOW);で消滅します
895 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 09:25:14 ] あ、aaaeをポインタにしたら出来ました。
896 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 20:23:53 ] 単にスコープ抜けたから、msgdlgのインスタンスが死亡しただけだろう。
897 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:23:39 ] vsprintfについてなんですけど、下記のva_end(..)っているのですか? xx func(const char* format, ...) { char buf[256]; va_list args; va_start(args,format); vsprintf(buf, format, args); va_end(args); // <=== これ必要なんですか? ... }
898 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:30:35 ] 規格で、同じネストレベルでva_start,va_endの組で使うことになっている。
899 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:32:48 ] 実装によるかも知れんがメモリとかがぶっ壊れるんじゃまいか
900 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:49:24 ] すいませんちょっとお聞きしたいのですが、GCCで if(ret = 1){ int dt = 1; } みたいにしたら、 「真偽値として使われる代入のまわりでは、丸括弧の使用をお勧めします」 と言われたので、 if((ret = 1)){ int dt = 1; } みたいにしたら、許してもらえました。 なぜ ((ret = 1)) の方がよいのでしょうか??
901 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 21:52:09 ] >>900 ret==1って書いたらその警告消えてくれるよ。
902 名前:897 mailto:sage [2008/04/22(火) 21:54:54 ] >>898-899 どうも、 ここのサンプルではva_end使ってないんです msdn2.microsoft.com/ja-jp/library/28d5ce15 (VS.80).aspx そして、www.bohyoh.com/CandCPP/C/Library/vsprintf.html ここに、「本関数は、va_endマクロを呼び出さない」 と記述があるんです
903 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:00:56 ] >>900 ==の間違いだったりしませんよね?大丈夫?っていう警告だからそういうもんだと思え 別に前の書き方でも問題ない (())の方がよいというわけじゃない
904 名前:900 mailto:sage [2008/04/22(火) 22:05:44 ] >>901 さん >>903 さん なるほど!ありがとうございます!
905 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 22:28:34 ] >>902 VCに限っていえばva_endマクロは何もしないから呼ばなくても問題はない。 しかし、他の処理系で動くとは限らない。
906 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:00:01 ] >>902 書かなくてもいい環境が有るとはいえ、プログラムとしては書かないと駄目。 運悪く駄目なサンプルに当たったね。
907 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:05:39 ] >>896 なるほど! msgdlg aaae = new msgdlg(); をグローバル領域に持って行っても起動しました。 ポインタの理解が深まりました。ありがとう!
908 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:07:36 ] ちょっとぉぉぉぉぉ
909 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:13:26 ] これが 「何か適当にいじったら動いた」 という奴か
910 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:14:27 ] > グローバル領域 深まってない悪寒
911 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:15:55 ] さすがにこれをコンボでくらったら元のソースを自分で書いていたとしてもデバッグしたくなくなるな (だから、その変てこなのは後から馬鹿が弄ったんだってば ><)
912 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:18:30 ] >msgdlg aaae = new msgdlg(); このコード、何度見ても謎が残りすぎ。
913 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:29:02 ] >891の段階で既に釣りだったんじゃね?
914 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:30:42 ] >>907 C++の入門書か入門サイトをもう一度見て回った方が良いと思うぞ。 煽りとかじゃなくて本当に。基礎は大事だから。 とりあえず、理解する必要のあるキーワードとしては、 ポインタ、参照、自動変数、デストラクタ、delete、スコープ、スタック、ヒープ あたりかな。
915 名前:デフォルトの名無しさん mailto:sage [2008/04/22(火) 23:32:33 ] 釣りなら、それはそれでおk。
916 名前:デフォルトの名無しさん [2008/04/23(水) 00:24:05 ] switchのcase文内で、auto変数を宣言しようとすると、{}をつかってブロックを 作らないとだめですか?
917 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:25:05 ] だめです
918 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:30:02 ] >>916 例えばこういうことならできる。 switch (value) { int someVar; case 0: someVar = 0; break; case 1: someVar = -1; default: someVar = value; break; }
919 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 00:35:00 ] >>914 レベルアップした気分ですごく満足なのですが もう一度新C++言語入門シニア編上下を読み直してみます・・・ が、ずばり一言でどこがおかしいですか?頭関係以外でおねがいします。
920 名前:デフォルトの名無しさん [2008/04/23(水) 00:35:09 ] >>917-918 ありがとうです。 918はやり方自体知らんかったス。
921 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 01:01:17 ] >>919 頭関係以外で一言にまとめるには、対象が「少数」の「具体的なディテール」である必要がある。 でも君の場合、「基本的な抽象概念」の理解が「幾つも」欠けているように見受けられるから、まとめようがない。 だから>>914 も困った挙げ句 > ポインタ、参照、自動変数、デストラクタ、delete、スコープ、スタック、ヒープあたり という言い方になってるんだよ(これでも親切に用語を絞って挙げてるほう)。
922 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 02:37:20 ] >>919 msgdlg aaae; //○msgdlg型の変数 msgdlg aaae = new msgdlg(); //×msgdlg型の変数にmsgdlg*型の値を代入 msgdlg *aaae = new msgdlg(); //○msgdlg*型の変数にmsgdlg*型の値を代入 一言でいうと,どこがイコールよ?
923 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 07:18:54 ] >>919 void CtimerDlg::OnBnClickedButton2() { // new msgdlg() → msgdlgのインスタンスをヒープに確保。 // // msgdlg aaae = ... → msgdlgのインスタンスをスタックに確保して、 // msgdlg(msgdlg* ptr)に適合するコンストラクタで初期化。(※1) msgdlg aaae = new msgdlg(); ... // 自動変数のaaaeがスコープから外れるのでデストラクタが呼ばれ、 // aaaaが保持していたウィンドウなどが削除される。 // // (※1)のポインタptrをdeleteしていなければメモリリーク。 } が理解出来ていないように見える。 作りたいのがモーダルダイアログなら、 { msgdlg aaae; aaae.Create(IDD_DIALOG1, this); aaaa.DoModal(); } 関数を抜けてもmsgdlgを保持するなら、 グローバルでなくCtimerDlgのメンバにする。
924 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 07:20:43 ] よく見たらeだった。 × aaaa ○ aaae
925 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:41:18 ] ビットフィールドは、 unsigned char x : 50; のように元の型を超えていても定義できますか?
926 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:43:54 ] unsigned char配列を、38 、 6 、 4 のように分けたいのですが、ビットフィールドで出来ますか? あと、38bitの部分は、=で比較できますか? 無理な場合、別の方法はないでしょうか
927 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 09:51:28 ] このようにしたら、確保する領域は、40bit + 8bitになりますよね? 33 + 7 ではないですよね? class A{ public: bitset<33> a; char b : 7; };
928 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 10:06:17 ] 自己解決しました これで長い列に変換出来ました bitset<40> *p; unsigned char s[5]={1,255,1,255,128}; p=(bitset<40>*)&s; cout<< *p;
929 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 10:53:08 ] そ れ は 偶 然 だ
930 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:16:25 ] >>922 >>923 ありがとうございます。すごくよくわかりました。 void CtimerDlg::OnBnClickedButton2() { // TODO: ここにコントロール通知ハンドラ コードを追加します。 int a =0; while(a < 100){ msgdlg *aaae = new msgdlg[100]; aaae[a]->Create(IDD_DIALOG1, this); // エラー aaae[a]->ShowWindow(SW_SHOW); aaae[a]->OnBnClickedOk(); delete aaae[a]; a++; } } error C2819: クラス 'msgdlg' にはオーバーロードされたメンバ 'operator ->' がありません。 これは何がいけないんでしょうか?
931 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:32:26 ] 下記のコードを実行したときに test::aaa で内部的に確保されたメモリ(?)が解放されず、 メモリリークが起きてしまっているようで解決方法が見つからず困っています。 STLなどの場合、確保したメモリを明示的に解放する関数などがあるのでしょうか? ( aaa.clear() や aaa.~vector() などは試してみたのですが駄目でした) それとも test::aaa 自体も new で確保して delete で解放したほうが良いのでしょうか? 環境はVC++2005です、よろしくお願いします。 class base { public: ~base(){ destory(); } virtual void destory(){}; }; class test : base { public: std::vector< int > aaa; void destory(){ aaa.clear(); } }; void main(){ void *p; { test *ptest; ptest = new test; ptest->aaa.resize(100); p = (void*)ptest; } //ここではポインタ p の基本クラスが base ということ以外はわからない delete (base*)p; }
932 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:39:01 ] デストラクタで仮想関数呼び出すとか馬鹿じゃねーの?
933 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:42:12 ] 古い形式のキャスト使ってるとか馬鹿じゃねーの? スマートポインタ使ってないとか馬鹿じゃねーの? いやいや、馬鹿じゃないって。 デストラクタの中から仮想関数呼び出すのはさすがにないけど。
934 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:44:25 ] >>930 これはひどい
935 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:57:28 ] … ~base() が呼び出されるときは 既に test::destory の実体はなくなっているからでしょうか? 馬鹿ですみません… こういう場合、クラスtestで確保したメモリは どう解放したら良いのでしょうか?
936 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 11:59:40 ] しかも書いてありました。 スマートポインタで調べてみます。
937 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 12:31:15 ] baseのデストラクタにvirtualをつけて上で testに自分のdestoryを呼ぶデストラクタを書けば baseのデストラクタの最初でtestのデストラクタが呼ばれて、testのdetoryが呼び出されるため この場合はmain内部の変更無しでメモリリークがなくなるけど、それじゃ駄目なの?
938 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 13:22:22 ] >>937 ありがとうございます、無事に解放されるようになりました。 いろいろと勉強不足でした。 仮想デストラクタにしないと派生クラスのデストラクタが呼び出されないのはもちろん メンバ変数のデストラクタも呼び出されないということ(?)なんですね。
939 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 13:39:34 ] >メンバ変数のデストラクタも呼び出されない 詳しくは覚えてないが、デストラクタが仮想関数(virtual)であれば、delete演算子が 渡されたポインタから仮想関数テーブルを辿って継承関係を把握できるとか だったと思う(逆に言えば仮想関数でないと把握できない)。 ちなみに勘違いしてそうなので書いておくけど、デストラクタとは ~クラス名();←引数無し のこと。destroyとか勝手に名前つけたらそれはただのメンバ関数だよ。 この場合正しくは virtual ~base();とかだ。
940 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 13:43:43 ] あ、そういえば~base()はちゃんと書いてあるのかw
941 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 14:11:20 ] なるほど…仮想関数テーブルですか、 virtual指定はなんだか漠然としていて理解しにくかったですが なんとなくはどう動作するかが理解できました。 ありがとうございます。
942 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 14:16:49 ] >>930 下のソースはコンパイル可能 行数減らしたから少し見辛いかも >>914 の言うようにポインタと参照について学んだ方がいい struct CTest{ void test(){} }; void f(){ CTest a; CTest* b = new CTest(); CTest* c = new CTest[1]; CTest d[1]; a.test(); (*&a).test(); (&a)->test(); (&a)[0].test(); (*b).test(); b->test(); b[0].test(); (*c).test(); c->test(); c[0].test(); (*d).test(); d->test(); d[0].test(); delete b; delete[] c; }
943 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 14:47:49 ] >>942 感動しました。こんなにわかりやすいの初めてみました。がんばります!
944 名前:デフォルトの名無しさん [2008/04/23(水) 15:37:22 ] 物凄い初歩的な質問なんですが 上手い方法を教えてもらいたくて質問します。 ある文字列があって 1文字ずつ処理していくんですが、 何か文字に変化があった時だけ処理を行いたいのです。 char str[]="ああいうええお";//何か文字列 int len=strlen(str); char current_c; current_c=str[0];//内容を覚える for(int i=0; i<len; i++){ if(current_c!=str[i]){//連続している文字が変われば //処理 } } こんなのを思いついたんですが これだと、1つ目の文字が当然処理されません。 current_c=str[0];//内容を覚える これを current_c=str[0]+1;//内容を覚える として、必ず1回目は処理が行われるようにするのも考えたんですが もっとちゃんとしたスマートな方法があると思うんですが・・・ こういう場合、どうやるのが一般的なのでしょうか?
945 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 15:46:25 ] str[0]+1なんて代入しなくても、0で初期化しておけばいいんじゃないの?
946 名前:デフォルトの名無しさん [2008/04/23(水) 15:48:09 ] >>944 charは1バイトだから平仮名みたいな多バイト文字はうまくゆかないよ。 分かっているならごめん。
947 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:11:33 ] >>945 0に相当する文字が来た時に駄目でしょ。
948 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:12:08 ] >>944 typedef char val_t; val_t str[]="aabbbcccddee"; typedef val_t* iter_t; for(iter_t begin=str,end=str+strlen(str),back,it=begin; it!=end; ++it){ if(it==begin || *back!=*it){ //処理 back=it; } } (・∀・)
949 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:13:42 ] >>947 それはひょっとしてギャグでいってるのか・・・・
950 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:19:37 ] >>944 最初に1文字目と異なる値 str[0]+1 で初期化しとけば良いんじゃね? ってのは結構頭の良い発想。凡百の徒には嫌われるけどね。 でもそういうときの current_c は普通 prev_c だな。
951 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:22:12 ] >>950 そうか?ムダじゃね?
952 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:33:50 ] 一つ目の文字が変わるっていう意味が分からんw
953 名前:948 mailto:sage [2008/04/23(水) 16:41:36 ] struct CTest{ bool operator!=(const CTest& o){ // ... return true; } }; template<typename iter_t> void unique_each(iter_t begin, iter_t end){ for(iter_t back,it=begin; it!=end; ++it){ if(it==begin || *back!=*it){ //処理 back=it; } } } void f(){ CTest v[10]; // v[0] ... unique_each(v,v+sizeof(v)/sizeof(*v)); } (∩゜д゜)アーアーきこえなーい
954 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:46:59 ] >>951 今回は文字だから 0 にしときゃ良いけど、 一般に先頭要素または直前のと異なる要素を 判定していくには良い方法だよ。
955 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 16:58:36 ] >>945 の前提条件 nul終端文字列 >>947 の前提条件 文字列 >>950 の前提条件 コピーコンストラクタ operator+ operator!= を持っている型 >>953 の前提条件 operator!= を持っている型
956 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:04:34 ] >>955 もう>>944 とは別世界に行ってるなw
957 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:31:55 ] PHPやperlでprint を使いながらデバッグするような方法をC++でもやりたいのですが、どうすればよいでしょうか?? そういうデバッグの仕方はC++では難しいのでしょうか。
958 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:32:34 ] >>944 ちょっとトリッキー、でもうまいやり方 >>945 一番シンプル >>946 一番重要なレスw >>953 汎用化し杉ワロタw
959 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:44:15 ] >>944 #include <algorithm> #include <string> #include <iostream> #include <functional> int main() { std::wstring src = L"ああいうええお"; src.push_back(0); ::setlocale(LC_ALL, "ja_JP.UTF-8"); for (std::wstring::iterator i = src.begin(); *i != 0; ++i) { i = std::adjacent_find(i, src.end(), std::not_equal_to<wchar_t>()); std::wcout << i-src.begin() << *i << std::endl;; } } 終端一つ加えて条件が逆のadjacent_find >>957 エスパーするとコードを読ませて実行時に一時的な値を見るとかならデバッガ gdbとVC付属のやつとか
960 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:44:31 ] >>944 は、charの取りうる最大値を指していた場合 +1すると、オーバーする。 >>945 は、処理内容次第では、\0がいきなり来た場合にヤバい。 が、あのプログラムの場合strlenの値がループの実行回数だからOK >953は、恐らく>>944 が本当に必要だったものではない可能性が高いw
961 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:47:00 ] >>959 さん なるほどデバッガで変数に格納されてる値を見ることが出来るんですね。 ありがとうございましたm(_ _)m
962 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:51:55 ] >>>944 は、charの取りうる最大値を指していた場合 >+1すると、オーバーする。 するってーと current_c=~str[0]; が適切?
963 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:53:43 ] オーバーフローしても大丈夫だろ。
964 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:55:39 ] あ、一文字目が処理されない
965 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 17:56:06 ] >>963 実動はともかく、規格的にはアウトだろ
966 名前:959 mailto:sage [2008/04/23(水) 18:12:21 ] リベンジ #include <algorithm> #include <string> #include <iostream> #include <functional> int main() { std::wstring src = L"ああいうええお"; ::setlocale(LC_ALL, "ja_JP.UTF-8"); std::wstring::iterator i = src.begin(); if (!src.empty()) { do { std::wcout << *i << std::distance(src.begin(), i) << std::endl; i = std::adjacent_find(i, src.end(), std::not_equal_to<wchar_t>()); } while(i++ != src.end()); } }
967 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 18:15:31 ] そして通告されるeucJP
968 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:01:21 ] vectorの配列を作ろうと思い vector<vector<string> > vecStrDim; vector<string> vecStr; string strTest = "test"; vecStr.push_back(strTest); vecStrDim[0].push_back(vecStr); とやってみました。コンパイルは通るのですが This application has requested the Runtime to terminate it in an unusual way. Please contact the application's support team for more information. とでて実行してもデバッグエラーになります vecStrDim[0].push_back(vecStr);が悪いのはわかるのですが、方法が思いつきません どうすればデバッグエラーを対処できるのでしょうか?
969 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:06:06 ] >>968 ×vecStrDim[0].push_back(vecStr); ○vecStrDim.push_back(vecStr);
970 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:10:40 ] >>969 あわわ……とんでもなく馬鹿なことしてすみません 解決しました
971 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:14:36 ] そのコードがコンパイルが通ることが不思議だ…
972 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 19:29:14 ] シングルバイト限定なら、current_cをintか何かにして、charで表現できないデカい値にしとけばいい。
973 名前:デフォルトの名無しさん mailto:sage [2008/04/23(水) 20:44:51 ] class内で、static付けたものは、配列にしたときコピーは作られないんですよね? すべて同じ物を参照するんですよね
974 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:27:08 ] まあ配列にしなくても1つしか実体が存在しないようになるけどな
975 名前:デフォルトの名無しさん [2008/04/24(木) 00:49:34 ] #include <stdio.h> void main(void) { int a; pirntf("何か入力してください\n\n"); scanf("%d",&a); while(1){ printf("ぐははははははは!!\n\a"); } } この程度しか俺は中なので書けません。プログラマーさん お願いします。
976 名前:デフォルトの名無しさん [2008/04/24(木) 00:50:21 ] ↑MISSりました #include<stdio.h> void main(void) { int a,b,c; printf("数字を入力してください\n"); scanf("%d",&a); printf("数字をまた入力してください\n"); rewind(stdin); scanf("%d",&b); printf("数字をまたまた入力してください\n"); scanf("%d",&c); if(a == b == c) printf("等しいです,\n"); else printf("等しくないです,\n"); } これでa==b==cだったら"等しい"と表示させるように組んでるのに 1、1、1以外の数字は入力してもは全部"等しくないです"になるのは なんででしょうか?
977 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:52:43 ] >>976 a == b == c は、(a == b) == c と解釈される。つまり、使い方が間違っている。 その場合、恐らくa == b && b == c でいいだろう。
978 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:57:13 ] 980あたり、次スレたのむぜ
979 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 00:59:27 ] >>977 おおwなるほど! ありがとうございました^^
980 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:11:37 ] >>990 にパス
981 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:14:03 ] >>976 移動前のスレのコメントにもありましたが、 「君が参考にしてるものは信用しないほうがいい」 です。void main(...) はまずい。
982 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 01:17:45 ] void main は g++ でエラーになるしな。 gcc だと警告ですむけど。
983 名前:981 mailto:sage [2008/04/24(木) 01:34:22 ] rewind() も、あるのかわからない.....。stdin に対して rewind() ?
984 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:35:46 ] 1〜100までの数字でひとつだけない数字があるのでそれを探すという問題なのですが ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/6318.cpp でひとつひとつ探す方法はあるのですが 他の方法で、まず 1〜50までの個数と51〜100までの個数を数えて 1〜50が49個 51〜100が50個で1〜50にあるとして 次は1〜25、26〜50とどんどん減らして 26〜38と39〜50の割り切れないときは13と12にしたりなどして 最後2つの数字にし 48が1個 49が0個で49がない数字とするプログラムを作りたいのですが どなたか例みたいなものを書いていただけないでしょうか?
985 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:41:23 ] 数えながら2つのファイル(小さい,大きい)に書き出していけばいいんじゃねの?
986 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:42:37 ] どこにあるのかわからないなら、ひとつひとつしらべるのが最善
987 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 03:48:07 ] 問題でこのような方法で作りなさいとあるので作りたいんですがダメでしょうか? #include<stdio.h> #define N 100 int main(void){ int min , max , mid; int count1, count2; int data, i; FILE *fp ここまでの指定はあるのですが、今自力でやってみてるんですが どう二つに分けそれ以降どのように区切っていけばいいのかよくわからないんです
988 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 04:42:58 ] 物凄い無駄な処理だなw 再帰呼び出しを使うのが良いよ
989 名前:988 mailto:sage [2008/04/24(木) 04:46:09 ] ああ、ごめん。数字は順番に並んでるわけじゃないのか
990 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 04:54:26 ] 諦めて全部足して5050から引け
991 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:18:22 ] #include <vector> //trueならmidより上、falseなら下 bool hilow(int min, int mid, int max, std::vector<int> src, std::vector<int> dst) { dst.clear(); std::vector<int> hi, low; //中間数超と以下でhi, lowに分ける for(size_t c=min; c <= max; c++) { if(src[c] <= mid) low.push_back(src[c]); else hi.push_back(src[c]); } //個数が規定値か調べて多い方を返す if(hi.size() == max - mid ) { dst.swap(hi); return ture; } dst.swap(low); return false; } 続く
992 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:33:54 ] 続き void main() { std::vector<int> num; //ファイルからnumに一度全部読み込む //ここは自分で書けるでしょ? int min, mid, max; min = 1; max = 100; do { (max - min + 1) % 2 ? mid = (max - min + 1) / 2 + 1 : mid = (max - min + 1) / 2; if( hilow(min, mid, max, num, num) ) min = mid + 1; else max = mid; } while(max - min > 2); //完了 }
993 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:36:05 ] あー色々間違ってたw bool hilow(int min, int mid, int max, std::vector<int>& src, std::vector<int>& dst) dst.clear(); は無し f(hi.size() == max - mid ) { dst.swap(low); return false; } dst.swap(hi); return true; }
994 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:37:10 ] 試してないけどこんな感じで良いと思うよ。 中間の出し方は微妙に間違ってるかもしれんので、自分で検証してね。
995 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 05:56:21 ] exeを逆アセンブルしてソースコードに組み込む定番のやり方教えて下さい
996 名前:デフォルトの名無しさん [2008/04/24(木) 06:00:08 ] ソースコードでよくみかける10Lや1Lってなんのことなんでしょうか? 「1Lとは」などで検索したのですが見つかりません。 環境はC++、BCCです。どなたか回答頂ければ幸いです。
997 名前:デフォルトの名無しさん [2008/04/24(木) 06:09:58 ] >>996 整数のあとにつくLはlong intであることを表す。 10はintの10。10Lはlong intの10。
998 名前:デフォルトの名無しさん [2008/04/24(木) 06:31:33 ] >>997 ありがとうございます! long intをキーワードに検索したら大体わかってきました。 long intを代入するときはLをつけるという解釈であってますか?
999 名前:デフォルトの名無しさん mailto:sage [2008/04/24(木) 06:39:42 ] 違うよ。整数リテラルそのものにも型があるの。 1 は int型 '1' は char型 1.0 は double型 1L は long型
1000 名前:デフォルトの名無しさん [2008/04/24(木) 06:49:16 ] 重ねてありがとうございます! 詳しい説明でよくわかりました(多分)。 単なる1でも勝手にintにされてるんですね。
1001 名前:1001 [Over 1000 Thread] このスレッドは1000を超えました。 もう書けないので、新しいスレッドを立ててくださいです。。。