1 名前:デフォルトの名無しさん mailto:sage [2009/05/28(木) 01:08:48 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.65【環境依存OK】 pc12.2ch.net/test/read.cgi/tech/1239326399/ 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm ◆ソースのインデントについて 半角やTABでのインデントはスレに貼ると無くなります。 そのため、アップローダーに上げるのが最も良いですが、 直接貼るのであれば、全角空白か に置換しておくことをお勧めします。
27 名前:デフォルトの名無しさん [2009/05/29(金) 22:08:03 ] #include <iostream> class test{ public: test(double x=0, double y=0) : m_x(x), m_y(y) {} double m_x, m_y; }; void main(){ test t = (100.0, 0.0); std::cout << t.m_x << " " << t.m_y << std::endl; } こうすると、 0 0 と表示されます。本当は 100 0 と表示されてほしいのですが、なぜこうなってしまうのでしょうか?
28 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:19:04 ] >>27 test t(100.0, 0.0);と書くんだ。 test t = (100.0, 0.0);だと、まず(100.0, 0.0)が順次演算子を使った式として評価されて、test t = test(0.0);と同じ意味になる。
29 名前:デフォルトの名無しさん mailto:sage [2009/05/29(金) 22:23:00 ] えーとだな まずtest t = (100.0, 0.0);だが、(100.0, 0.0)は「100.0と0.0をカンマ演算子で繋いだもの」だ つまり100.0が捨てられて0.0が残るから、この式は結局「test t = 0.0;」と同じ事だ =での初期化だから、コピー初期化をするために右辺はtest型への変換が試みられる この時、デフォルト引数のせいでdouble1個でも呼び出せるためにtest(double x=0, double y=0)が 変換コンストラクタとして働く つまりdoubleの0.0がtest(0.0,0)によってtest型に変換され、tにコピーされる だからtのm_xもm_yも0になるというわけだ 要するに「test t(100.0, 0.0);」と書け
30 名前:デフォルトの名無しさん [2009/05/29(金) 22:27:41 ] >>28 なるほど、分かりました。実は test t = (100.0, 0.0, 99999); と書いたら 99999 0 と表示されたので、クラスの中身を破壊でもしてるのかと思ってました。 最後に右側が評価されるので、 test t = 99999 と評価され、コンストラクタにデフォルト値を設定してたのでコンパイルも 通ってたみたいです。 言われたとおりに初期化を書き換えました。 ありがとうございます。
31 名前:デフォルトの名無しさん [2009/05/30(土) 02:03:47 ] ビルド→デバッグ 0 0 0 0 0 デバッグ 0 0 0 0 1 デバッグ 1 0 0 0 1 といった様に配列に追加書き込みをする方法を教えていただけませんでしょうか?
32 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 03:26:20 ] 項目名とその値の組み合わせを複数渡す必要があるとき 構造体のlistを渡すのとmapを利用するのはどっちが無難でしょうか?
33 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 03:37:51 ] >>32 map の方が楽
34 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 04:56:14 ] あるポインタが指してるアドレスを別のポインタとか変数に入力する事って出来ますか?
35 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 05:07:28 ] はい
36 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 08:09:11 ] 来年就職に備えて、行き当たりばったりな開発の仕方から しっかりと設計してから開発の流れにもっていきたいんだけど、 デザインパターンとかUML学べばおk? ためになる資格とかお薦めの参考書あれば教えてくほしい
37 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:09:35 ] struct Hoge { int hoge; ... }; class Hoge { Hoge():hoge(0){} public: int hoge; ... }; 上みたいにclassにメンバ関数加えても、継承や仮想関数を使わない限り同じメモリ配列になるのは決まってるんでしょうか それとも、そう思い込んではいけませんか
38 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 10:24:33 ] NULLポインタをdeleteしても何も起こらないらしいですが、配列のポインタの場合がNULLポインタだった場合にdelete[]をしても何も起こりませんよね???
39 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 11:43:01 ] 起こりませんよ!!!
40 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:11:02 ] まあ、NULLのポンタをdeleteする時点で 何か間違ってる可能性は否定しない
41 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:18:00 ] ポンタか なるほどね
42 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 13:57:13 ] ぬるぽんた
43 名前:38 mailto:sage [2009/05/30(土) 14:15:34 ] デストラクタでわざわざif (pArray) delete[] pArray;って書くのもナンセンスなのかなって思っただけです。 普通のポインタはdelete p;で済ませますよね? で、配列もやっぱり同じことができるのかな、と。 "delete[]"で検索してみても、[]はキーワードにならないみたいで、マッチしたページが出てこないのでここで質問してみました。
44 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 14:48:28 ] >>43 うん,ナンセンス。 NULLをdelete[]しても何も起こりませんからご安心ください!!!
45 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 14:54:16 ] >>40 行田市でタヌキの赤ちゃんが見つかったニュースですね
46 名前:デフォルトの名無しさん [2009/05/30(土) 16:22:53 ] VC2008で関数にカーソル合わせると、ヘッダファイルに書いた宣言とコメントが表示されたような気がするのですが、コメントが表示されません。 コメントはヘッダのどこに書けば表示されるのでしょうか。 それともなにか設定があるのでしょうか?
47 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 17:27:01 ] >>37 コンストラクタ、デストラクタ、コピーコンストラクタ、代入演算子以外なら大丈夫 これらを一つでも作った場合は規格上は保証されない
48 名前:デフォルトの名無しさん [2009/05/30(土) 19:39:16 ] >>38 そんなのやる時間があったら、なにかソフトを1つ自分で書いてみろ。
49 名前:デフォルトの名無しさん mailto:sage [2009/05/30(土) 21:32:16 ] >>48 は?w
50 名前:デフォルトの名無しさん [2009/05/31(日) 12:34:34 ] std::vector<T>の最後尾の要素を移動したいとき、 std::vector<T> vec; T tmp = vec.back(); vec.pop_back(); という感じで、二段階でやるしかないでしょうか?
51 名前:デフォルトの名無しさん [2009/05/31(日) 13:57:17 ] C++の参照渡しについての質問です。 以下のようなメンバ関数があったとします。 SStruct GetReturnStruct() const; INT32 GetReturnINT() const; これらの関数を以下のように使用します。 1. SStruct sStruct = GetReturnStruct(); 2. INT32 nINT = GetReturnINT(); 3. SStruct& sTestStruct = GetReturnStruct(); 4. INT32& nTestINT = GetReturnINT(); 5. const SStruct& c_nTestStruct = GetReturnStruct(); 6. const INT32& c_nTestINT = GetReturnINT(); 実行環境はVisualStudio2005です。 1と2は普通にコンパイルして実行できるのですが、 3と4の場合、3はコンパイルが通り、4はエラーメッセージ 「'INT32' から 'INT32 &' に変換できません。」 が出てしまいました。 また、5と6ではコンパイルが通りました。 1から6までは内容的には同じ値が入ると思うのですが、 内部的な処理はそれぞれどのようになされているのでしょうか? 構造体などを使うときはなるべく参照かポインタを引数にしたほうがよい と聞いたのですが、参照の使い方がまだ今ひとつ理解できていません。 どのような場合に参照渡しをしたほうがよいのでしょうか?
52 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 14:49:15 ] >>51 参照渡しと言えば普通は引数についての議論だけど、 1〜6は戻り値の受け取り方だろ。噛み合ってない。 まあ、戻り値について言えば、3〜6は参照先の実体が失われるような受け取り方なので、 危険であり、ありえない。 内部的な処理で言えば、参照はポインタと同じで、どこかにある実体を指しているだけ。 実体は他でちゃんと保持されなければならない。
53 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 14:51:16 ] >>50 例外安全のために二段階に分けられている。 そのやり方しかない。
54 名前:デフォルトの名無しさん [2009/05/31(日) 15:28:12 ] >>52 ごめんなさい、参照での戻り値についての質問でした。 3〜6は参照先の実体が失われるとのことですが、 具体的にはどのようなケースで危険が発生するのでしょうか SStruct& sTestStruct = GetReturnStruct(); は 1.GetReturnStruct()で返り値の変数が作られる 2.それを参照する。 SStruct sTest1Struct = GetReturnStruct();は 1.GetReturnStruct()で返り値の変数が作られる 2.宣言SStruct sTest1Structで変数が作られる 3.返り値の変数をsTest1Structに代入 と思っていたため、変数が作られるのが一つ少ない分 SStruct& sTestStruct = GetReturnStruct(); の方が良いと思っていたのですが・・・
55 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:15:17 ] >>54 > SStruct& sTestStruct = GetReturnStruct(); は > 1.GetReturnStruct()で返り値の変数が作られる > 2.それを参照する。 つづきは 3. 1で作った返り値の変数が破棄される。(参照は破棄済みのデータを指すことになり、使えない) > SStruct sTest1Struct = GetReturnStruct();は > 1.GetReturnStruct()で返り値の変数が作られる > 2.宣言SStruct sTest1Structで変数が作られる > 3.返り値の変数をsTest1Structに代入 つづきは 4. 1で作った返り値の変数が破棄される。(コピー済みのsTest1Structは残るので、使える)
56 名前:デフォルトの名無しさん [2009/05/31(日) 16:32:15 ] >>55 Thanks ですが、 SStruct& sTestStruct = GetReturnStruct(); では、その後も普通に取得した値の参照が使えてしまいます・・ なぜこのような事態が発生するのかわかりますでしょうか?
57 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 16:58:56 ] >>56 ごめん、私の勉強不足のために嘘を教えてしまった。 ttp://www.sun-inet.or.jp/~yaneurao/intensive/cppmaniax/chap0001.html にあるように、const参照は一時オブジェクトを束縛するということなので、5と6はOK。 3が通るのは、そのコンパイラが一時オブジェクトを破棄するタイミングを たまたま遅らせているだけと考えられるので、 環境を変えたときに安全は保証されないと思う。
58 名前:デフォルトの名無しさん [2009/05/31(日) 17:28:49 ] const参照は一時オブジェクトを束縛する ということで了解しました。回答ありがとうございます。 ところで、クラスのメンバ関数の作り方で再び質問で、 以下のようなクラスがあるとします。 class CTest { private: SStruct m_sTestStruct; public inline VOID GetStruct(SStruct& sGetStruct) { sGetStruct = m_sTestStruct; } inline SStruct GetStruct() { return m_sTestStruct; } } メンバ変数のm_sTestStructを取得する関数の書き方としては、 1. VOID GetStruct(SStruct& sGetStruct); 2. SStruct GetStruct(); のどちらが処理的には良いのでしょうか? 直感的な見た目としては戻り値がSStructの方がわかりやすいと思うので 自分は大体2の方を使っております。
59 名前:デフォルトの名無しさん [2009/05/31(日) 17:30:10 ] あと、構造体の質問で以下のような構造体があるとします、 struct SList { SStraightCardList(); ~SStraightCardList(); E_TYPE eType; INT32 anArray[3]; }; このとき、以下のような初期化をしようとすると static const SList SLIST_DEFAULT = { eN_DEFTYPE, 1, 2, 3 }; error C2552: 初期化子リストによる個別の識別子の初期化に誤りがあります。 ユーザー定義のコンストラクタを含む型はアグリゲートではありません。 とのエラーメッセージで構造体の初期化がうまくいきません・・・ 構造体ではデフォルトコンストラクタを自分で定義してしまったら 初期化 = {..., ..., ...}; の書き方は使えないということなのでしょうか?
60 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 17:30:26 ] すいませんプリコンパイル済みヘッダーというのが使い方がよく分からないのですが、 pch.hファイルに使用する全てのヘッダーファイルのincludeを書いて、 他のcppファイルはpch.hのみincludeするというのが正しい使い方なんでしょうか
61 名前:デフォルトの名無しさん [2009/05/31(日) 17:32:40 ] すいません。コンストラクタ部分をこぴぺミスしました。 SStraightCardList()→SList()です。 よろしくお願いします
62 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 18:09:52 ] >>58 今はVOIDだが、他に戻り値が必要なら1。 SStructがコンストラクタを持つなら、コピーコンストラクタ一発で値を返すことができるので2。 SStructがただの構造体なら1も2も同じだけど、呼び出しが楽なので2。 それより良い手は const SStruct& GetStruct() const { return m_sTestStruct; } >>59 ttp://msdn.microsoft.com/ja-jp/library/0s6730bb(VS.80).aspx >>60 プリコンパイル済みヘッダには、各cppで共通のヘッダで、変更の少ないものを書くのが普通かと。 変更があると、全cppを再コンパイルする羽目になるので。 各cppはプリコンパイル済みヘッダと、不足分のヘッダをincludeする。
63 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:03:18 ] int data_1[100][200] int* p_data; p_data = &(data_1[0][0]); として、 p_data[50][70]; などとしてデータを取り出したいのですが、うまくいきません。 *(p_data + 50*200 + 70)とすれば取り出せることは分かったのですが、 2次元配列形式でデータを取り出すのは不可能なのでしょうかデータのコピーはしたくありません
64 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:06:10 ] int* p_data[][]; もしくは int* p_data[100][200];
65 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:13:56 ] int* p_data[][]; と記述するとコンパイルエラーになります。 あと、p_dataの参照先はdata_1だけでなく、 条件によってサイズの異なる別の配列を参照する場合があるので、 サイズを固定することはできないです。
66 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:14:43 ] 先頭を渡すなら p_data = &(data_1[0][0]); じゃなくて p_data = data_1;
67 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 19:16:01 ] >>65 サイズが違うなら多次元配列を1次元配列とみなして *(p_data + 50*200 + 70) のような感じでアクセスするしかないんじゃない?
68 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:52:22 ] typedef int (*data200)[200]; data200 p_data = data_1[50]; return p_data[70];
69 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 20:54:47 ] >>68 それだと前の配列しか可変になってねえ?
70 名前:デフォルトの名無しさん mailto:sage [2009/05/31(日) 23:21:53 ] >>65 ポインタの配列を使えば可 でも、受け取った関数側でサイズを知る方法が無いから 追加の引数でサイズを渡すとか構造体にまとめてから渡すとかしないとダメぽ struct tag_matrix_t { int width, height; int **data; }; みたいに
71 名前:デフォルトの名無しさん [2009/06/01(月) 11:30:21 ] std::vector<T> vec; std::deque<T> deq; があるとき、中の要素を適当に並べ替える関数を定義したいのですが、オーバーロードを使って、 mysort(std::vector<T> &v); mysort(std::deque<T> &d); とやっていたのですが、イテレータ引数の関数を定義して1つにまとめてしまいたいです。 どうやればいいですか? テンプレートを使って書くのは、結局自分ではイテレータを定義してないというか、 dequeやvectorのテンプレート機能を呼び出しているだけという感じがするのですが。
72 名前:デフォルトの名無しさん [2009/06/01(月) 12:18:40 ] ファイルからの入力の場合、vectorのソートと、setのソートはどっちが速いですか? メモリに一気に格納してソートか、一つずつソートする違いです。
73 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 12:21:20 ] >>72 テストソース書いて実測してみればいいよ。 ファイルの置き場所によって変わる可能性もあるだろうけど メモリに一回あげたほうが早いと思う
74 名前:デフォルトの名無しさん [2009/06/01(月) 12:23:51 ] ありがトン 実測してみます
75 名前:デフォルトの名無しさん [2009/06/01(月) 13:20:15 ] 最小2乗法によるm次の多項式近似を行うプログラムを教えてください 教えて xがー2の時yが3.02 −1の時0.98 0の時1.22 1の時2.16 2の時2.61 の時のです 出来ればソース全文書いてください
76 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 13:23:04 ] いいえ
77 名前:デフォルトの名無しさん [2009/06/01(月) 14:33:33 ] VS2008でC++でコンソールプログラムを書いてます。 std::cout << "" << std::endl; とかで出力を出しているのですが、それをテキストファイルに書き込みたいのですが、 プログラム内でファイルを開いてそこに書き込んで、、、渡河やらないと駄目でしょうか?
78 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 14:38:39 ] > でリダイレクトすれば標準出力をファイルに落とせる
79 名前:デフォルトの名無しさん [2009/06/01(月) 15:54:04 ] Windows & C++の質問です。 例えばCのqsort()関数のように、中身を直接弄らなくても、 ユーザが処理の一部を書けるようにする……という手法がありますよね。 とあるフレームワーク(ライブラリ群)を作成するにあたり、 エントリポイント(main関数)を隠蔽した状態で、一部の処理をユーザに記述させるにはどうやるのがスマートでしょうか? 現在こちらが想定しているイメージとしては、フレームワーク開発側が以下のようなコードを書いておき、 その中の setting.init() をユーザに用意してもらう……といった感じです。 int main ( 〜 ) { Setting setting; //適当なシングルトンクラス setting.init ( ); //ユーザが記述する初期化処理 /*メイン処理*/ return 0; } Setting::init()は、中身が空っぽでも大丈夫とします。 その際、もし可能であれば、わざわざユーザがinit()部分を書かなくても良いようにしたいなあと考えています。 Settingクラスには、init()以外のメンバ関数があり、それらはユーザがタッチしなくてもよい部分です。 そのため、それらはフレームワークの中に隠蔽しなければなりません。 ですが、そのままやると、1つのクラスがフレームワークの内外に散ってしまうので、なんとなく気持ち悪いです。 継承や関数ポインタも考えましたが、main()内を弄らずに指定する方法が分かりません。 また、DLLを用意して読み込む方法はナシとします。
80 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 19:33:03 ] Cの初心者本でオススメってなんかない? 基本情報の午後にむけて勉強したいもんで
81 名前:デフォルトの名無しさん [2009/06/01(月) 19:54:20 ] VC++ 2008 にて、コントロールのサブクラス化を行っているのですが、 ボタンのクリックイベントで詰まりました。 ウィンドウプロシージャ内で、 マウスの左ボタンクリックのイベントを拾いたいのですが、 WM_LBUTTONDOWN、WM_LBUTTONUP や ダブルクリックの WM_LBUTTONDBLCLK はあるものの、 シングルクリック(マウスを押して離す)の定義が見つかりませんでした。 WM_COMMAND だと親コントロール依存になってしまうので避けたいです。 .NETクラスライブラリの Control.WndProc を覗いてみると、 WM_LBUTTONDOWN の際に、押された事を示すフラグを内部的に立て、 フラグが立っている状態(そのコントロール外でマウスボタンを離さない)で、 WM_LBUTTONUP が来たら クリックイベント発動。 という、けっこう面倒な処理をしていました。 どうしようもなければ、.NETと同じようなコードにしようと思うのですが、 もっと簡単な実装などありますでしょうか? よろしくお願い致します。
82 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 20:30:23 ] >>81 多分無い ボタンに対して マウスLB押下 そのまま ドラッグしていって ボタンの範囲外に抜けた後に マウスLB開放 した場合とかを考え出すとね…
83 名前:デフォルトの名無しさん [2009/06/01(月) 20:48:19 ] メモリマップ度ファイル便利と思って多用していたが、 巨大なファイルのシーケンシャルリードするとメモリ解放しないままで 次々に読むから不安定になるな。
84 名前:83 [2009/06/01(月) 20:51:35 ] 自分の予定では、次に読むだろうところだけ先読みして あとは開放しているもんだと思っていた。 しかしためられるだけためてた。
85 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:07:33 ] >>82 ありがとうございます。やっぱ厳しそうですね。。。 .NETのクラスライブラリを参考に作ることにします。
86 名前:デフォルトの名無しさん [2009/06/01(月) 21:13:30 ] >>83 ,84 もしよかったら、どういうシチュエーションで便利に使ってたか教えてよ。
87 名前:83 [2009/06/01(月) 21:28:40 ] メモリにロードせずに、そのまま操作できるところ。 ケースによっては、自前でバッファを管理して入出力するより高速に動く。 OSやディスクのキャッシュが適切に効いた場合、入出力バッファ処理を気にする必要がなくなる。
88 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:45:44 ] >71 template<typename RandomAccessIterator> void mysort(RandomAccessIterator first, RandomAccessIterator last); の何が不満なの? 他人が書いた Iterator を使って望みの事ができるならわざわざ自分で書く必要ないだろ? そもそもコンテナ用の Iterator 書くならコンテナの実装を知ってる方がいいわけで、 その意味でも自分で書く必要がない。 >84 物理メモリ上に載ったままって話?
89 名前:デフォルトの名無しさん [2009/06/01(月) 21:49:42 ] 物理メモリにはのったままではないけど、ギリギリまで使い切ってる。 あとは仮想メモリに入っているよう。この仮想メモリはOSのものとは別物の気がする。 メモリマップドファイルすると、した分は仮想メモリとしてOSは認識しているようにおもう。
90 名前:デフォルトの名無しさん [2009/06/01(月) 21:53:09 ] 予想では、次々に同一ファイルのロードが起こると、 OSは大事なファイルと認識しメモリに蓄えておこうとするのだと思う。 もっとも最近に参照されたファイルが優先されて、そのファイルだけが残ると思う。
91 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 21:57:14 ] >>90 OSじゃなくメモリマップドファイルを実現してるクラスとかがメモリを確保してるだけでしょ windowsだと確か設定を変えなければ一つのアプリが最大使えるメモリって 2GBだっけ? そのくらい物理メモリ詰んでなければそりゃ使い続ければいずれ物理メモリを超えるので スワップ発生するだろうし
92 名前:デフォルトの名無しさん [2009/06/01(月) 22:21:16 ] メモリマップドファイルは、windowsが用意している関数でそのメモリ使用量を自前で制御できない。 まったくメモリにキャッシュしないようにするオプションはあるけど。 OSの制御にあって、使用中は全く手出しできない。
93 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:44:39 ] WindowsXP VisualC++2008EEです。 クラスの中のメンバクラスに関する質問です。 ---------------------------- class ClassA{ ClassA( int a, int b ) { }; //コンストラクタ ^ClassA( void ) { }; //デストラクタ }; ---------------------------- 上記のように引数付きのコンストラクタを持つクラスがあるとき ---------------------------- class ClassB{ private: ClassA mClassA( 1, 2 ); }; ---------------------------- といった形で、メンバクラスを宣言しようとすると、 「error C2059: 構文エラー : '定数'」 といったエラーが出てきてしまいます。 引数付きのコンストラクタがあるクラスをメンバとして持つには、 どのようにすればよいのでしょうか?
94 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:47:20 ] >>92 そういう作りなのか まあ気に入らなければ自分で作ればいいだけだしな。
95 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 22:53:25 ] >>93 class ClassB { ClassA mClassA; ClassB() : mClassA( 1, 2 ) {} }; classB のコンストラクタで メンバの初期化
96 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:24:42 ] funini.com/kei/mmap/mmap_api.shtml
97 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:24:43 ] >>79 Settingクラス(フレームワーク提供)を継承したクラスをユーザが定義し、 そのファクトリ関数もユーザが定義するようにすればできない? Setting::init()は空の仮想関数。 ファクトリ関数はグローバルで、関数名とプロトタイプはフレームワーク仕様により規定。
98 名前:デフォルトの名無しさん [2009/06/01(月) 23:42:28 ] jpgファイルをWindowsのアプリから表示したい時、boost::gilを使ってる人いますか? 使う言語はC++なのですが(Win32APIは出来る限り使ってません)、 WindowsのAPI使った方がいいのか、わざわざboost::gil使う意味あるのか。
99 名前:79 mailto:sage [2009/06/01(月) 23:42:39 ] >97 ありがとう。 ファクトリ関数が何なのか調べるところから始めてみる。 ……要は、継承先のクラスを指定する部分だけを フレームワークの外に出してしまえばいいんじゃね?ってこと?
100 名前:デフォルトの名無しさん mailto:sage [2009/06/01(月) 23:44:49 ] >>95 ありがとうございます! 動きました・・・・が、見たこと無い形なので、なぜ動いたかが分からない・・・。 「コンストラクタ初期化子」というのがあるそうですね。 そういうものだと割り切って覚えるのが早いでしょうか。
101 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:02:16 ] コンストラクタの初期化リストは大事だから 知らなかったならちゃんと勉強し直した方がいい
102 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:07:25 ] 初期化リスト使えないとconstなメンバを初期化できないから注意な
103 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:10:43 ] コンストラクタの後ろにコロンで繋げて 初期値を指定するのって、地味にめんどい
104 名前:砂ぐま [2009/06/02(火) 00:28:02 ] 教えてください。 [1]C++ [2]締切:6/3 [3]問題文 以下の問題はprintf scanfを用いらず、cin coutを使用しなさい @2つの4行4列の行列が与えられたとき、 その積を計算するプログラムをwhileループとインクリメント演算子を用いて作成しなさい。 (※ヒント whileループは行列をキーボードから入力するためにも用いる) A3項演算子として __ ? __ : __ が存在する。この演算子を用いて次のプログラムを作成しなさい。 (1)変数a,bをキーボードから入力し、小さいほうを出力するプログラム (2)変数a,b,cをキーボードから入力し、最小値を出力するプログラム Bwhileループと複合代入演算子を用いて、等差数列 1+3+5+7+・・・・・・+9999を計算するプログラムを作成しなさい。 CBのプログラムを実行した結果はいくらになるか? D型変換として、算術演算子のオペランドの一つがdoubleで、片方がintであれば、 int型のオペランドはdouble型に変換されて、計算される。 下記は例である。 int a; float b; a=(int)b また、下記のようにすると、 int a=5,b=3; float c,d; c=a/b; d=a/(float)b で値が異なる。 この値が異なることをプログラムを組むことによって確かめなさい。
105 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:29:27 ] >>101 まだまだ勉強中の身なのです。 >>102 なるほど! 確かにconst指定したメンバが コンストラクタで初期化できないから、 どうするんだ?、と悩んでたことがありました。 >>103 そうですね。自分も30個くらいメンバが必要なので 同じことを考えていました。
106 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 00:45:58 ] >>104 具体的に何が分からないのか答えなさい。(5点)
107 名前:砂ぐま [2009/06/02(火) 01:20:43 ] >>106 解答をお願いします。
108 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 01:24:20 ] >>107 宿題スレへ行くほうがいい。
109 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 02:12:17 ] >>108 宿題スレとマルチしてるんだけどな
110 名前:デフォルトの名無しさん [2009/06/02(火) 03:57:02 ] boost::gilの使い心地の方もお願いしま〜す。
111 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 04:06:56 ] >110 こっちは? pc12.2ch.net/test/read.cgi/tech/1232367742/
112 名前:デフォルトの名無しさん [2009/06/02(火) 05:41:26 ] int i =100; float* pf = (float*) &i pf = pf * 2 このコーディング、どこだダメなんでしょうか
113 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 05:47:46 ] >>112 intとfloatの内部表現が一致している保証はどこにもないから それとポインタに対する演算はアドレスを取る事と定数を足す引く しか認められていないからポインタを2倍するとか全く無意味
114 名前:デフォルトの名無しさん [2009/06/02(火) 05:53:16 ] ありがとうございます。 内部表現が一致するとは、具体的にどういうことでしょうか? これであればアドレスの中身(100?)を2倍することになるのでしょうか *pf = *pf * 2
115 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 05:57:52 ] >114 内部表現が一致するとはiと*pfの値が等しい時に常にiと*pfのビット列 が等しい事が保証されている事を意味する しかし実際には大部分の計算機では浮動小数点はIEEE754、整数は 2の補数表現を取っている事が大部分で内部表現にお互いの互換性 はない >*pf = *pf * 2; *pfが元々floatの変数のアドレスを取っている時はその通り 今のように元々intの変数のアドレスを取ってそれを2倍したら浮動小数点例外 が起きるかもしれない
116 名前:デフォルトの名無しさん [2009/06/02(火) 06:36:32 ] 高精度の文字エンコード判定・自動変換ライブラリ で一番いいのはなんでしょうか?
117 名前:デフォルトの名無しさん [2009/06/02(火) 06:43:49 ] 秀丸とかEmとかは判定どうやっているのかわかりませんか? (世界各国で通用するのは)モジラかIEくらいしかしりません。 エディタの作者は自分で作っているんですか?
118 名前:デフォルトの名無しさん [2009/06/02(火) 07:06:57 ] ありがとうございます。
119 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 09:59:01 ] >>117 ちょっと文字コード調べればわかると思うけど、 それぞれの文字コードで仮定して矛盾が生じたら違うと判断すればいいんだよ。 どこまで調べるか、どうやって調べるかはそのアプリの性質で決めたらいい。 判定不能な場合どうするかもね
120 名前:デフォルトの名無しさん [2009/06/02(火) 10:07:44 ] 理屈はわかりますが、実際にやると大変です。 これはエディタの本体(GUI)を作るほど手間がかかりそうです。 世界各国語に対応させる場合。
121 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 10:11:05 ] >>120 文字コード扱うプログラマとしては常識の範囲ですが・・・ テキストごときでwwwとかいうゆとり多いけどテキストほど面倒な物は無い。 文字コードを限定すればなんとかなるけど
122 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 10:17:18 ] たかがテキストごときで
123 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 11:24:03 ] 文字コードの自動判別は不可能なんだから実装する必要なし ユーザに選択させればいいだけ ブラウザはhttpヘッダのcharsetで判定してるだけだろ
124 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 12:53:00 ] ICUライブラリを使う(キリッ
125 名前:デフォルトの名無しさん [2009/06/02(火) 13:12:49 ] 判別、自動変換はできるのですか
126 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 13:29:39 ] とりあえず入力コードと出力コードを指定して一発で変換することはできるし、 CharsetDetectorっていう判別専用のクラスもある 世界中の業務用アプリで使われている実績もあるしライセンスも緩くて使い勝手もいい 問題は添付するdll(so)が糞大きいことだけ
127 名前:デフォルトの名無しさん [2009/06/02(火) 13:43:37 ] トンクス
128 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 16:55:47 ] float の NAN ってどういう値なんですか?
129 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 16:59:46 ] ttp://ja.wikipedia.org/wiki/NaN
130 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 17:03:22 ] ありがとうございます
131 名前:デフォルトの名無しさん [2009/06/02(火) 20:50:15 ] 質問です。 CLSはクラスで、int charなどの変数で構成されます。 CLSの変数と同じ順番で記録されているファイルがあり これを vector< CLS > x; にロードしたいのですが Read( &x[0] ) のようにしてもうまくいきません。 データが壊れています。 一括でロードする方法はありませんか?
132 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 20:54:22 ] ないと思うべき。 順番が同じでも、アラインメントが入ってどうせファイル上のデータの並びと同じではないだろう。
133 名前:131 [2009/06/02(火) 20:54:25 ] vectorのソートを使いたいんです。 構造体に読み込めば出来そうですが それをvectorにコピーしたらいいでしょうか? 無駄なことをしている気がしますが。
134 名前:131 [2009/06/02(火) 20:56:51 ] サンクス 一度にロードして、vectorに正しく挿入することにします。
135 名前:デフォルトの名無しさん [2009/06/02(火) 21:01:25 ] すみません。 変更して構造体に入れてqsortにします。
136 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:01:34 ] int a = 10; この変数aを関数の引数として渡す場合、 void FuncA(const int n){ int test = n; } void FuncB(const int& n){ int test = n; } の関数があるとして FuncA( a ); FuncB( a ); 結果としては2つとも各ローカルのtestに10が入りますが後者(FuncB)はなぜこれで大丈夫なのでしょうか。 aのアドレスをFuncBに渡している…となると Func( &a ); でないとエラーが出そうなのに・・。 むしろ後者は前者とどういう処理の違いがあるのか気になります。
137 名前:デフォルトの名無しさん mailto:sage [2009/06/02(火) 23:06:04 ] >>136 参照≠ポインタ
138 名前:デフォルトの名無しさん [2009/06/03(水) 00:50:33 ] 時々このスレで質問させてもらってる者です。 大体何ターンくらいで終わるのか調べてみようと思って UNOのゲームを書いてみたのですが、どなたか新しい戦略を書いてくれませんでしょうか? ttp://kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/9331.zip ルールは、 (1)Draw2とかDraw4はSkip飛ばしできません。 (2)最後にワイルドカードを出してあがれません。 あとは普通のルールと思います
139 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 01:21:43 ] >>136 いちいち&aと書かずに済むポインタだと思っても3割くらい当たっていると思ってもいい。
140 名前:デフォルトの名無しさん [2009/06/03(水) 01:22:26 ] Player.cppの中の bool Player::SelectCard(const Card ¤t, int DrawObligation, Card *playcard) という関数を書き換えれば新しい戦略が書けます。 この関数は前のプレイヤが出したカードがcurrent、何枚か引かないと駄目な状態になって る場合には、DrawObligationが2以上になってます。出すべきカードが見つかればtrueを 返して、*playcardに出すべきカードを入れます。 以上です。失礼しました。
141 名前:デフォルトの名無しさん [2009/06/03(水) 07:55:24 ] hashmapは存在してますが、hashsetは効いたことがありません。 stlのsetは効率がいいので開発されてないんでしょうか?
142 名前:131 [2009/06/03(水) 10:28:10 ] 構造体になんとかしてロードしたかったのですが、これも値がずれてしまいました。 値がずれずに一括でロード出来る方法はないんでしょうか? 一括で読み込んで、クラスや構造体に格納していくしかありませんか。
143 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 10:31:22 ] >>142 そもそも保存するときにズレてるんじゃない? パディングとかオープンモードとかあるから
144 名前:131 [2009/06/03(水) 10:35:05 ] アライメントに注意してデータ作成時に隙間を作っておく必要があるんですね。 自己解決しました。
145 名前:デフォルトの名無しさん [2009/06/03(水) 11:01:21 ] 隙間を作る (構造体、クラスをそのまま出力する) 方法で一括ロードできました。 ありがとうございます。
146 名前:デフォルトの名無しさん [2009/06/03(水) 17:50:27 ] C言語の学習を始めたばかりですが、 char型配列の要素を、int型の数値に出来なく困っています。 (Borland C++ 5.5.1 for Win32) char s[3],a; scanf("%s",&s); の時、*6 と入力すると s[0] → * s[1] → 文字としての 6 s[2] → \0 となっていると思うのですが、s[1]の6を数値として 取り出すにはどうすればよいのでしょうか? 以下やってうまくいかなかった事です。 1)printf("int=%d\n",(int)s[1]);→int=54 2)a = s[1]; printf("int=%d\n",(int)a);→int=54 3)printf("int=%d\n",atoi(s[1])); 4)printf("int=%d\n",atoi(a)); 3,4ともに「パラメータ '__s' は const signed char * 型とし て定義されているので int は渡せない(関数 main )」とエラー。 悩んでしまってここから全く前に進めなくて弱っています。 ご存知の方ご教示ください。よろしくお願いします。
147 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:52:16 ] >>146 文字としての6ならatoi関数
148 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 17:53:18 ] 途中になった printf("int=%d\n",atoi((int)s[1])); としてキャストしないと
149 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:25:17 ] >>141 あるよ。DinkumwareとかSGIとかは、hash_mapと共にhash_setも作っている。 そして、unordered_mapとunordered_setという名前でC++標準にも入るし、VCやg++でももう使える。
150 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 18:51:43 ] >>146 どんな教科書使って勉強してる? C言語はBASICみたいに文字列をひとまとまりの変数として扱えないし 数値との相互変換も簡単にはできないので、 一通り教科書を読み終わってから そういう(Cの初心者には)むつかしいことにはチャレンジしたほうがいいよ。
151 名前:146 mailto:sage [2009/06/03(水) 20:09:49 ] >>147-148 早速のレスありがとうございます。 >>150 雑誌の初心者向けの連載を参考にしています。 サンプルを改造しようとしても型変換のようなところで躓いてしまいます。 仰る様にいくら考えても分からない部分は後回しにして進めてみたいと思います。 >>147-148 文末のコードでコンパイルしてみましたが、 エラー E2342 パラメータ '__s' は const signed char * 型と して定義されているので int は渡せない(関数 main ) と出てしまいました。 本当に学びはじめなので、考えられない間違いがあるかもしれません…。 ご指摘いただければ助かります。よろしくお願いします。 #include <stdio.h> #include <stdlib.h> int main() { char s[3]; scanf("%s",&s); printf("int=%d\n",atoi((int)s[1])); return 0; }
152 名前:デフォルトの名無しさん mailto:sage [2009/06/03(水) 20:14:11 ] >>147-148 馬鹿はわざわざ書き込まなくてもいいのですよ。 >>151 取り敢えず、printf("%d\n", atoi(& s[1]))とでもして味噌。
153 名前:146 mailto:sage [2009/06/03(水) 20:45:12 ] >>152 ありがとうございました!できました。 エラーの意味が少し分かった気がしました(これから勉強します)。 >>147-148 即レス感謝しております。色々とキッカケになりました。 ありがとうございました。
154 名前:デフォルトの名無しさん [2009/06/03(水) 23:02:04 ] marupeke296.com/GameMain.html
155 名前:デフォルトの名無しさん [2009/06/04(木) 01:41:16 ] www.setsunan.ac.jp/~center/kyositu/freec/dl2008.html このページを参考にコンパイラをインストールしました。 このページの最後にある、使い方を見るってやつのことで質問なのですが、 僕のbcc32は奥の方にあって(C:\Borland\...)、最終的にbcc32があるところにたどりつくのですが、 ここでしかコンパイラできないじゃないですか? それが面倒なのでどうにか簡単にできないかってことと、 bcc32があるディレクトリの中には他にもいろんなプログラムがあるんですが、作成したCファイルも 同じところに保存しないとコンパイル&実行できないですよね? つまりこのディレクトリの中がいろんな形式のファイルがあってめちゃくちゃ汚くなっちゃうわけです。。 これってなんとかキレイにまとめる方法ってあるでしょうか? もしあるなら、申し訳ありませんが教えてください(>_<)
156 名前:155 [2009/06/04(木) 01:46:27 ] すみません補足です。。 一部コンパイラ→コンパイルですね ↑のは自分で見なおしてみるとちょっと日本語がアレなので簡潔に質問しますと、 1.cdの回数を最小限にする方法(bcc32を含むディレクトリをC:の直下に持ってきていいのでしょうか?) 2.CファイルはCファイルだけでどこかにまとめて、そのうえでコンパイル&実行はできるのか ということです。 よろしくお願いします。。
157 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 02:27:13 ] 使い方を見るじゃなくて、先に >インストール(WindowsVista)に進む >インストール(WindowsXP,2000)に進む >インストール(Windows98,95)に進む のどれかを見ろ。 環境変数を設定する解説がある。 それを設定すれば、どこからでもbcc32が呼び出せるようになる。 あとは好きなところにディレクトリを作って、その中でコンパイルすればいい。
158 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 02:29:08 ] そこの説明どおりにやればどこでもコンパイルできるはずだけど?
159 名前:156 [2009/06/04(木) 11:46:59 ] >>157 ,158 ありがとうございます。 OSはVistaで、ここに書いてある通り環境変数も設定したつもりなのですが できないんです。。 ;c:\borland\bcc55\bin ですよね? これだとここで指定したディレクトリじゃないとできないってことでしょうか? ローカルディスク(C)の中ならどこでもコンパイルできるようにするには、設定を c:\ にすればいいということでしょうか?
160 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 11:52:18 ] >>159 コマンドラインで、path と打って出てくる文字列に c:\borland\bcc55\bin はあるか? ちなみにシステム変数の設定をしたあとで開いたコマンドプロンプトじゃないと 有効じゃないぞ
161 名前:デフォルトの名無しさん [2009/06/04(木) 12:06:53 ] >>160 コマンドプロンプトでpathを打つとちゃんと出てきます。 それで、確認用ファイルを c:\Emacs\C\test.c という風に作ったディレクトリに保存して、Cディレクトリ内で c:\Emacs\C\>bcc32 test.c というようにコマンドしても操作可能なプログラムとして… というメッセージが返ってきます。。。
162 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 12:28:01 ] bcc32 test.c これを、 c:\borland\bcc55\bin\bcc32 test.c と打つとどうなるよ。
163 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 12:29:09 ] あと環境変数の最後に書いてある? 最初と最後以外は ; で区切ってないと前後とくっつくぞ
164 名前:デフォルトの名無しさん [2009/06/04(木) 13:16:59 ] WindowsでWinSockのプログラムを書くとき、C++ではなくCを使うのでしょうか? どうしてもC++で書きたかったら、 struct sockaddr_in とかそういうのは、上手く自作のクラスにまとめてしまえばいいのでしょうか?
165 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 13:25:45 ] 別にC++でもstruct sockaddr_in とかそういうのは書けるだろ
166 名前:デフォルトの名無しさん [2009/06/04(木) 13:38:12 ] でもネットワーク関係の例題プログラムを見てると、参照は使わないし、クラスもなし、マクロ使いまくり、 とかそういう感じのプログラムばかりだったので、みんなそんな感じなのかなと。
167 名前:デフォルトの名無しさん [2009/06/04(木) 14:03:34 ] >>162 そうコマンドすればコンパイルできます。 ただし、"コマンド'ilink32.exe'を実行できない"とエラーが出ます。 やはりbinディレクトリの中でやりくりするしかないのでしょうか? >>163 そこは大丈夫です。ちゃんと; ;で挟んであります。
168 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 14:07:11 ] >>167 リンカがパス通ってないからな。 それでコンパイルできるなら、PATHがおかしいんだよ。 どこかタイプミスがあるはず。その部分コピペして貼り付けてみ。 コマンドプロンプトのコピーのしかたはわかるよな?
169 名前:デフォルトの名無しさん [2009/06/04(木) 14:30:41 ] >>168 %SystemRoot%\system32;%SystemRoot%;%SystemRoot%\System32\Wbem;C:\usr\local\bin;D:\MinGW\bin;c\borland\bcc55\bin;C:\Program Files\QuickTime\QTSystem\ これがパスの設定です。これのことですか? コマンドプロンプトのコピーの仕方はわかりませんが(笑)、 ちょっと打ってからTabで出してるのでタイプミスはないと思います。。
170 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 14:33:55 ] >>169 >c\borland\bcc55\bin コロンが抜けてる c:\borland\bcc55\bin で
171 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 14:37:58 ] このすれ優しい人が多いね。 感動した!
172 名前:169 [2009/06/04(木) 15:36:42 ] >>170 おぉ!!できました! 親切にありがとうございます!! 171じゃないですが、本当に優しい人が多くて助かりました! あと、ついでと言ってはなんですがコマンドプロンプトについて質問です。 コマンドプロンプトを開いたときの最初の位置が C:\Users\kei になってます。(keiは僕の名前です) 開いたとき一番最初は C:\ になってると一番都合がいいのですが、そのように設定できますか? プロパティとかいろんなトコからやろうとしても見当たらないので…。
173 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:39:15 ] \usr\local\bin 何に使うんだろう
174 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 15:39:16 ] ショートカット作っとけばいいべ。 プログラムはcmdで、作業フォルダはC:|
175 名前:174 mailto:sage [2009/06/04(木) 15:40:16 ] C:\だった、、、シフト押しっぱなしだった
176 名前:デフォルトの名無しさん [2009/06/04(木) 16:21:59 ] 作業フォルダの設定はどうするんですか? どう開いても変なディレクトリから入っちゃいます。。 cd ../../ を毎回やるのは億劫なので。。。
177 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:37:32 ] 右クリックでプロパティ出せばいいだろう。 cd \ でいいじゃない
178 名前:デフォルトの名無しさん mailto:sage [2009/06/04(木) 16:40:04 ] そろそろスレ違いだな
179 名前:デフォルトの名無しさん [2009/06/05(金) 08:08:41 ] クラスをグローバルにしたいんだけど、 extern AClass a; でいいの?
180 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 08:22:59 ] バッチファイル書けば楽にならないか? cd ..\...\ bcc32 %1 とか。
181 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 09:58:57 ] ルートで作業するのは論外。
182 名前:デフォルトの名無しさん [2009/06/05(金) 11:16:18 ] ネットワークのプログラムを書いてると、「Windowsのファイヤーウォールがブロックしました」 みたいなメッセージが最初の動作時に一回だけ出るときがありますが、出ても最初の一回だけで その後は出ません。これってプロパティのどこかにアンブロックしたという記録が残っている のでしょうか?
183 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 17:56:01 ] 板違い
184 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 19:23:36 ] >>182 レジストリのどこかは知らないが、設定の閲覧・変更は コントロールパネルのWindowsファイアウォールのところを見ればいい。
185 名前:デフォルトの名無しさん [2009/06/05(金) 20:44:54 ] >>183-184 ありがとうございます。コントロールパネルに見つかりました。 あともう1つだけ。(板違いといわれそうなのですが…一応C++で書いているので) TCPで複数のコネクションを同時に保持するサーバーを書きたいのですが、サーバ側から みた通信先はどうやって区別すればよいですか?適当にIDとかを割り振ってそこをみるように すればいいんでしょうか? ××のソースをみろとかでもいいです。どうかお願いします。
186 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 20:48:43 ] >>185 ソケットなら接続してきたクライアントの情報を得られる。 ネットワークプログラミング相談室なんてスレがなかったかな?
187 名前:デフォルトの名無しさん [2009/06/05(金) 21:10:01 ] >>186 ありがとうございます。 ということは、accept()で得られたクライアント情報のIPアドレス+ポート番号 の組でクライアントを識別するということですか? >ネットワークプログラミング相談室なんてスレがなかったかな? 次からはそっちで聞いてみます。
188 名前:質問 [2009/06/05(金) 23:03:36 ] VC++2008です textBox1に自由に入力させ、「眼鏡」という文字列が入力された瞬間に メッセージボックスを表示するにはどうしたらいいでしょうか TextChangedイベントの中でif(textBox1->Text=="眼鏡")としたんですが、 前後に文章があるときもメッセージボックスを表示させたいです よろしくお願いします
189 名前:デフォルトの名無しさん mailto:sage [2009/06/05(金) 23:57:40 ] strstr
190 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:25:52 ] VisualC++2008EEです 引数としてクラスのポインタを受け取り、そのポインタにnewでクラスのインスタンスを作る関数は作れますか? また、どのように作るのでしょうか? そうして作ったインスタンスを関数の外でdeleteしたいのです よろしくお願いします
191 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:33:14 ] >>190 void f(int*& rp) { rp = new int; } int main() { int *p; f(p); delete p; }
192 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:45:09 ] キモイ設計だな
193 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 01:51:18 ] メリット皆無だし
194 名前:デフォルトの名無しさん [2009/06/06(土) 03:34:30 ] 普通のメンバ変数を初期化するときって、 コンストラクタの後ろに付加、コンストラクタの中で代入、初期化用メンバ関数を用意してコンストラクタの中で呼び出し ……とかいろいろ考えられると思うけど、使い分けってある? あと、特に理由がない限り、コピーコンストラクタに初期化処理ってしなくても大丈夫よね?
195 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:48:26 ] なるべく初期化リストで全部済ませる 初期化で済む物を代入にするメリットは全くない
196 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:50:05 ] 使い分けというか、言語やプログラムの仕様から制約されるってかんじジャね? const なメンバ変数 => 初期化リストでしか初期化できない。 初期化のために手続きが必要 => 初期化リストでは無理 初期化のタイミングがコンストラクション時以外にもある => じゃ、別関数にしておくか
197 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 03:51:05 ] 意地でも例外を送出したくない場合。
198 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 04:17:00 ] const以外でも初期化リスト結構みんな使ってるのかー。 途中でリセットする場合以外でも、お婆ロードでコンストラクタが複数あるときは 別関数の方が楽そう……かな?
199 名前:デフォルトの名無しさん [2009/06/06(土) 04:53:35 ] Visual C++ eeのWin32APIでやってます。 ユニコードONの状態で wchar_t type[255] = _T("うんこ"); MessageBox(NULL, (PCTSTR)typeid(type).name(), NULL, MB_OK); とすると文字化けしてしまうのですが、なんでですか? 文字列リテラルにLをつけないといけないのと関係あります? うまく表示する方法ってどうやるのですか? まだ始めたばっかだしマルチバイトでやればいいのでしょうけど 気になるので、よかったら教えてください お願いします
200 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 06:47:24 ] >>198 Effective C++は読んだかい? まだなら定額給付金を片手に今すぐ本屋に行くんだ。
201 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 06:48:32 ] typeid(type).name()はLPCTSTRじゃないから MessageBoxA(NULL, typeid(type).name(), NULL, MB_OK)
202 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 06:57:13 ] >200 おや なぜか めのまえの ほんだなに おいてあるぞ!
203 名前:199 [2009/06/06(土) 15:31:21 ] >>201 MessageBoxAとMessageBoxWがあって #ifdef UNICODE #define MessageBox MessageBoxW #else #define MessageBox MessageBoxA #endif // !UNICODE こんなんなってるんですね だからMessageBoxAを強制的に呼び出してやると 氷解しました。ありがとうございます。
204 名前:デフォルトの名無しさん mailto:sage [2009/06/06(土) 17:26:42 ] >>199 TCHAR type[255] = _T("ちんこ"); MessageBox(NULL, type, NULL, MB_OK);
205 名前:デフォルトの名無しさん [2009/06/07(日) 13:03:16 ] dummy
206 名前:デフォルトの名無しさん [2009/06/07(日) 14:01:55 ] int org_i = 1000; void *p = &org_i; int i = *reinterpret_cast<int*>(p); voidへのポインタからINTの値を取り出そうとして上のようにしたのですが、 reinterpret_castの前に*があったりしてなんとなくいやです。 ほかに方法はないでしょうか?
207 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:04:28 ] それが正しい方法だからそれでいい
208 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:05:17 ] voidのポインタをやめる
209 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:50:41 ] こんなテンプレートを用意して template <class T> T pointer_value(const void* p) { return *static_cast<const T*>(p); } こうする int i = pointer_value<int>(p);
210 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 14:56:13 ] テンプレートは分からないので禁止
211 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 17:15:04 ] >>210 お前が勉強しろ
212 名前:デフォルトの名無しさん [2009/06/07(日) 18:35:31 ] テンプレートはわからないので禁止
213 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:46:18 ] ポインタはわからないので禁止
214 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 18:56:05 ] C++はわからないので禁止
215 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:20:16 ] クラスAがクラスBに所持されてる関係になってるとして インスタンスAがB1に参照されてる状態から B2がインスタンスAを参照したらB1からAの参照が切れる 常にAが1個のBから参照されるような関係を作るにはどうしたら良いでしょうか?
216 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:37:11 ] 所有を譲渡するメソッドをBに作る
217 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 20:04:47 ] 逆にAがBを参照するように変更できないか検討する
218 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 23:29:49 ] >>216 B同士で所有の移動をするメソッドを、ということでしょうか? >>217 BがAに更新通知してAがBの値を読みに行くので Aへの更新通知を別の方法で実現できればそれでもいいのですが・・
219 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:37:33 ] Aを触れないし値も引き出せない状態になったB1・B2の挙動をどうするつもりかに因るな
220 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:38:58 ] AからBにコールバックでも登録させればいいんでない。
221 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 00:41:57 ] AがB1に参照されたり、B2に参照されたりってのを決めるのはだれだ?
222 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 01:43:02 ] > BがAに更新通知してAがBの値を読みに行くので Aに"今からお前の相手するBインスタンスはわしじゃ"通知メソッドを作れば? その際に元彼Bに"もう私のことは放っておいて"通知メソッドをAから呼んでもらう
223 名前:デフォルトの名無しさん [2009/06/08(月) 11:43:40 ] C++では、戻り値だけが違う関数は同じものとされますが、 戻り値だけが違う関数を複数作りたい場合どうするべきでしょうか? class C1; class C2; というのがあって、 C1 create(); C2 create(); という感じにやりたいときです。 お願いします。
224 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:11:13 ] >>223 無理です。だいたい呼び出せません。 名前空間を使いましょう。
225 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:17:56 ] ファイルの開け方、閉じ方はわかったのですが読み取って処理するところがよくわかりません ,で区切られて1行に並んでるファイル内の行列から数値を配列に入れる方法を教えてください!
226 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:23:49 ] やりかたはいろいろありすぎて、、、 とりあえず手始めに、fgets()とsscanf()使ってみるのはどうか? まあ配列に入れるならループで回してstrtokとatoi使う手もあるけど、 最後はstrtok+atoiみたいな関数を自分で作るのがいいかもね。
227 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:24:30 ] 今回初めてマルチスレッドな処理を行う必要があるのですが 注意点、スレッドセーフな処理にするための方法などを詳しく扱った書籍やサイトはないでしょうか?
228 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:25:39 ] >>226 ありがとうございます ,の除き方を詳しく教えてください
229 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:26:37 ] >>228 csvデータの読み込みでぐぐった方がいいかも
230 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:27:37 ] >>228 sscanf()もstrtok()も , の処理はやってくれるだろ。 自前でやるならstrchr()で場所調べて切り出していけばいいと思うよ。
231 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:32:12 ] そうなんですが 全然知りませんでした ありがとうございました
232 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:05:22 ] >>223 dmyC{}; class C1{C1 operator=(dmyC&){*this=createC1();return *this;}}; class C2{C2 operator=(dmyC&){*this=createC2();return *this;}}; dmyC create(){return dmyC();} C1 C1create(){〜return c1;} C2 C2create(){〜return c2;} なんのメリットがあるか知らんが使用側で偽多態受けなら出来ん事はない 前参照やスコープは適当に修正要
233 名前:デフォルトの名無しさん [2009/06/08(月) 14:14:40 ] C99より前の規格では、nanやinfを検出することってできないのでしょうか?
234 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:19:51 ] 修正 dmyC で弄った方が潰しが利くね dmyC{operator C1(){〜return c1;}operator C2(){〜return c2;}};
235 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 14:50:49 ] floatで数字をいろいろ処理して,でつないでcharに直してfputsで書き出したいんですけど方法を教えてください!
236 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 15:39:06 ] fscantfとかsscanfとかそういうことか わかったぽ
237 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:01:54 ] .netはC++では扱えないんですか
238 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:06:26 ] はい
239 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:10:15 ] C#でしかやれないということですか? GUIアプリを楽につくりたいならC#ですかね?
240 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:11:14 ] その通り!
241 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 19:18:42 ] テンプレートの話は禁止だって言ってんだろ
242 名前:デフォルトの名無しさん [2009/06/09(火) 01:07:44 ] int array[x][y]; があるとき、 array[10] == &array[10][0] でしょうか?
243 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:14:00 ] よく考えたら分かると思うが頭痛が悪くなるようなコードは書くな
244 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:14:19 ] 配列は分からないので禁止
245 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:17:52 ] >>242 気になるならポインタがさしてるアドレスを比べてみなよ
246 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:20:47 ] >>245 型は配列なので注意が必要、多分等しいだとは思うんだが。(両方とも配列) 配列はポインタに自動変換だが、逆はそうではない、やっぱ頭痛い。
247 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:23:22 ] ああ違う、右はポインタ、左は配列、そして左が自動変換だ うぜぇぇ
248 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:24:56 ] int a[10]; は、int10個の配列aで分かりやすいのに。 int a[10][20]; は、int10この配列が20個、ではないところがややこしい。
249 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:26:48 ] >>248 Cの規則ですから int func()[10] { return 配列; } おらよ、これでも喰らえってなもんだ
250 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:26:53 ] ポインタ本を読むと出てくる(K&Rでもかかれてる)けど 配列や関数の型は、外側からはがしていく感じで解釈するんだよね。
251 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:49:26 ] >>249 関数は配列を返せない
252 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:53:52 ] >>251 ANSIでは使えない事になっているが、返せる処理系もっあってだな、 アホな開発者がそれを返している糞ライブラリがあるんだ どこのかって?S○Eとか○CEとかSC○とか、まあそんなところ、死ねます。
253 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 01:56:17 ] >>251 ポインターは返せるからできなくはないんじゃね? ただサイズの問題とかあるけど
254 名前:デフォルトの名無しさん [2009/06/09(火) 02:27:31 ] CのコードをC++に書き直してます。 Cのコードの中に大量の構造体を使ってるところがあって、malloc()でメモリを 取らずに、自分でメモリプールを管理する割り当て関数を使ってます。これを生かすため placement_new()というのを使おうと思っているのですが、この場合delete()が使えない (使う必要がない)と聞いたのですが、placement_new()の使い心地はどうでしょうか? 使いやすいですか?
255 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 03:16:28 ] 構造体に配列突っ込めば、ポインタじゃなくても直接返せるよ! よ!
256 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 03:24:55 ] >>254 使う必要がない、ではなく使えないだな。 www.fides.dti.ne.jp/~oka-t/cpplab-placement-new-2.html placement newの文字通り引数を取る形式new(hoge) Tにたいして、delete(hoge) pという構文がないという話。 メモリ確保処理を自前でやるとしたら、 クラス・構造体にnew/deleteなどを定義するか、 アロケータクラスを作って、確保解放はvectorとかに任せる という形態のほうが多いと思う。ほかの人はどう考えているか分からないけど。
257 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 04:13:45 ] placement newを使いにくいとは思わないけど、むやみに使うものでもない。 >>256 の言うように、クラス・構造体にnew/deleteを定義するとか アロケータとコンテナを組み合わせるのがいいと思う。
258 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:16:07 ] c++で複数のクラスからの継承ってできますか? たとえば 数値Aと class NoA{ //ここに関数A } class NoB{ //ここに関数B } ここでNoAもNoBも引き継いだclass NoC (NoC.関数AとNoC.関数Bの両方ができ) みたいなことってできるの?
259 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 05:18:52 ] >>258 www.geocities.jp/ky_webid/cpp/language/033.html
260 名前:デフォルトの名無しさん [2009/06/09(火) 09:41:04 ] C++に動的にクラスを生成する方法がないって本当ですか? 文字列としてクラス名があったとして、それでオブジェクトを作ることができないって読んだんですけど。 自由度高そうなのに。 ごにょごにょしてやる方法あります?
261 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:46:39 ] >>260 Smalltalkみたいな使い物にならないインタープリタと一緒にすんな
262 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:50:30 ] >>260 こういう話か? std::map<std::string, boost::shared_ptr>
263 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 09:56:44 ] インタプリタ村の村民らしい要望だな だな
264 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:05:56 ] クラスの動的生成ではないがC++にリフレクション機能は あってもよかったと思う
265 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:18:47 ] オーバーヘッドが好きな奴が多いな。
266 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:36:38 ] >>260 やろうと思えばなんだってできるよ、コンパイラ呼び出しDLLにコンパイル、出来上がったDLL動的にリンク、そして呼び出す。 面倒くさくてやらないけど。
267 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 10:40:41 ] .NETを見ていると、標準ライブラリにコンパイラコレクションが入っていると便利なのだがと思う事はあるな・・・ ターゲットの環境にコンパイラをインストールなんて余りやりたくないからね
268 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:40:29 ] fscanfの引数の場合分けがうまくいかないんだけどどうして? 引数がfloatとcharで20こあって"%d%f・・・・・",hairetu,&suuji・・・・とあるんだけど返り値=1にした時しかうまくいかない switchにしてcase20はおkだけどcase 2とかdefaultにはcaseが正しくありませんってなる
269 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:44:10 ] >>268 C言語でおk
270 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:47:18 ] swichの方はswith{}←のカッコを忘れてただけでした
271 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 11:51:27 ] fscanfの感じがわからん fscanfした時点で一行バッファに入ってそこから指定した型の順で前から取っていく感じでしょ? 3つ目で型が合わないことがわかったらどうなるの?
272 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:42:01 ] >>271 行は関係ないよ 合う型を探して改行関係なしにファイルの最後まで行ったら終わり 3個目が見つからなかったら戻り値で2を返すだけ
273 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 12:59:17 ] サンクス 行関係無いのか どっかのページ1行読み込むって書いてあったのに
274 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 13:25:48 ] scanfのほうの使用を思い出すんだ
275 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:29:48 ] caseってcase(1||2||3||4):って使えますか? なんか使ってないのに違う行のcaseの所でcaseの値"1"は既に使用されていますって出るんだけど
276 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:34:30 ] 1〜4 までの整数を1箇所で引っ掛ける時は case 1: case 2: case 3: case 4: /* 本体 */ break; こう書く case (1||2||3||4): は 定数式 1 || 2 || 3 || 4 →結果は真で 1 として整数化されるから 結局 case 1: と書いてるのと同じ意味になってしまう
277 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:44:09 ] ありがとうございました! あんまり載って無いですね、初心者ならやってしまいがちだとおもうのですが
278 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:51:46 ] 習得順的には if { } 〜 else if { } 〜 else { } の羅列のほうが先にじゃねーかな? break しない case を持つ switch 文って個人的にはあまり好きじゃない。 見直したときに 「あれ? break 忘れてるんじゃね?」 って勘違いしちゃう可能性があるもの
279 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 14:57:11 ] むしろcase で || 使うというのをはじめてみた
280 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:21:52 ] 他言語から来た人とか?
281 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:24:57 ] 普通の初心者でつ
282 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 15:28:39 ] >>280 勉強中でROMしてます >>276 の >case (1||2||3||4): は >定数式 1 || 2 || 3 || 4 →結果は真で 1 として整数化されるから >結局 case 1: と書いてるのと同じ意味になってしまう として処理されるならそもそも書く必要すらないですしこういう記述を知ってる必要もない気が・・・ つまり >case 1: >case 2: >case 3: >case 4: > /* 本体 */ > break; こっちを知ってればいいかと。 それかジャンプテーブルとかで処理しちゃうか
283 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:02:48 ] >>282 知るべきことは "case の後ろは定数式" であること だ。 ・定数式のうち 論理演算式だけは 演算結果が所詮 0/1 にしかならないのでおいしくない ・四則演算な定数式や ビット毎の論理演算定数式 記述が簡単になったり可読性が上がるかもしれない 四則演算の例: #define TOP (100) case TOP+1: ビット毎の論理演算の例 #define A (1<<0) #define B (1<<1) case A|B:
284 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:40:14 ] string が色変わらないんだけどなんで?ちゃんとインクルードしてるのに
285 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:49:42 ] >>284 メモ帳で書いてろ
286 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 16:56:58 ] 他の関数でもポップアップが出なくなった なんでだろう
287 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:09:35 ] >>286 {}とかが上手くいってないと出ないよ
288 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 17:41:44 ] >>287 ありがとうございました
289 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:53:26 ] caseに式を使えたらいいのにぁ else ifの梯子なんてダサすぎる…
290 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 19:55:40 ] 制限は多いけど、その条件を満たす場合はパフォーマンスを発揮できると考えるべき。
291 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:21:01 ] switch case のコンパイルコードに期待を持つなんてオールドタイプのバッドノウハウ
292 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 20:37:30 ] >>289 条件演算子を使えば似たような書き方で好きな式を条件に出来る。 C++だけだったかも知れんが。
293 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:24:46 ] else if するくらいなら (x==0||x==1||x==2||x==3)&&(func0(),true) ||x==4&&(func4(),true) ||x==5&&(func5(),true) ||(func_default(),false);
294 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:26:09 ] あ、カッコ不足だった
295 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 22:49:34 ] AクラスのaにBクラスからアクセスしたいのですが、うまくいきません。 どうしたらいいでしょうか。。 #include <stdio.h> class A { public: A(int); private: int a; private: class B { public: B() { printf("constructer B\n"); } void some_func(void){ printf("a: %d\n", a); } }; }; A::A(int x) { a = x; B* b = new B(); b->some_func(); } int main(void) { A a(10); return 0; }
296 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:08:01 ] >291 でもブレイクスルーとdefaultの機能って、状況さえ許せば凄く便利じゃね?
297 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:30:32 ] >>295 class A{ public: A(int); private: int a; class B { public: B(A&a) : a(a) { printf("constructer B¥n"); } void some_func(void){ printf("a: %d¥n", a.a); } private: A&a; }; friend class B; }; A::A(int x){ a = x; B* b = new B(*this); b->some_func(); }
298 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:32:38 ] >>295 friend
299 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 23:35:43 ] >>296 Duff's Deviceくらいしか使い道なくね?
300 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:17:05 ] >>296 ブレイクスルーちゃう fall through
301 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:18:14 ] ブレイクするんちゃう?
302 名前:デフォルトの名無しさん [2009/06/10(水) 01:23:48 ] std::coutとかstd::endl;って スレッドセーフですか?
303 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 01:29:06 ] コンパイラごとに違うので、コンパイラの仕様書を読んでください。 っていうか、C++の規約にはスレッドセーフに関する記述はないんじゃなかったっけ?
304 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 08:28:30 ] ライブラリによるしな
305 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 09:04:54 ] >300 失礼、別のと混ざった
306 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:23:36 ] class A{ public: void A( void ); virtual void ~A( void ); }; と書きたい今日この頃 なぜこの書き方でエラーがでるのかがわからない
307 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:28:13 ] 気持ちは分かるけどさ。 「もともと戻り値は存在しないもの」と、「戻り値は使わないことを宣言する」の違いじゃない?
308 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:28:38 ] void
309 名前:デフォルトの名無しさん [2009/06/10(水) 14:47:46 ] sprintf関数について質問です。 strcatとかstrcpyを使うよりも、便利だと教えられたのですが、いまいちどこが便利なのかわかりません。 教えてください。
310 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 14:53:53 ] 具体的にstrcatとかstrcpyを使ったコード書いてみて それをsprintfに置き換えてみりゃわかるだろ。 もちろん、strcatとかstrcpy一発で済むような例はstrcatとかstrcpy使えばいいのはわかるよな。
311 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 15:54:06 ] HOGE_01、HOGE_02 …… みたいな文字列を生成するときは、sprintfじゃないとやってらんないと思う
312 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:29:14 ] sprintfなんてキケンな物使っちゃいけません
313 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 21:33:01 ] sprintf_sがあるから無問題
314 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:03:03 ] >>312 #pragma warning (disable : 4996)
315 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:06:52 ] ltoaで小数点以下の数値を文字にするにはどうするの?
316 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:06:59 ] sprintf_sにしろsnprintfにしろ標準じゃないし、こいつらはこいつらで危なかったりするし(ヌル終端しないとか) いずれにせよsprintf一族はロクなもんじゃないから書き捨てコード以外には使うべきでない
317 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:08:06 ] >>316 安全な使い方をすればいいだろ
318 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:11:26 ] sprintf系を使って本当に安全なコードを書こうとすると#ifdef地獄だぞ 挙動バラバラだし、本当にクソみたいなsnprintfとかがいるから ヌル終端しないくらいならカワイイもんで、例えば 一昔前のLinuxはnをガン無視してsprintfにブン投げるようになってることがある 本当に死ねばいいと思う
319 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:13:28 ] C/C++にしろJavaにしろ安全は保障されないし、こいつらはこいつらで危なかったりするし(すぐに暴走するし) いずれにせよプログラミング言語一族はロクなもんじゃないから書き捨てコード以外には使うべきでない
320 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 22:20:16 ] snprintfはC99標準……。 ま、糞実装なsnprintfの存在以前にC99自体アレだが。
321 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:44:16 ] C99の仕様以前に、C99の対応率が。。。
322 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:50:11 ] C99の方が便利なのに、どうしてC99に移行しないんだろうね? 異なるプラットフォーム間で利用されるソフトを開発しているならともかく そうでない、小さなプロジェクト(おそらく世のプロジェクトの大部分)は C89よりC99で開発したほうが(わずかだろうけど)コスト削減になりそうなものだが。
323 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:52:42 ] 世の中Cじゃ無くてC++方向に走ったからね。いまさら感があるよ
324 名前:デフォルトの名無しさん mailto:sage [2009/06/10(水) 23:59:07 ] 便利な物だけつまみ食いしとけばいいんだよ __func__とか__VA_ARGS__とか_Pragmaとか<stdint.h>とか restrictやら可変長配列やらはいりません
325 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 00:53:03 ] 僕は複合リテラルだけ居てくれればそれでいい。
326 名前:デフォルトの名無しさん [2009/06/11(木) 01:48:37 ] C++でクラスの配列を作ったのですが、配列の要素数をどうやって求めればいいでしょうか。 class hoge { public: int a,b,c,d,e; void func1(); void func2(); }; hoge h[]={ {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, }; このとき sizeof(h)/sizeof(hoge) とやっても正しく出てくれません。
327 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 01:53:50 ] template<X>unsigned is(hoge[X]&){return X;} kazu=is(h);
328 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:00:41 ] class Hoge { int a } というクラスがあったとき Hogeのインスタンス同士の比較をメンバ変数aの大小で行う場合 演算子をオーバーロードしたほうが良いのか int GetA()という関数を比較するのが良いでしょうか? またHogeインスタンスとintを比較することも考えてますがこういう場合はどうでしょうか?
329 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:02:44 ] >>326 いやそれであっている。 うまくいかないならほかに原因がある。
330 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 02:37:59 ] >>328 Hoge同士の比較方法がそれ以外にあり得ないなら演算子オーバーロードでいいんじゃね?
331 名前:デフォルトの名無しさん [2009/06/11(木) 02:50:23 ] >>329 すいません。 クラス配列を作るとき、 hoge h[]={ hoge{1,2,3,4,5}, hoge{1,2,3,4,5}, hoge{1,2,3,4,5}, hoge{1,2,3,4,5}, }; と書くようにしたら先のやり方で配列の要素数が取れました。 環境はVS2008なのですが、最初の書き方ではだめだったでしょうか?
332 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 03:10:02 ] コンパイラ何使ってる? あと、どんな結果が出たのかも書いて欲しいかなかな。
333 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 03:35:46 ] hoge{1,2,3,4,5} ←なにこれ?
334 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 08:03:30 ] 新しいコンストラクタの呼び方
335 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 09:35:48 ] デタラメ書くなカス
336 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 15:17:42 ] >>331 自分もVS2008だけど、これはエラーなくコンパイルできて4と出力される。むしろ>>331 がコンパイルエラーになる。 #include <iostream> class hoge { public: int a,b,c,d,e; void func1(); void func2(); }; hoge h[]={ {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, {1,2,3,4,5}, }; int main() { std::cout << sizeof(h)/sizeof(hoge) << std::endl; }
337 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 19:58:37 ] gcc4.3以上なら通るな initializer_listだろ
338 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 20:57:57 ] C99の機能をC++に持ち込むなクズ
339 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:22:27 ] C++0xではC99の一部機能が採用されるよ。 委員会の人たちにクズと言わないと意味ない。
340 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:37:51 ] restrictとか_Complexとか可変長配列みたいな 本当にしょうもない物は入らないから大丈夫だと思うけどね
341 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 21:53:38 ] >>339 ここはC++0xのスレじゃないよ
342 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:20:40 ] >>340 特に、restrictはC++89のときに否決された過去があるから、 今回も入れられるわけないw
343 名前:デフォルトの名無しさん mailto:sage [2009/06/11(木) 23:22:51 ] restrictは入れると一つだけ利点があるんだよなあ FORTRAN並みに配列演算が高速化できる可能性がある 科学技術計算にはFORTRANを、と言わなくて済むようになるんだがな それ以外には取り立てて利点はない
344 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 06:13:12 ] >>341 ここがC++0xのスレかどうかなんて、>>338-339 の流れには関係ないよ。
345 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:08:43 ] >>344 スレ違いだクズ
346 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:24:45 ] いいえ。
347 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:52:32 ] いいえ。
348 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 09:56:38 ] iccでもオプション指定さえすればrestrictが使えるんだよね。 メモリのアクセスパターンががらっと変わる可能性があるから入れて欲しいけどねぇ。