1 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 06:18:18 ] プログラミング言語C/C++についての、小心者向けスレです。質問・要望・雑談などどうぞ。 関連スレやURLは>>2 以降。 ■質問する人へ 質問する前に次の3つをすること。ここで回答を待つよりそのほうが早い。 ・ぐぐる ・マニュアルで探す ・FAQを読む 例えば www.bohyoh.com/CandCPP/FAQ/index.html 質問には以下を書くこと。へたくそな質問は再提出を要求される。 ・詳しい内容(「動きません」「うまくできません」では回答しようがない) ・エラーメッセージ(なるべくそのままで) ・実行環境(OS名、コンパイラ名) ・最終的にやりたいこと(もっとよい方法がある場合が多いので) 回答してくれた人には「ありがとう」のひとことをいってあげて。 ■回答する人へ 相手は小心者、根気よく育てるつもりで。質問がへたくそなのも大目にみてあげる。 それができないならこないこと(だって小心者スレだもん)。 ・既出な質問やFAQは「XXXを読め」でいいので、叩かない&怖がらせない。 ・わけわかな質問にもエスパー発揮で。できれば質問の仕方を教えるぐらいで。 ・自信がない回答ならその旨表明すること。誤った回答は初心者じゃ見抜けない。 宗教的な話題は禁止します。
2 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 07:14:37 ] ____ /__.))ノヽ .|ミ.l _ ._ i.) (^'ミ/.´・ .〈・ リ このスレはわしが育てる .しi r、_) | | `ニニ' / ノ `ー―i´
3 名前:デフォルトの名無しさん mailto:sage [2007/08/05(日) 20:58:50 ] 1001帰れ
4 名前:デフォルトの名無しさん [2007/08/05(日) 22:20:30 ] 前スレ スレを勃てるまでもないC/C++の質問はここで 2 pc11.2ch.net/test/read.cgi/tech/1178503366/l50
5 名前:デフォルトの名無しさん [2007/08/11(土) 16:46:20 ] #include <cstring> と #include <string> と #include <string.h> の違いを教えてください
6 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 17:01:51 ] #include<cstring> cstringというファイルをincludeする #include<string> stringといf(ry それぞれのファイルの中見てみればきっといい勉強になるに違いない。
7 名前:デフォルトの名無しさん mailto:sage [2007/08/11(土) 17:52:10 ] まあ標準C++の場合だとこうなっている。 <cstring>は、Cの<string.h>相当のヘッダで、 中の宣言はstd名前空間に入っている。 <string>は、basic_string<>のヘッダ。 <string.h>は、内部で<cstring>をインクルードしており、 個々の識別子に対して大域名前空間上でusing std::strcpy;などのように using宣言がなされていることになっている。 実際には、<cstring>が<string.h>をインクルードして、 std名前空間上でusing宣言を書いている実装がほとんど。
8 名前:デフォルトの名無しさん [2007/08/26(日) 14:20:20 ] ofstreamではバッファの容量は指定できないのでしょうか?
9 名前:デフォルトの名無しさん mailto:sage [2007/08/26(日) 14:24:28 ] >>8 rdbufメンバ関数でそのストリームに関連付けられたバッファが得られる。 その中のメンバにそれっぽいものがあるはず。
10 名前:デフォルトの名無しさん [2007/08/27(月) 16:00:38 ] 質問です。 i = (char*)malloc(sizeof(char) * 256); でメモリ領域を確保したのですが、256バイト以上使用することができます。 なぜでしょうか?教えてください。
11 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:05:01 ] >>8 std::streambuf::pubsetbuf()がお望みのものだが、 実装によってはopen済みのストリームに対して実行しても無視されるので注意
12 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:08:03 ] マルチすんなカス
13 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 16:12:17 ] うむ、そうだな。小心者スレにしては、随分と大胆だ。
14 名前:デフォルトの名無しさん [2007/08/27(月) 21:42:16 ] >10 memcpy(0x00,1,1) これでいい
15 名前:デフォルトの名無しさん mailto:sage [2007/08/27(月) 22:16:24 ] 別に256バイト使えるのは正常だな
16 名前:デフォルトの名無しさん mailto:sage [2007/08/28(火) 07:38:45 ] >>10 OutOfRange を誰も発行しないから。
17 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 03:39:55 ] C++のソースファイルって、 拡張子がたくさんあるみたいですけど どれが一番メジャーで、どれを使用するべきですか?
18 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 03:45:31 ] .cpp
19 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 10:32:50 ] .C .c++ .cxx .cpp .cc バリエーションはこれくらいかな。
20 名前:デフォルトの名無しさん [2007/08/29(水) 11:35:05 ] 質問です。 環境 XP visual C++ for(t=0;t<T;t++){ pw=pow(exp,(1.0*t)/25.0); printf("pw=%f\n",pw); } といった感じで計算結果を表示させていきたいのですが、実行結果が pw=1.000000 pw=1.#INF00 pw=1.#INF00 pw=1.#INF00 と2番目から#INFというのが表示されてしまいます。計算結果を正しく出力させるにはどうしたらいいのでしょうか?
21 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 11:38:42 ] >>20 pwに代入している行のカンマの位置が怪しいけど、要はオーバフローしているんだろ。 それから、"%f"ではなく"%g"推奨。
22 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 11:39:45 ] つーか、expはいくつなのかと。
23 名前:20 [2007/08/29(水) 12:03:41 ] >>20 さん、>>21 さんへ ありがとうございます。 expは下記のように定義し、2.71828としています。 #include <stdio.h> #include <math.h> #define T 30 #define exp 2.71828 void main(){ int t=0; float pw;
24 名前:デフォルトの名無しさん mailto:sage [2007/08/29(水) 12:27:45 ] ただエディタヘ貼り付けただけで、特に手を加えていないんだが、 こんな具合にきちんと出力されていくぞ。 pw=1.000000 pw=1.040811 pw=1.083287 ところで、1.0をかけるのは意味がない。やるならせめてdoubleへのキャストにしろ。 float使うなdoubleにしろ。 eの累乗ならexp関数にしろ、こっちのほうが精度も速度もいい。
25 名前:20 [2007/08/29(水) 12:50:12 ] >>24 さんへ レスありがとうございます。 exp関数を用いたところ error C2064: 1 引数を取り込む関数には評価されません。 とエラーが出てしまいます。 他の部分がおかしいのでしょうか・・・。 fpout=fopen("outputvoltage.txt","w"); p1=vout; for(t=0;t<=T;t++){ if(0<=t&&t<=t1){ pw=exp(t/25.0); inver=1.0/pw; vt=-1.0*vin*(1-inver); printf("V=%g\n",pw); *p1=vt; ++p1; fprintf(fpout,"output voltage = %g\n",vout); } として、累乗計算の時点で前述のような計算結果になってしまい質問した次第です。
26 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:20:56 ] >>25 「C2064」でググれ…と言いたいトコだが。 「exp」っていう名前の変数使ってないか? こういうのはアウトだぞ int printf = 0; printf("Hello world!"); // C2064 error 解決するには 1:関数名にスコープ解決演算子をつける int printf = 0; ::printf("Hello world!"); // ok 2:変数名を変える int count = 0; printf("Hello world!"); // ok 関数名と同じ変数名を使うとロクな事が無い。留意の事。
27 名前:デフォルトの名無しさん mailto:sage [2007/08/30(木) 00:34:01 ] おそらく23に書いてある#define exp 2.71828を そのままにしているだけだろう。
28 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 15:06:58 ] string hogeっていうのがあったとして hogeのn番目の文字を取り出してcharに入れたいんですが どうすれば出来ますか?
29 名前:デフォルトの名無しさん mailto:sage [2007/09/07(金) 15:13:43 ] hoge[n]
30 名前:デフォルトの名無しさん [2007/09/29(土) 08:13:39 ] >>29 うまくいきました。本当にありがとうございました。
31 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 21:49:32 ] ぬっちゃけ回答者ってプロ級の人ばかり?
32 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 22:01:02 ] いいえ
33 名前:デフォルトの名無しさん mailto:sage [2007/10/02(火) 23:23:20 ] プログラミングについて色々お話聞かせて><
34 名前:デフォルトの名無しさん mailto:sage [2008/01/16(水) 23:54:59 ] まだC/C++勉強してんの?
35 名前:デフォルトの名無しさん [2008/02/19(火) 11:59:22 ] 一次元の配列を同じ値で埋めたいのですが、何か高速な方法はありませんか?
36 名前:デフォルトの名無しさん mailto:sage [2008/02/19(火) 12:05:46 ] array[10] = {0} じゃ駄目かい
37 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:09:38 ] coutで出力するときに最初にたとえば processing って表示して processing. processing.. processing... みたいに一文字ずつ書き足していきたいんだけどまじめにどうしたらいい? cout<<"."とかputchar('.')で実行すると、改行がくるまでターミナルに表示されなくて困ってます。
38 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:16:23 ] cerrはバッファリング無しだからどうか
39 名前:デフォルトの名無しさん mailto:sage [2008/02/21(木) 20:17:39 ] std::cout << std::flush でいけたような
40 名前:デフォルトの名無しさん mailto:sage [2008/02/23(土) 02:43:53 ] >>38 >>39 エラー出力とバッファリングのメンバー変数(?)ですよね。 勉強になりました。dクス
41 名前:デフォルトの名無しさん [2008/03/29(土) 13:33:03 ] cstringとstringって何が違うのですか?
42 名前:デフォルトの名無しさん mailto:sage [2008/03/29(土) 15:49:32 ] <string.h>と<cstring>はほぼ同じもので、 cの標準ライブラリ(strcatとかstrcpy)が宣言されている 前者は大域名前空間になる stringはC++の文字列ライブラリで<string>に宣言されている CStringはまた別のライブラリ で、だいたいあってると思うw 確認してないが それぞれの使い方は調べれ
43 名前:デフォルトの名無しさん [2008/04/29(火) 19:07:22 ] メールソフトはタイムゾーンをどのようにして取得しているのでしょうか? 独自にテーブルを持っているのでしょうか? それともOSから取得できるのでしょうか?
44 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:46:51 ] <開発環境>[OS:WinXP SP2][コンパイラ:VC++2005 Pro] <やりたいこと>PC(WinXP pro)の特定ソフトを特定のIPアドレスにアクセスさせたくない。 <前提条件>ルーターではなにもしてはいけない(ソフトで解決すること) <調べたこと>IPHLPAPIでルーティングテーブルをいじって対応? ルーティングテーブルのゲートウェイをありえないところにする? これだとすべてのソフトでIPアドレスにアクセスできなくなるが、、、。 上記、ヒントなりをいただければと思います。
45 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 00:58:42 ] >>44 ・まともなセキュリティソフトをインストールして個別設定でそのアプリの動作を制御する。 ・そのアプリを改修する。 ・諦める。
46 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 01:07:24 ] >>45 早速の返信ありがとうございます。 >・まともなセキュリティソフトをインストールして個別設定でそのアプリの動作を制御する。 セキュリティソフトについてはすでに導入しているのですが、 設定しても恐らく、"その設定自体をユーザーが変えてしまう"ことが予想されます。 >・そのアプリを改修する。 現状問題となっているアプリケーションは、P2Pソフトだったり、ゲームだったりと多岐にわたります。 (説明不足で申し訳ありません) >・諦める。 orz
47 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 01:14:52 ] > その設定自体をユーザーが変えてしまう お前の作るソフトウェアも同じだろ。 設定を変えられないとしても、強制終了されればおしまい。 ただ、ユーザが管理者 (Administrators)でないと仮定できるなら、 どのソフトでも結構いける。その手のソフトは たいてい管理者しか設定をいじれないようにできるはずだから。 サービスなんかにしてしまえばただのユーザは終了させることもできない。
48 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 01:44:48 ] >>47 返信ありがとうございます。 >お前の作るソフトウェアも同じだろ。 おっしゃる通りです、、、orz >ただ、ユーザが管理者 (Administrators)でないと仮定できるなら、 ユーザーはAdminです、、、orz すでにこの段階で問題なのかも知れません。 もう少しなにかいい方法がないか思案してみます、、、。
49 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 03:53:28 ] 企業だったら、セキュリティコンサルに相談することお勧め。 最近は、ログ解析だけを定期的に行なうなんてことをするコンサルもあることだし。
50 名前:デフォルトの名無しさん mailto:sage [2008/04/30(水) 14:25:35 ] >>49 返信ありがとうございます。 コンサル入れたりするのも1つかもしれません。 検討してみます。 現状、IPHLPAPIを使用して GetTcpTableを使い、定期的に監視して、 あらかじめ用意したブラックリストと照らし合わせ、SetTcpTableでアクセスできないようにすることをやってみます。 (サービス用アプリとして作成して様子をみます)
51 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:36:21 ] Visual C++ 2008 Express Editionのコンソールアプリプロジェクトで using namespace std; を使うにはどうしたら良いのでしょうか。 stdafx.hに書くと「C2871: 'std' : この名前を指定された名前空間は存在しません。」と怒られます。 ソールファイルに std::cout << "orz" << endl; などど書いても「C2653: 'std' : 識別子がクラス名でも名前空間名でもありません。」と怒られます。 空のプロジェクトで一から書くと出来るようですが、Unicodeアプリにならないので困っています。
52 名前:デフォルトの名無しさん mailto:sage [2008/05/03(土) 13:49:42 ] >>51 標準C++ライブラリをなにかインクルードしてるか?
53 名前:51 mailto:sage [2008/05/03(土) 14:50:25 ] 標準C++ライブラリが具体的に何を指すのかは解りませんが、stdafx.hに以下内容を追記したらコンパイルが通りました。 初歩過ぎる質問に答えていただき本当にありがとうございました。 #include <iostream> using namespace std;
54 名前:デフォルトの名無しさん [2008/07/13(日) 19:48:30 ] ユニークな名前ってどうやって生成するの?
55 名前:デフォルトの名無しさん [2008/07/13(日) 19:59:03 ] ひらめきが大事だね。
56 名前:デフォルトの名無しさん [2008/08/05(火) 15:26:30 ] どのクラスにでも当てはまりそうな戻り値はどのように管理するのが一般的なのでしょうか? 例としては無効な引数、〜が見つからない、致命的なエラーなどです。 クラス毎に static const 〜 としてもいいのですが、同じ値に保つのが面倒になりそうだし、、、 専用のクラスを作り下記のようにしようかと考えたのですが、スマートではない気がしています。 皆さんはどうされていますか? よろしくお願いします。 class CResultCode { static const int s_success = 1; static const int s_falal_error = -1; static const int s_invalid_param = -2; static const int s_file_not_found = -10; static bool IsSuccessful(int in_result) { return in_result > 0; }; }; class CHoge { int Hoge(){ return CResultCode::s_successed; }; }; void main() { CHoge hoge; int res = hoge->Hoge(); if ( !CResultCode::IsSuccessful(res)){ エラー処理 } }
57 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 15:52:09 ] // cost.h // extern PGDLLIMPORT double seq_page_cost;; を含むヘッダーファイルがあり,PGDLLIMPORTはべつのヘッダーで #define PGDLLIMPORT __declspec (dllexport) と定義されてます これをcostsize.cというファイルにインクルードしてるんですが. extern PGDLLIMPORT double seq_page_cost;; ってどういう意味なのかわかりません どういう意味を持つのか教えてください. お願いします. ちなみに __declspec (dllexport)で調べてもようわかりませんでした
58 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 18:19:11 ] >>56 enum
59 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 18:21:13 ] >>57 > ちなみに __declspec (dllexport)で調べてもようわかりませんでした ↓このサイトがおすすめ。 www.google.co.jp/search?q=declspec+dllexport
60 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 18:39:28 ] それで判るくらいだったら聞かねぇよ!
61 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 18:45:50 ] 公式のドキュメントも使ってる人の記事もいっぱいヒットするのに、 それ以上の説明がここでできるとは思わない。
62 名前:56 mailto:sage [2008/08/05(火) 19:11:19 ] >>58 ありがとうございます。 度々すいませんが、その場合は専用のnamespaceを設けてという事でしょうか? それともヘッダ1つ増やして個々にインクルードするだけで良いのですか? となると、成否判定に#defineマクロを使いたくなってしまうのですが許されるのでしょうか。。。 「C++ならdefine使うな」って怒られたりしませんか…? よろしくお願いします。
63 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 21:20:07 ] >>59 レスどうも すでに試してまして・・・ で,いかんせん,どこの何というDLLから何を エクスポートしてるのか,てんでわからんのです
64 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 21:22:11 ] >>62 ResultCodeクラスを作るなら、戻り値を整数型にしないでResultCode型にしちゃえばいいじゃん。 で、適当なキャストオペレータを用意しておけば成否判定に使えるし。
65 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 21:23:14 ] >>63 >57と>63で質問していることが全然違うわけだが。
66 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 21:32:06 ] >>65 自分初心者なもので 質問に一貫性が無いのは,すいません なんというか両方答えて頂ければと思うんですが…
67 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 21:48:21 ] >>57 >どういう意味を持つのか教えてください. どこぞの何とかいうDLLから何ぞやをエクスポート >>63 >で,いかんせん,どこの何というDLLから何を >エクスポートしてるのか,てんでわからんのです costsize.cで作られるDLLからseq_page_costを
68 名前:56,62 mailto:sage [2008/08/05(火) 23:44:56 ] >>64 ありがとうございます。そうしていこうと思います。 値渡しで返して嫌がられたりする事はあるのでしょうか? ← ここが一番心配なのです。 最適化すれば一時オブジェクトは作られないのかなあ…
69 名前:デフォルトの名無しさん mailto:sage [2008/08/05(火) 23:51:25 ] ResultCodeクラスにメンバなんかenum値一個しか要らんでしょ。 そんなもん値渡ししたって参照よりもコンパクトなくらいだ。
70 名前:68 mailto:sage [2008/08/06(水) 00:01:01 ] >>69 お蔭で解決する事が出来ました。 何度もありがとうございました。
71 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 08:29:05 ] int *p = new int [4]; の時 delete [] p; delete p; って使い分けないといけないの?
72 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 08:39:40 ] >>71 new[] の場合は delete[] 使い分けないといけない
73 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 08:45:23 ] >>72 さんくす
74 名前:デフォルトの名無しさん [2008/08/18(月) 13:19:15 ] delete p; だと1個目しか消せない。
75 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 13:22:42 ] そうなんか? そう書き間違えた場合の、文法チェックとか、メモリリーク調査とか、可能?
76 名前:デフォルトの名無しさん mailto:sage [2008/08/18(月) 13:25:37 ] >>74 ダウト 処理系によってはコア吐くぞ
77 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 08:54:58 ] intならデストラクタが無いからどっちも同じ
78 名前:デフォルトの名無しさん [2008/08/20(水) 08:56:18 ] どっちも同じってことはない。
79 名前:デフォルトの名無しさん [2008/08/20(水) 09:57:39 ] Visual C++ 2008 ではC++でなくCのコンパイルできないの?
80 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 10:38:50 ] できるよ
81 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 10:48:53 ] CLRにするとC++/CLI専用になるから *.c はコンパイルできない。 Win32のプロジェクトならできる。
82 名前:デフォルトの名無しさん [2008/08/20(水) 11:53:10 ] サンクス
83 名前:デフォルトの名無しさん mailto:sage [2008/08/20(水) 13:17:31 ] >>74 未定義じゃない?ANSIの仕様とか読んでないけど 処理系によってはdeleteとdelete[]が等価だったりするし
84 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 01:12:31 ] PCモニタをオフにするようなコードって,どうやって書けば良いんでしょうか? 下のフリーソフト,アセンブラで見たらWindowsAPIのKernel32.Sleep呼んでるみたいですけど・・・ ttp://hp.vector.co.jp/authors/VA036558/app/dispoff.zip
85 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 03:01:07 ] >>83 うん。未定義。
86 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 09:12:35 ] >>84 うろ覚えだが PostMessage(HWND_BROAD_CAST, WM_COMMAND, MONITOR_OFF)みたいな感じで。
87 名前:デフォルトの名無しさん mailto:sage [2008/08/21(木) 12:26:14 ] >>86 ありがとうございます!やってみます。
88 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 12:32:13 ] >>86 SendMessageで出来ました。引数はもろにそんな感じでした。 Sleepは一休みしてから電源オフに持ってくためだったんですね。。。 あと,モニタ電源オフの状態からオンに復帰するときに, マウスの移動は無視して, マウスのクリックやキーを押すときのみに反応するコードはどんな風に書けばいいんでしょうか? 誰かやさしい人おしえてください。
89 名前:86 mailto:sage [2008/08/22(金) 20:34:20 ] >>88 ちょうどそんなフリーソフトを作った。(でもしばらく公開予定はない。) 自分は以下のような方法を使ってる。 ・モニタをオフに ・グローバルフックでマウスの操作を監視 ・マウスの移動を検地した場合はモニタをオフにする
90 名前:デフォルトの名無しさん mailto:sage [2008/08/22(金) 22:35:59 ] >>89 一体いつモニタをオンにするんだ?
91 名前:86 mailto:sage [2008/08/23(土) 00:05:54 ] >>90 プログラムでオンにする必要はない。マウスのボタン押下やキー押下で勝手にオンになるから。
92 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 11:31:45 ] int main() { unsigned char *s; // 文字列用ポインタ用意 s = "Test"; ・・・・ ・・・ ・・ このようなプログラムがあるのですが、二つほど質問があります。 unsignedでchar型を宣言すると、何かいいことがあるのでしょうか? また、参考本には載っていなかったのですがこのような文字列の 代入方法は正しいのでしょうか?文字配列を用意して、strcpyで代入するとしか載ってなかったので…
93 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 13:19:11 ] >>91 >・マウスの移動を検地した場合はモニタをオフにする オンではなくてオフ?
94 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 13:29:57 ] >>93 >90、>91 >>92 sはローカルな文字列ではなくて、只のポインタ変数。だから、実際にはconst unsigned char * sということになる。 # つまり、s = "Test"の後でs[0] = 't'とはしてはいけない。 尚、charをunsignedで宣言しておくと、標準関数を呼ぶたびに(厳密には)キャストが必要になるので巧くない。 その代わり、2バイト文字などを扱うときに多少扱いやすくなる。
95 名前:86 mailto:sage [2008/08/23(土) 15:17:23 ] >>93 >>88 >>あと,モニタ電源オフの状態からオンに復帰するときに, >>マウスの移動は無視して, マウスの移動があるとオンになっちゃうからオフにする。
96 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 19:42:47 ] >>92 実質的な違いはない。後の処理の関係でどっちにするか選ぶとかその程度。 >>94 >sはローカルな文字列ではなくて、只のポインタ変数。だから、実際にはconst unsigned char * sということになる。 ちがうよね?
97 名前:96 mailto:sage [2008/08/23(土) 19:44:58 ] >>92 さっきのは「unsignedでchar型を...」のみの回答でした。 >このような文字列の代入方法は正しいのでしょうか? 正しいです。
98 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 19:52:38 ] 正しいし便利なのでオススメ
99 名前:デフォルトの名無しさん mailto:sage [2008/08/23(土) 23:12:12 ] >>89 モニターの電源切っておけばいいんじゃね?
100 名前:86 mailto:sage [2008/08/24(日) 11:33:50 ] >>99 マウス・キーボード操作でONにならない状態にするってことだよね。 調べた範囲では無理そうだった。 もしかしたら低レベルな方法であるのかも知れないけど。 それにこの場合マウスの移動だけ無視したいので、 マウス操作の監視は必須で、手間は変わらないと思う。
101 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 20:41:41 ] 一時的にマウスのドライバを無効にしとくのはどう? クリックも無視していい状況だよね?
102 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 21:02:48 ] 難しそうだお
103 名前:86 mailto:sage [2008/08/24(日) 21:24:58 ] >>101 >>88 クリックは無視しちゃだめ
104 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 22:19:27 ] そうか、マウスのクリックでもモニタの電源ONになるのか 知らなかった
105 名前:デフォルトの名無しさん mailto:sage [2008/08/24(日) 22:32:36 ] >>95 >マウスの移動があるとオンになっちゃうからオフにする。 な〜るほどね!うまい。
106 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 01:15:51 ] 俺はCoolMonitorOffってソフトを使ってて>>86 はその作者かと思ったんだけど、 >>89 で(でもしばらく公開予定はない。) とあるから別人か。 Pauseキーに割り当てて愛用してるよ。作者さんありがとーね。見てないだろうけど。
107 名前:86 mailto:sage [2008/08/25(月) 18:57:42 ] >>106 うん。別人。CoolMonitorOffは知らなかったんだけど似てるな。 コマンドライン引数でモニタオフにするまでの時間の指定やWindowsのロック、 マウス移動での復帰有無などを指定できるようにしてる。 公開して色んな人に使ってもらいたいんだけど、 やり方知らないのと、面倒そうなんでやってないんだよね。 そのうち自分のホームページ作って公開しようかなと考え中。 欲しかったらよかったらあげるよ。ソースもつけて。
108 名前:デフォルトの名無しさん mailto:sage [2008/08/25(月) 21:28:21 ] >>107 ソース見てみたいです。ください。
109 名前:86 mailto:sage [2008/08/26(火) 10:31:42 ] >>108 アップしました。 ttp://a-draw.com/uploader/upload.html ミニアップローダ(〜20MB)の up4006.zip pass:dispoff
110 名前:デフォルトの名無しさん mailto:sage [2008/08/26(火) 23:49:05 ] >>109 ありがとう。 「アプリケーションが初期化できませんでした。エラー0xc015002〜」 とでるんですが,原因はなんでしょうか。
111 名前:86 mailto:sage [2008/08/27(水) 20:22:16 ] >>110 dllとexeでリンクするランタイムのタイプが違ってた。これかな。なぜか自分の環境では動くけど。 修正して再アップしました。 ttp://www.hsjp.net/upload/index.html up38638.zip パスワード:なし
112 名前:デフォルトの名無しさん mailto:sage [2008/08/28(木) 02:04:33 ] >>111 な〜るほどね!ソースみて納得。勉強になりました。ありがとう。
113 名前:デフォルトの名無しさん [2008/09/02(火) 21:57:31 ] Windows用USBデバイスのインストーラ及びアンインストーラをVCで 作ってます。 汎用性を持たせるためにinf及びdelファイルを書き換えるだけで インストーラ、アンインストーラは再コンパイル不要とした作りに したいと思っています。 そこで、特定のINFファイルから"USB\VID_xxxx&PID_xxxx"を 抜き出して行うような方式としたいとおもうのですがなにか 方法(Win32 API)は無いでしょうか。
114 名前:113 [2008/09/02(火) 22:28:12 ] デバドラ板で質問してみます。
115 名前:デフォルトの名無しさん [2008/09/06(土) 22:55:49 ] C#がWindowsプログラミングし易いのはわかっているけど、 もうC++にどっぷり浸かっているから。 Javaは演算子のオーバーロードがないから、複素数計算では 致命的だし。 でも、C++0xでまた仕様が大幅にかわるのかな。もういいかげ んにしてほしいな。
116 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:13:09 ] C++のことだし、建前としては今までのプログラムも そのままコンパイルできるってことになっているはず。
117 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:17:27 ] std::string name = "unko"; std::cout << "name = " << name << std::endl; error C2679: 二項演算子 '<<' : 型 'std::string' の右オペランドを扱う演算子が見つかりません (または変換できません)。 コンパイルできません。なにこれ。
118 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:18:58 ] >>115 仕様が大きく変わった場合、書き直しを辞さないほどのよっぽど有益なメリットが無い限り普及なんてしない。安心して良し。
119 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:22:55 ] >>117 1行目を読んで、続きを読む気力が失せた
120 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:27:56 ] >>117 #include <string> 抜けてない?
121 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:32:05 ] >>120 書いてないですが、std::string はコンパイルエラーになってないので大丈夫です。
122 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:35:42 ] >>121 「書いてないですが」とかそういう問題じゃない。書け。
123 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:37:27 ] >>121 現に<<でエラーになっているじゃないか。全然大丈夫じゃないだろ。
124 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 00:43:05 ] あまりいじめないでsください
125 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 03:55:34 ] つ[s]
126 名前:デフォルトの名無しさん [2008/09/07(日) 07:55:24 ] C++はまったく糞だな
127 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 10:13:52 ] おまえがな
128 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:15:09 ] char c[ 12 ]; // ok const int dim = 12; char c[ dim ]; // ok int x = 12; const int y = x; char c[ y ]; // error ! 「配列の要素数はコンパイル時に決められていなければならない」 っていうのの意味がわからん・・・ ・_・
129 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 15:29:05 ] >>128 コンパイラの気持ちになって出力するアセンブリコードを考えないと、確かにわかんないだろうねぇ。 そういう制約が嫌なら std::vector を使っておけばいいよ。
130 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:06:26 ] newって中でなにやってるの? APIでメモリ確保してコンストラクタ呼んでるだけ?
131 名前:デフォルトの名無しさん mailto:sage [2008/09/07(日) 23:08:23 ] >>130 そう思って差し支えない。もっと詳しく知りたければアセンブリの出力を見れ。
132 名前:デフォルトの名無しさん [2008/09/08(月) 15:04:21 ] ググるのにも限界感じたので、教えてください。 BCB 6.0 Personal でTWAIN.DLLを読んで、画像をスキャンするものを作っています。 OSはWindows XPです。 画像をスキャンしてImageコンポーネントに貼り付けるところまで書いたのですが、 Imageに表示される画像が縦に2分割されて、左右反対になってしまうので困って います。何か考えられる原因はないでしょうか? TWAINにアクセスする部分はVectorでダウンロードしたフリーのVC++向けライブラリ を使っていて自作ではないのですが、TWAIN本家サイトの説明書と比べて、取り立 てて変わったことをしてるとは思えません。Imageに貼り付けるのは下のようにしてい ます。 HANDLE dib; mTwainManager.Scan(Handle,&dib); //フリーのライブラリに if ( dib == 0 ) return; LPBITMAPINFO bmi = (LPBITMAPINFO)::GlobalLock(dib); ImageScan->Picture->Bitmap->Height = bmi->bmiHeader.biHeight; ImageScan->Picture->Bitmap->Width = bmi->bmiHeader.biWidth; SetDIBits( ImageScan->Picture->Bitmap->Canvas->Handle, ImageScan->Picture->Bitmap->Handle, 0, (UINT) bmi->bmiHeader.biHeight, (Byte*)((Byte*)bmi + sizeof(BITMAPINFOHEADER)), bmi, DIB_RGB_COLORS ); ::GlobalUnlock( dib ); ::GlobalFree( dib );
133 名前:デフォルトの名無しさん mailto:sage [2008/09/08(月) 21:21:54 ] あー、一つだけ言えることができる。 ANSI Cあたりまではなんとかなったんだが、C++3.0くらいになると かなり複雑。あまり触りたくなかった。
134 名前:デフォルトの名無しさん [2008/09/09(火) 12:49:51 ] >>132 です。自己解決。 ハンドルとか初期化しまくったら、良く分からないけど直りました。 お騒がせしました。
135 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 19:35:07 ] いままでソース分割してコンパイルでなんとも無かったんですが template入れたとたんソース分割コンパイルが通らなくなってしまいました 分割したファイルをコピペでひとつにするとコンパイルできるのでコードが間違ってるわけではないと思います templateを使うとソース分割できなくなる仕様なんでしょうか? コンパイラはBCCを使ってます
136 名前:デフォルトの名無しさん mailto:sage [2008/09/14(日) 20:05:48 ] d.hatena.ne.jp/shizu9/20080726/1217092697 ここでも読んでみ
137 名前:デフォルトの名無しさん [2008/09/15(月) 15:29:33 ] 500000までの素数を判定して、出力するプログラムを作っているのですが、実行するとカーソルが点滅したまま止まってしまいます。 どのようにすればよろしいでしょうか。よろしくお願いします。 #include<stdio.h> long i=0,j=0,primecounter=0,chk_prime[500000],x=0,y=0; int main (void) { for(i = 2;i < 500000;i++){ for(j = 1;j < i;j++){ if(i % j == 0){ primecounter++; } if(primecounter == 2){ printf("%ld",chk_prime[x]); chk_prime[x] = i; x++; primecounter = 0; } else{ primecounter = 0; } } } for(y = 0;y <= x;y++){ printf("%ld",chk_prime[y]); } return 0; }
138 名前:137 [2008/09/15(月) 15:39:38 ] すみません。環境を書き忘れてました。 環境は OS Mac OS X 10.5.4 コンパイラ GCC4.2 です。 すみませんでした。
139 名前:デフォルトの名無しさん [2008/09/15(月) 16:05:26 ] C++オセロ完成したよー\(^o^)/ www8.uploader.jp/user/vipprog/images/vipprog_uljp00538.txt www8.uploader.jp/dl/vipprog/vipprog_uljp00539.zip.html 後はあれだ、COMの頭脳を書いていくだけだ・・・。 みんなでCOMクラスのselectメソッドを書き換えて勝負させようぜ!!
140 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 16:07:16 ] C言語で素晴らしいオセロを作らないか? pc11.2ch.net/test/read.cgi/tech/1087979678/ こっちでもないか
141 名前:デフォルトの名無しさん [2008/09/15(月) 16:07:17 ] >>139 zipの方にはソースとexeファイルが入ってる。 exeファイルの方は、>>139 にテキストでうpしたソースの最後に system("pause");を足したものをコンパイルしただけ。 心配なら自分でコンパイルしてね!!
142 名前:デフォルトの名無しさん [2008/09/15(月) 16:10:00 ] >>140 俺はこのスレで4日前くらいからC++でオセロを作ってるんだ・・・(´・ω・`) ム板なんて!!ム板なんて・・・!!時々行くけどね。 C++の勉強がしたいだけだからそのスレには用はないかな・・・。 オセロのアルゴリズムを考えるには参考になりそうだけどね。
143 名前:デフォルトの名無しさん [2008/09/15(月) 16:10:50 ] ごめん、激しく板違いでしたwwww 恥ずかしい誤爆したぜ!!ww VIPに帰ります。。。
144 名前:デフォルトの名無しさん [2008/09/15(月) 16:18:07 ] 次はWindows GUIに挑戦だ
145 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 16:26:16 ] >>137 kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7726.c 見るの面倒だったので、てきとうに作ってみた。 無駄が多いけどね。
146 名前:デフォルトの名無しさん [2008/09/15(月) 16:30:52 ] char prime[500000]; を1で初期化して、 n=2 → √500000と動かして prime[n]==1ならば、nの倍数の配列すべてに0を入れる するとprimeが1のもの
147 名前:デフォルトの名無しさん [2008/09/15(月) 16:32:29 ] エラトステネスのふるい でググれ
148 名前:デフォルトの名無しさん [2008/09/15(月) 16:42:35 ] コンピュータの対戦できるソフト BearRev Professional Edition www.vector.co.jp/magazine/spotlight/010531/sl01053111.html
149 名前:デフォルトの名無しさん [2008/09/15(月) 16:43:45 ] まぁついでなので>>139 のソースに関して何かコメントあれば下さい。 C++まだ初めて4日目(多分)なので、オブジェクト指向的なプログラミングになれてません。 ここはこうした方がいいぜ!!ってのあればよろしくお願いします。 >>144 もちろんそのつもりだよん
150 名前:デフォルトの名無しさん [2008/09/15(月) 16:46:31 ] 動けばいい 動かなかったら何言語使っていてもだめ
151 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 16:51:58 ] >>137 ループの終了条件 {}の位置 ついでにprintの位置
152 名前:137 [2008/09/15(月) 17:02:14 ] >>145 ありがとうございます 参考になります >>146 ありがとうございます。 チェックしてみます。 >>147 ありがとうございます。 その方法でも試してみたいと思います。 >>151 具体的な指摘ありがとうございます。 終了条件がどのように間違っているか指摘していただきたいのですが、よろしければお願いします。
153 名前:デフォルトの名無しさん [2008/09/15(月) 17:11:17 ] >>137 デバッガ
154 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 19:12:51 ] >>152 for(j = 1;j < i;j++){ if(i % j == 0){ primecounter++; } 1とそれ自身で割れるかどうかをチェックしてるのにj < iだと自身で割ることなく終了する j <= iに変えれば自分で割ったときもチェックできる
155 名前:トミー ◆xb8eIST5.k [2008/09/15(月) 21:51:15 ] 初めまして。質問させていただきます。 C言語を始めようと思い、いろいろなページを見てみたら、ほとんどにおいて 「まずコンパイラをダウンロードしましょう」と書いてあり、中でも例として Borland C++ 5.5がよく書いてあったので、これをダウンロードしてみようと 思いました。 www.codegear.com/jp/downloads/free/cppbuilder で「C++ Compiler 5.5/Turbo Debugger」をクリックし、個人情報も登録しましたが、最後に出てき たダウンロードボタンを押してみると、「サーバーが見つかりません」と出てしま いました。 見ると、「上記のダウンロードサイトにアクセスできないときは、CodeCentral の ダウンロードページをお試しください。CodeCentralのダウンロードページを利用 するには、CDNへのログインが必要です。」と書いてあるので、「CDNへのログイン」 の文字をクリックしてみましたが、英語のページで、Login nameやpasswordを入力 する欄が出てきました。(日本語のページもあるようです。) わたしはCDNには会員登録していません。CDNに登録しないと、C++ Compiler 5.5/ Turbo Debuggerをダウンロードすることはできないのでしょうか。 回答お願いします。
156 名前:デフォルトの名無しさん [2008/09/15(月) 22:02:22 ] 以下のコードでコンパイルエラー(C2440)が出るのですが、何が間違っているのでしょうか? 環境は、VC++6.0です。 class CBase { public: CBase& operator=(int val) {} }; class CDerived : public CBase {}; int main() { CDerived val = 1; // この行で、コンパイルエラー return 0; } エラーメッセージは、 C2440: 'initializing' : 'const int'から'class CDerived'に変換すrことはできません。 コンストラクタはソース型を持てません、またはコンストラクタのオーバーロード レゾリューションがあいまいです。
157 名前:137 [2008/09/15(月) 23:29:29 ] >>154 ありがとうございます 肝心なところですね カーソルが点滅したまま終了しないですが、、 何度も申し訳ございませんが、何が問題か分かる方お願いします。
158 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:33:54 ] >>156 operator =はCDerivedで定義される暗黙のやつがCBaseのを隠してしまう。 だから、CDerivedで定義し直すなどしないといけない。 もっとも、CDerived val = 1で行われるのは代入ではなく初期化なので、 そういうことをやりたければ、CDerivedにint型の引数を取るコンストラクタを作る必要がある。
159 名前:デフォルトの名無しさん mailto:sage [2008/09/15(月) 23:59:55 ] >>137 ,157 回している回数じゃないかな Sigma[i=1...499998]i = 499998*(1+499998)/2 = 124999250001 待っていればいつか終わると思うよ
160 名前:デフォルトの名無しさん mailto:sage [2008/09/16(火) 00:05:22 ] >>157 {}の位置が悪い 自分より小さい数で割るたんびにcountを0に戻してる 自分より小さい数で全部割りおわってからcountが2であるかどうか調べないと
161 名前:156 mailto:sage [2008/09/16(火) 00:21:21 ] >>158 なるほど、そういうことか。 確かに、operator=を定義していなくても、オブジェクトの代入とか出来ますからね。 あれは暗黙で定義されているからってことか。一つ賢くなりました。 ありがとうございます。
162 名前:137 [2008/09/16(火) 01:03:17 ] >>159 ありがとうございます。 デバッガで見てみると回ってはいるようなので、しばらく待ってみることにします。 >>160 基本的なアルゴリズムが間違っていたのですね、、 ありがとうございます!
163 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:09:12 ] 引数にリファレンスを渡すとオーバーヘッドが小さくなるんですか?
164 名前:デフォルトの名無しさん mailto:sage [2008/09/17(水) 14:42:16 ] 値のサイズがリファレンス(=ポインタ)のサイズに比べてかなり大きければなる
165 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:05:01 ] 今勉強のために文字列クラスを自作しています。 それでoperator+=で文字列の代入結合まではなんとかできたのですが、 operator+の定義がうまくできません。 CString a, b, c; a = "abc"; b = "def"; c = a + b; //"abcdef"にならない デバッガで確認したところ、 CString CString::operator+(CString& str) { CString temp(*this); temp += str; //ここまではうまくいっている。 return temp; //ここでデストラクタが呼び出されて、正しい結果を返せない。 } 一応デストラクタはこんな感じです。 CString::~CString() { if(ptr) delete[] ptr; } tempをstatic宣言したら、結合はうまくいったのですが、プログラム終了時に例外が出るようになってしまいました。 どうすればうまくいくのかどなたか教えて下さい。
166 名前:デフォルトの名無しさん mailto:sage [2008/10/04(土) 23:14:22 ] >>165 コピーコンストラクタとoperator=作ってる?
167 名前:デフォルトの名無しさん [2008/10/04(土) 23:16:07 ] いろいろと辺
168 名前:165 mailto:sage [2008/10/05(日) 08:09:11 ] >>166 operator=は作っていたのですが、コピーコンストラクタは作っていませんでした。 (operator= を定義しておけば必要ないと思っていたもので・・・) コピーコンストラクタを作ったところ、うまく動作するようになりました。 どうもありがとうございました。
169 名前:デフォルトの名無しさん [2008/10/05(日) 08:46:10 ] CString::operator+で、足し算定義しているのに、なんでその関数内部で 足し算が出来るんだよ? コンパイル通るのかよ
170 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 10:41:38 ] + と += は別物だよ
171 名前:デフォルトの名無しさん [2008/10/05(日) 11:27:46 ] べつなのはわかっている ここはなぜいいんだよ temp += str; //ここまではうまくいっている。
172 名前:デフォルトの名無しさん mailto:sage [2008/10/05(日) 11:38:20 ] // 実は勘違い
173 名前:デフォルトの名無しさん [2008/10/05(日) 11:40:14 ] すまん間違えた
174 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:08:04 ] 単純な事質問するんだけど 型の宣言って複数の関数をまたいでするって出来ないのかな? うまく説明出来ないんで悪いんだけど 例えば read.cpp global.h test.cpp の3つがあった場合。 read.cpp内でint型を宣言するとread.cppで宣言した型を使った関数を作る(ここで代入)。 次にglobal.h内でread.cppで作った関数をextern void 何々();とする。 そして、test.cppでglobal.hをインクルードして、test.cpp内でread.cppで作った関数内で代入されたint型を読み込ませたい。 記述は間違ってないと思うんだけど、ビルドするとtest.cppで読み込んだはずの代入されたint型が読み込まれてなくて、定義されてないと出る ・・・初歩的な事で悪いんだけど、根本が違うのかな?ご教授お願いします。
175 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:11:48 ] >>174 「int型を宣言」とか「int型を読み込む」とか、かなり奇怪な話になっててよくわからん。 どうせ単純なミスかなんかだろ。実際のコード晒してみるのがいいよ。
176 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:19:44 ] 余計な所省いて晒してみる、まだ日が浅くて酷いコードでごめん。 ReadingFile.cpp int enemy_img; void readingfile(){ enemy_img = LoadGraph("date/img/enemy.bmp"); } GlobalM.h extern void readingfile(); //全ての素材 enemy_move.cpp void enemy_move_02(){ move02.enx+=sin(PI*move02.eny/80)*5; move02.eny+=1.5f; DrawGraph( move02.enx , move02.eny , enemy_img , TRUE ) ; ↑ここでReadingFile内の関数で指定したのを読み込ませたい。 DeleteGraph( enemy_img ) ; }
177 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:28:55 ] >>176 extern int enemy_img;
178 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:35:16 ] >>177 ありがとおおお でもどうしてintも読み込ませないといけないんだ? 既にReadingFile.cppで読み込んでいるし、多重定義になるかと思ってた。
179 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 14:47:41 ] コンパイラは、各ソースファイルを別々にコンパイルしている 他のソースに何か書いてあっても、 今コンパイルしてるソース (と、そのインクルード先) に書いてなければ、コンパイラには判らない
180 名前:デフォルトの名無しさん mailto:sage [2008/10/06(月) 15:15:44 ] >>177 は「int型のenemy_imgという変数がどこかにあるはず」という情報。 コンパイラはその「あるはず」という仮定をオブジェクトファイルに埋め込む。 そしてリンカが全部のオブジェクトファイルからその変数を探して、実際のアドレスに直す。 (見つからなかった場合はリンクエラーになる)
181 名前:デフォルトの名無しさん [2008/10/16(木) 01:38:42 ] >>155 ではありませんが、今私、全く同じ状況で困っています。 どなたかお答えいただけませんか?
182 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 02:10:05 ] >>181 ttp://www.microsoft.com/japan/msdn/vstudio/Express/ これじゃだめなの?
183 名前:デフォルトの名無しさん [2008/10/16(木) 03:47:20 ] 問題文:2つの円の位置関係(交わる(交点)、含まれる、離れている) 先週C++を始めたばかりなので色々と書き方が解りません;; 考え方は解るのですが…… 二乗や平方根などなど……
184 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 04:27:08 ] >>183 // // 2つの円の重なりをチェックする。 // // 引数 // x1, y1, r1 円1の中心x座標、中心y座標、半径 // x2, y2, r2 円2の中心x座標、中心y座標、半径 // // 戻り値 // 0: 接する 正: 離れている 負: 重なる // int circle_check(int x1, int y1, int r1, int x2, int y2, int r2) { return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1) - (r1+r2)*(r1+r2); }
185 名前:デフォルトの名無しさん [2008/10/16(木) 15:19:36 ] srand(0)とsrand(1)が同じ系列を生成するので、ソースコードを見てみたいのですが、 srandのソースコードってどこにありますか?
186 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 16:02:43 ] お使いのコンパイラによって実装は異なる
187 名前:181 [2008/10/16(木) 19:24:11 ] >>182 参考書を買って勉強しようと思っているのですが、その参考書で 『C++ Compiler 5.5/Turbo Debuggerをダウンロードして、それを使って勉強』 なものだったので、別のソフトだと操作方法がわからないんじゃないかと不安だったのです・・・。 とりあえずこれでやってみます!回答ありがとうございました。
188 名前:デフォルトの名無しさん [2008/10/16(木) 20:24:04 ] C++の質問です。2つお願いします ・CString 形式のデータで""hogehoge""というデータが入っていた場合、 前後のダブルクォーテーションを簡単に除去する方法はありませんか? ・char buff[255][3][255] のようなデータをファイルで入出力したいのですが、 何か良い方法はありませんか?
189 名前:デフォルトの名無しさん [2008/10/16(木) 21:18:55 ] >>188 メモリマップドファイルとstd::stringならsubstr
190 名前:デフォルトの名無しさん [2008/10/16(木) 21:36:55 ] VC++2008proにて 特定のコード上で右クリックすると確実にフリーズするんですが 似たようなケースさらには対処法あったら教えてください。。 ググったけどほとんど情報が無く、似たような質問がされている所も未だ解答がなかったとです。。 原因は調査中です。ヘッダーファイルを適当にインクルードしまくったから無限ループ起きたか? と思って全部コメントアウトしてみたけど無意味でした。。 他の情報としては、 普通はマウス乗せたらメンバの情報が出てきますが、そのコードではそれすら出てきません。 一応左クリックおよびファイルの編集はできます。 右クリックだけ永久砂時計が発動します。 他も何か手がかりになりそうな所あれば探したいんで アレがひっかかってるんじゃね? とか言っていただけると助かります。
191 名前:190 mailto:sage [2008/10/16(木) 22:42:32 ] すまんスレチだったか。過疎なのか? ちょっと他のところで聞いてみます。
192 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 22:44:03 ] インストールしなおしかな?
193 名前:デフォルトの名無しさん [2008/10/16(木) 22:51:43 ] >>192 と思ったらこんなタイミングで……なるほど。 しかしDream SparkでDLした奴なんでもう一度isoをDLできるかどうか……? MSに報告したほうがいいんでしょうかね。
194 名前:190 mailto:sage [2008/10/16(木) 23:35:13 ] 他スレにて解決しました。お騒がせしました。 別件ですがついでにこちらで質問してみたいことが。 bool b1,b2,b3,b4;があって、 if(b1 && b2 && b3 && b4) { 〜〜 } のようにやることは if(b1){ if(b2){ if(b3){ if(b4){ 〜〜 } } } } のようにやる事と同じように働いてくれるんでしょうか? それとも前者はb1〜b4をすべて求めてから論理積を計算し、 後者はfalseがあった時点で処理をやめる、という違いが生じるんでしょうか? 前々から疑問に思っていました。
195 名前:デフォルトの名無しさん [2008/10/16(木) 23:42:58 ] 前は、if-ifの方が速いと思ってたけど、実測すると論理積の方が速い 分岐予測より、論理積のコストは少ない
196 名前:デフォルトの名無しさん mailto:sage [2008/10/16(木) 23:46:47 ] >>194 短絡評価と言って、左から順に見ていきfalseが出てきたら残りは評価されない。 だから上と下のどっちの書き方でも同じ意味になる。 もちろん、実際にコンパイラがどういうコードを吐くかは別として。
197 名前:190 mailto:sage [2008/10/16(木) 23:51:54 ] >>195-196 本当ですか、安心しました。 短絡評価、まぁ考えてみたら、してくれないとスマートじゃないですよねw 実測とかしたことない……やっぱそういう経験も役に立つんですね。 ありがとうございましたm(__)m
198 名前:デフォルトの名無しさん [2008/10/17(金) 00:54:32 ] >>189 亀レスだけどサンクス、調べてみるよ。
199 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 02:49:46 ] >>198 str.trim('\"')でできそう!
200 名前:デフォルトの名無しさん mailto:sage [2008/10/17(金) 09:01:45 ] >>185 メルセンヌツイスターのソースを使えば良いジャマイカ
201 名前:デフォルトの名無しさん [2008/10/17(金) 14:06:39 ] 簡単にコピペできるのはXORシフト ライセンスとかあんまりなさそうだし 商用に組み込んだとしても問題にならないのでは
202 名前:デフォルトの名無しさん [2008/11/04(火) 18:46:54 ] 文字列を入力して、それを配列に1文字ずつ入れていきたいのですが、どのようにすればよいですか。 具体的にソースを挙げて教えてください。 よろしくお願いします。
203 名前:デフォルトの名無しさん mailto:sage [2008/11/04(火) 18:58:54 ] >>202 char buf[適当な長さ]; fgets(buf, sizeof(buf), stdin);
204 名前:デフォルトの名無しさん [2008/11/04(火) 19:18:29 ] >>203 返信ありがとうございます。
205 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 14:47:28 ] typedef unsigned char bBuffer[128]; typedef DWORD wBuffer[32]; bBuffer A; wBuffer B; AからBにキャストするにはどうすればよいのでしょうか? でるぴだと B:= wBuffer(A); なんですけど
206 名前:デフォルトの名無しさん mailto:sage [2008/11/05(水) 15:24:37 ] キャストに配列を指定してはいけない。つまり、foo = (Foo [])bar;こういうのはできないのよ。 代入したいのならmemcpy()でも使う。 それにしてもObjectPascalは、型が緩いんだろうか。
207 名前:205 mailto:sage [2008/11/05(水) 16:37:40 ] >>206 ありがとうございます。 memcpy()で期待通りに出来ました。 delphiだとなぜか使えるんです。
208 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 16:14:41 ] wiiリモコンのライブラリってどこにあるんですか ttp://www.thinkit.co.jp/cert/article/0711/2/5/2.htm に載ってるところ探しても無いんですが
209 名前:デフォルトの名無しさん mailto:sage [2008/11/07(金) 23:43:09 ] あるじゃん
210 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 01:32:35 ] あ、あった ここですね ttp://wiiyourself.gl.tter.org/ どうもです
211 名前:デフォルトの名無しさん [2008/11/08(土) 02:14:04 ] ここで聞いていいのかわからんけど一応きいてみる スレチならごめん 今、ユーグリット云々つかって最大公約数を求めるプログラム作ってて kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/img/7968.txt ってとこまではできたんです。2つはできるんですけど 問題は3つ以上の数を調べるときなんです。普通に文字数を増やして計算させるだけじゃできないようで、 いろいろしたんですけど詰まってしまいまして どこをどう変更すれば、3つ以上の数の最大公約数をしらべるプログラムになるのでしょうか
212 名前:デフォルトの名無しさん mailto:sage [2008/11/08(土) 02:15:22 ] gcd(gcd(x, y), z);
213 名前:デフォルトの名無しさん [2008/11/10(月) 19:33:43 ] ¥nで文字数があわなくて1日中悩んでいたが ¥r¥nかよ! ゲイツのバカヤロー!
214 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 19:58:35 ] >>213 何をいまさら。 UNIX原理主義者は始末に終えんな。 それは、デジタルリサーチのCP/M-80(CP/M-86)との互換性を保つために そうなっている。 文句があるなら、墓の下で眠るゲイリーキルドールに 言え。 ちなみに、OS-9の行末コードは'\r'のみだ。
215 名前:デフォルトの名無しさん mailto:sage [2008/11/10(月) 20:31:53 ] タイプライターに文句いえ
216 名前:デフォルトの名無しさん [2008/11/11(火) 07:09:03 ] 初歩的な質問なのですが、 staticはどう言った変数や関数に付ければ良いのでしょう。 staticの働き事態はわかるのですが・・・
217 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 08:44:01 ] >>216 ・関数 外部に公開しない全ての関数につける。 単一ソースファイルでプログラムを作るのなら、staticをつけないのはmain()だけでいい。 ・変数 自動変数で事が足りない場合。 関数外部で宣言したい場合で、外部に公開する必要がない場合。
218 名前:デフォルトの名無しさん [2008/11/11(火) 12:09:23 ] C++でビットマップを表示するのに、("ファイル名")ではなく(variable)を使用するにはどうしたらいいでしょうか? 例: String^ variable = "C:ファイル名"; Bitmap^b = gcnew Bitmap(variable); // エラー
219 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 13:04:54 ] C++/CLIは別スレへ
220 名前:デフォルトの名無しさん [2008/11/11(火) 15:47:57 ] コンパイルをすると _declspec(align('16'))の仮引数は配置されません とエラーが出てしまいました。vectorのせいだと思うのですが、このエラーは どういったときに出るのでしょうか・・・
221 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:35:36 ] Ubuntu 8.10 で手持ちの ANSI C プログラムをコンパイルしようとしたら、 usleep が無いと言われたのですが、usleep は unistd.h に入ってるはずですよね? ちなみに Darwin の cc でコンパイルしたときはうまくいきました /usr/include/unistd.h をみてみると #if defined(__USE_BSD) || #defined (__USE_XOPEN_EXTENDED) ... #endif で囲まれてました。そこで cc に -D__USE_BSD オプションをわたしてみたものの やっぱり定義されてないと言われます。 ubuntu の cc で usleep を使うときはなにかしらやり方があるのでしょうか?
222 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 17:49:13 ] www.linux.or.jp/JM/html/LDP_man-pages/man3/usleep.3.html > POSIX.1-2001 では、この関数は過去のものと宣言されている。代わりに nanosleep(2) を使うこと。 > POSIX.1-2008 では、 usleep() の規定が削除されている。 とか書いてあるので、代わりに nanosleep を使ってみたらどうだろう
223 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 18:07:14 ] >>221 ansi cにusleep()などない!
224 名前:デフォルトの名無しさん mailto:sage [2008/11/11(火) 23:26:53 ] >>218 まさかとは思うが、"C:\\ファイル名"とかいうオチじゃないだろうなw
225 名前:221 mailto:sage [2008/11/12(水) 09:58:31 ] >>222 情報どうもです。 とりあえず #ifndef __USE_BSD # define __USE_BSD # include <unistd.h> # undef __USE_BSD #else # include <unistd.h> #endif としてその場をしのいだんですが、そのうち nanosleep を使うように書き直したいと思います
226 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 03:21:41 ] メモリリークを調べるため_CrtSetDbgFlag関数を使おうとして 以下のように書いたのですがリンクエラーが出ます #include <crtdbg.h> ・ ・ int WINAPI WinMain( HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR lpCmdLine, int nCmdShow ) { // メモリリーク検出 _CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF); ・ ・ ・ } エラー内容 GameT error LNK2019: 未解決の外部シンボル __CrtSetDbgFlag が関数 _WinMain@16 で参照されました。 他にも何かインクルードする必要がありますか 開発環境はVS2003で、OSはWinXP_SP3です
227 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 08:05:07 ] ゲ製板からの出張乙 リンクエラーと自分で書いてるだろ するべきことはインクルードではない
228 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 12:54:30 ] リリースビルドだったりしてな。
229 名前:デフォルトの名無しさん mailto:sage [2008/11/14(金) 20:37:24 ] 2003にあったっけ?
230 名前:226 mailto:sage [2008/11/14(金) 23:40:50 ] >>227 なぜゲ製板とわかるのでしょうか >>228 DebugかReleaseのとこですよね Debugにしています よくわからないので新規プロジェクトで試したらできました これに少しづつ作ったものを貼り付けていって原因を探してみる
231 名前:デフォルトの名無しさん [2008/11/15(土) 23:28:04 ] 不特定多数のデータを受け取る際に、スペースで区切りながらそれらを配列に格納するにはどうすればよいのでしょうか。 例として、 「2 3 5 6」 「2 3 1 3 4 5 2」 というスペースで区切られた数があり、これらをそれぞれ別の配列に格納したいのです。 入力は 2 3 5 6(ここでエンター) 2 3 1 3 4 5 2 となります。 コードと一緒に解説してくださるとありがたいです。
232 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 00:16:28 ] つ[strtol()]
233 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 00:52:12 ] すいません。 C++で、コンパイラのように構文解析をする処理などを勉強できる書籍はないでしょうか? プログラム板に初めてくるので、このスレでいいのか判断に迷いますが、、、 よろしくお願いします。
234 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:03:27 ] コンパイラの教科書の最初の方に載ってるよ
235 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:12:08 ] アサーションをインラインで宣言して、どこの行でエラーが起こったか知りたいです。 以下の様に書いてみましたが、インライン関数MUSTOKの行数でエラーが起こった、もしくは、assert関数がある行が 表示されてしまいます。できればこの関数MUSTOK(0==1);がある行が知りたいのですが、どうしたらよいでしょうか? 実行環境 gcc バージョン 4.2.4 (Ubuntu 4.2.4-1ubuntu3) ubuntu8.4 ソースコード == #include <cassert> #include <iostream> inline void MUSTOK(bool cond) { if(!cond) { std::cout<<"file=:"<<__FILE__<<"\tlie=:"<<__LINE__<<std::endl; } assert(cond); } int main(int argc,char *argv[]) { MUSTOK(0==1); return 0; } == 実行結果 file=:assert_test.cpp lie=:7 assert_test: assert_test.cpp:9: void MUSTOK(bool): Assertion `cond' failed. Aborted
236 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:21:33 ] >>235 MUSTOKをマクロで実装するしか。
237 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 01:23:50 ] >>235 backtrace,backtrace_symbolsってのを使うとどこから呼び出されてるか表示出きるみたいだよ。
238 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 10:42:04 ] >>234 さん 233です。ありがとうございました。 書泉に行ったときに探してみます。
239 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:33:25 ] Cのプログラムで、他のプログラムhogeをコマンドラインパラメータ付きで実行し、 その実行の終了を待って、hogeのmain関数が返した値を取得したいのですが、 どうすればよいでしょうか?標準のC関数だけでできますか?
240 名前:デフォルトの名無しさん [2008/11/16(日) 12:40:35 ] できません。winAPIでやってください
241 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:50:22 ] Cで、引数で指定されたファイルを、system関数を使って、 メモ帳で開くにはどうすればよいでしょうか? ご教授お願いします。
242 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 12:58:13 ] system("メモ帳の場所 引数で指定されたファイル") あとは www.google.co.jp/search?q=C%8C%BE%8C%EA+system から探しなー
243 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:06:03 ] >>240 馬鹿も休み休み言ってください。 >>239 一般的に、アプリはsystem()で起動すればmain()の戻り値を回収できる。 但し、GUIアプリなどで動いているにも拘らずすぐに戻ってきてしまう場合は、 コマンドインタプリタ(command.comとかbashとか)の支援が必要になる。 コマンドインタプリタを介在させたくなければ、そこでやっと>240の言うようなAPIの出番となる。 >>241 system("notepad any.txt")でいいとして、そのテキストファイル名を可変にしたいなら 文字列を組み立てればいい。
244 名前:デフォルトの名無しさん [2008/11/16(日) 13:36:09 ] リソースから拾ってきた文字に対して置換ってどうやってる? たとえば 「File %1 is too long.」 ⇒ 「File "C:\hogehoge.foo" is too long.」 みたいな。 変換先文字列分拡張して memmove で必死に頑張ってもいいんだけど、 ATL/WTL 使ってるのでそれらのライブラリで便利なのがあればいいなぁと 思って… 教えてエロい人><
245 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:39:01 ] >>244 %1を適当に変換してから、sprintf()
246 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:40:18 ] 置き換えしたいところを%sとかにして、sprintf使うとか。
247 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:40:47 ] boost::format使えば楽じゃね。
248 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 13:48:57 ] >>245 、246 そうか、%1 じゃなくて別にいいんだもんね。 「File %s is too long. (sizeof: %s. current: %s)」 とかにして順番に sprintf の引数に積めばいいのか! >>247 STLワカンネ・・・orz でもせっかくなので勉強してくるYO! 即レスthx!!! みんな優しいね。大好き。
249 名前:デフォルトの名無しさん mailto:sage [2008/11/16(日) 21:02:14 ] FormatMessage の立場がねーな、おい。
250 名前:デフォルトの名無しさん [2008/12/17(水) 02:15:02 ] 入力によって処理を変えるプログラムを作っていて、予期せぬ入力があった時メッセージを表示して、もう一度入力させるプログラムを作っているのですが、2度同じ表示が出てしまいます。 for(;;) { scanf("%c",&input); if(input == 'S' || input == 's') { printf("GAME START!¥n); } else if(input == 'Q' || input == 'q') { printf("GAME QUIT¥n"); return 0; } else { printf("input failed¥nPlease input again¥n"); } } どこを変更すれば、2度表示されなくなるでしょうか。 よろしくお願いします。
251 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 02:35:15 ] たぶん改行('\n')が残っているんだと思うよ。 scanf()の後に、 if ( input != '\n' ) { while ( (c = getchar()) != '\n' ) { ; /* 意図した空文 */ } } こういうの追加しておくとか。 scanf()で文字ではなく文字列受け取って、最初の要素だけ利用するとか。 fgets(,,stdin)で、上記と同じようにするとか。 ゲーム作っているみたいだから、がんばってとしか言えないけど。
252 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 07:48:35 ] const で変数宣言する必要性を教えて下さい
253 名前:デフォルトの名無しさん mailto:sage [2008/12/17(水) 23:46:16 ] >252 ・誤って内容を変更するコードを書いた場合エラーになる。 ・(条件が揃えば)定数として使える。
254 名前:デフォルトの名無しさん mailto:sage [2008/12/18(木) 08:59:45 ] >>251 弄っていたら、 scanf("%c",hoge); を scanf("%s",hoge); にしたら出来ました。 ありがとうございました。
255 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 08:36:18 ] 質問です。 後処理さえすれば、コンストラクタで例外を投げても良いと聞いたんですが、 自分自身(this)がリークすることはないんでしょうか?
256 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 11:35:37 ] ないよ。
257 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 11:55:39 ] ありがとうございます。 これで安心して例外投げれます。
258 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 12:10:50 ] >>255 これだね。 www.kijineko.co.jp/tech/superstitions/memory-leak-at-dynamic-creation-fail.html
259 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 15:58:08 ] 大変参考になるリンクどうもです。 スッキリしました^^
260 名前:デフォルトの名無しさん mailto:sage [2008/12/19(金) 16:07:06 ] 専用メソッド作ってた自分がバカみたいでした……
261 名前:250 [2008/12/19(金) 17:56:15 ] 入力した数*数の二次配列に、任意の文字を入れて、それを.txtとして出力するプログラムを作っているのですが、 scanfで各配列に入れた文字を書き込むにはよいのですが、a[i][j] = '*';という入れ方で書き込むとtxtファイルが開けなくなってしまいます。 何が問題なのでしょうか。 よろしくお願いします。
262 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 02:21:57 ] >>261 ソースと結果を示してください。 fopen() を使っているなら perror() してみるとか。
263 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 02:40:07 ] >>261 たぶんfprintf(fp, "%s", a[i]);とかやって、ナル文字('\0')が見付からなくてメモリの適当なところまでファイルに書き込んだためにメモ帳などでテキストファイルとして開けない。 とエスパーしてみる。書き込みがSJISっぽいから、Windowsと仮定するけど。 最初から、バイナリで書き込んでバイナリで読み込むといいかも知れない、ゲーム作ってんだろ。 fwrite(a, sizeof(a[0][0]), sizeof(a), fp); foo型配列a fread(a, sizeof(a[0][0]), sizeof(a), fp); foo型配列a その代わりメモ帳では開くなよ。開いてもなんとかなるかもしれないけど。
264 名前:デフォルトの名無しさん mailto:sage [2008/12/20(土) 18:50:18 ] バイナリエディターで覗くというのも手だな。 ファイルサイズが想定以上なら263で正解だと思う。
265 名前:250 [2008/12/20(土) 19:20:53 ] >>262 すみません。改行が多すぎるそうで、書き込みができませんでした。 >>263 ありがとうございます。 バイナリで開いて書き込んだら、できました。 >>264 そのような確認の仕方もあるのですね。 勉強になりました。ありがとうございました。
266 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 09:35:35 ] ちょっと質問したいんだが コンストラクタで例外投げるのってどういう時に使うんだ? 分岐にでも使うのか?
267 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 14:08:45 ] >>266 エラー通知に決まってるだろ。コンストラクタでも普通の関数でも同じ。
268 名前:デフォルトの名無しさん mailto:sage [2008/12/24(水) 21:19:49 ] コンストラクタだとエラーを返せないから例外を使う。
269 名前:デフォルトの名無しさん mailto:sage [2009/02/10(火) 18:39:30 ] ttp://gimpo.2ch.net/test/read.cgi/bobby/1233164250/l50 168 名前:よしよし ◆2U93Cmvv1o [sage] 投稿日:2009/02/10(火) 07:02:42 ID:??? おいハゲどもポインタの質問だ ------ p は指し示す先のアドレス &p はポインタ変数pそのもののアドレス *p は指し示す先の値 ------ だよな?なのにポインタ配列の解説のところで ------ data+i がそのもののアドレス data[i] が指し示す先の値 *(data+i) が指し示す先のアドレス ------ ってことになってんだよ 俺は本の書き間違えだと思って実際にプログラム打ち込んで コンパイル、実行してみたらあってるんだよ どういうことだ説明しろ 「*」はポインタが指し示す先の値を出力するんじゃねーのかよ
270 名前:デフォルトの名無しさん [2009/02/10(火) 18:43:21 ] 169 :おいら名無しさんヽ(´ー`)ノ:2009/02/10(火) 09:02:32 ID:??? 3番目の"*(data+i)が指し示す先のアドレス"は間違ってるな。 ハゲの理解が正しい。どこの糞入門書だ。さらせ。 171 :よしよし ◆2U93Cmvv1o :2009/02/10(火) 11:50:38 ID:??? >>169 ありがとう。ハゲじゃないが言ったようにコンパイルすると 結果は入門書どおりになるんだよ。俺が何か間違っているはず。 #include <stdio.h> int main (void){ char* data[4]={"par","birdie","eagle","albatross"}; int i; printf("data[i] 値 アドレス :ポイント先の値\n"); for(i=0;i<4;i++){ printf("data[%d] %10d %10d %10s\n",i,*(data+i),data+i,data[i]); } return 0; } ------------------------------------- C:\Source>point.exe data[i] 値 アドレス :ポイント先の値 data[0] 4235576 1245052 par data[1] 4235580 1245056 birdie data[2] 4235587 1245060 eagle data[3] 4235593 1245064 albatross -------------------------------------
271 名前:デフォルトの名無しさん [2009/02/10(火) 18:44:48 ] ttp://gimpo.2ch.net/test/read.cgi/bobby/1233164250/ 177 名前:よしよし ◆2U93Cmvv1o [sage] 投稿日:2009/02/10(火) 14:48:08 ID:??? 要するに int i=5; int *p; とかと char* data[4]はそもそも違うっちゅーことだな? *pってのは「指し示す先の値」のことだけど、 * data[4] ってのは「指し示す先のポインタ」のことなんだな? * data[4]様はポインタ様*(data + i )やdata[i]のさらに違う場所 (メモリの)にいる奴なんだな? メモ----------- *(data + i )とdata[i]はまだポインタなの。 「ポインタの配列」→「ポインタ」→「指し示す先の値」 * data[4]→ *(data + i )とdata[i]→ *(*(data+i))または*data[i] char* data[4]= --------------
272 名前:デフォルトの名無しさん [2009/02/11(水) 08:43:54 ] 小心者スレということなので投下してみます。 VC++ Expressでウインドウアプリを作っています。 (ファイル A.h) class A{ public: A(); vertial ~A(); }; (ファイル B.h) #include ゙A.h゙ class B:public A{ public: B(); ~B(); }; (ファイル C.h) #include ゙A.h゙ class C:public A{ public: C(); ~C(); }; この時、Aが再宣言されたとか、Aが未定義だとかでコンパイラに怒られます。なぜ
273 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 08:56:55 ] vertial ~A();
274 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 09:47:54 ] if文をやっと覚えたところでニコニコ動画のビットレート計算 というのがあったのでこれを参考に簡単なプログラムを作っていたのですが コンパイルエラーはでないのですが、最後の部分を入力するとエラーで落ちます 何がいけないのでしょうか? Source PW:c www1.axfc.net/uploader/He/so/193956
275 名前:274 mailto:sage [2009/02/11(水) 10:01:04 ] 最後のif文で演算子が抜けていますが ここは >= にしていました
276 名前:274 mailto:sage [2009/02/11(水) 10:02:21 ] 補足 >最後の部分を入力 プログラムを実行して順番に進んでいって最後の部分を入力
277 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 10:41:14 ] >>274 scanf("%d", movieb);
278 名前:デフォルトの名無しさん [2009/02/11(水) 13:03:11 ] >>273 virtual A();の間違うぃ スマネm(_ _)m
279 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:25:47 ] そういうくだらない間違いをする奴がレスに何を書こうとも、 実際のコードをきちんと再現できているとはとても思えない。 従って、再現するソースとエラーメッセージを貼るか、帰れ。
280 名前:デフォルトの名無しさん [2009/02/11(水) 13:41:40 ] 何を偉そうに そっから推測できる間違いが指摘できねーんならそれこそカエレだ
281 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 13:48:51 ] >>280 別にあなたが指摘なさっても宜しくってよ。それとも、あなたご自身が指摘もできないで書いてらっしゃるとでも仰るのかしら?
282 名前:デフォルトの名無しさん [2009/02/11(水) 14:15:15 ] はいそうです
283 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:17:36 ] 知らレス
284 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 14:40:16 ] >>272 こうじゃね? #ifndef _A_ #define _A_ class A{ public: A(); virtual ~A(); }; #endif
285 名前:デフォルトの名無しさん [2009/02/11(水) 15:15:46 ] >>284 神! 正直、#include ゙A.h゙してれば逝けるとおもてました。 (BCCでは#includeしてれば逝けてたから) ありがとうございますた。
286 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 16:30:16 ] インクルードガードぐらい常識として知っておけ
287 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 18:54:22 ] >>284 予約識別子死ね。
288 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:22:41 ] >>277 scanf("%d", movieb); という箇所が間違っているということでしょうか? または、ある部分を上のように書き直せということでしょうか?
289 名前:288 mailto:sage [2009/02/11(水) 20:28:46 ] 解決しました &が抜けているということですね スレ汚しすみませんでした また、回答ありがとうございました
290 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:31:43 ] >>287 _A_ はプリプロセッサの識別子。C/C++の予約識別子には該当しないよ
291 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:40:50 ] >>290 ライブラリの実装に _A_ 使ってるところがあったらぶっ壊れるだろうが。
292 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:45:53 ] あたま悪いの?
293 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 20:54:32 ] >>290 何を根拠にそんなことを言うのかね。 ISO C (draft n1336) 7.1.3 Reserved identifiers p2 にはマクロ定義についても明示的に禁止されてる。 > If the program declares or defines an identifier in a > context in which it is reserved (other than as allowed by 7.1.4), or defines a reserved > identifier as a macro name, the behavior is undefined. ISO C++ にはマクロ定義について明示的な記述は無いようだけど、 >291 があるから やっぱりダメだろう。
294 名前:デフォルトの名無しさん mailto:sage [2009/02/11(水) 22:11:00 ] どうせ、VCかgccしかつかわないもん。
295 名前:デフォルトの名無しさん [2009/02/12(木) 05:49:25 ] #ifndef _A_ #define _A_ : #endifと、 #pragma onceは同じ意味じゃないの?
296 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 05:55:30 ] いいえ、後者は一部の処理系でしか使えません。
297 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 05:57:16 ] >>295 VC厨はこれだから・・・
298 名前:デフォルトの名無しさん [2009/02/12(木) 07:53:33 ] VC厨扱いしていただけるなんて光栄でごぜえます。
299 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 09:08:54 ] >>297 gccでもCodeWarriorでも使えるし PC向けのメジャーなコンパイル環境で使えないのはbccくらいなんだが ポータビリティ意識して書くのは当然としても、 >VC厨はこれだから… ってどういうこと?
300 名前:デフォルトの名無しさん mailto:sage [2009/02/12(木) 22:48:59 ] >>299 CodeWarriorってタダで使えるの? wikipediaで見たらかなりのプラットホームをサポートしてるみたいだから 使ってみたいのだが
301 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:16:57 ] >>300 コンシューマゲームの開発やってると、無料でダウンロードできる場合もある 俺が使ったのはこのパターン。 すまんが小売してるかどうかは知らん。 とりあえず使いにくいことは確か。
302 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 00:18:57 ] >>299 #pragma onceがおそらくVC発祥だからでしょ。 #ifdef _MSC_VER >= 1020で囲むコードを良く見かけるし、 まだまだVC限定のイメージが拭いきれていないと思う。
303 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 09:03:50 ] >>302 > #ifdef _MSC_VER >= 1020で囲むコードを良く見かけるし、 すまんが意味がわからない。 コンパイラによってifdefとpragma onceを切り替えるコードがあるって話?(なわけないか) VC限定のイメージとの関係は?
304 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 09:08:11 ] つーか、ifdefで比較演算ってなんだよw とは思った。 >>303 pragma onceは厳密には全く違う意味に解釈される可能性もあるから、 使えるコンパイラを限定することに意味はないわけでもない。
305 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 14:55:58 ] >>304 意味ないだろ それならifdefだけで十分なんだから。
306 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 15:26:48 ] >>305 古い MSC には #pragma once がなかったんじゃないの?そのための比較だと思うけど。
307 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 15:59:56 ] >>303 ごめん間違えた。正しくはこんな感じ。見ない? #if _MSC_VER >= 1020 #pragma once #endif
308 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 18:14:42 ] >>307 全く答えになってないんだがww
309 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 22:15:10 ] 素直にインクルードガードしとけってことだ!!
310 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 22:50:41 ] #ifndef _strcpy #define _strcpy int _strcpy(){return 0;} #endif
311 名前:赤西仁 [2009/02/13(金) 22:57:03 ] 1年間悩んでます。お力をお貸しください。 アークザラッドUというタイトルのゲームの、ゲーム画像(歩行画像など)を抽出したいのですが、 かれこれ1年ほど経ちますが、なかなかうまくいきません。 *もちろん抽出した画像は個人範囲内で利用するつもりです。 ◆試してダメだったこと ネット上からダウンロードできる、ありとあらゆる抽出系ツールを試した。 (ちなみに他のゲームはほとんど抽出可能) ◆教わったこと ・アークザラッドUは独自の画像形式を使っているから抽出できない。 ・PS上で表示されてるということは絶対に摘出はできるはず。 ◆抽出は不可能ではないということを知ったとき 2ちゃんねるで質問したところ、 ある方が実際にキャラクターの歩行画像を抽出して 私が立てたスレにアップしてくださいました。 スクリーンショットじゃ嫌なんです。どうか皆さん、お力をお貸しください。
312 名前:デフォルトの名無しさん mailto:sage [2009/02/13(金) 23:44:15 ] マルチ失せろ。
313 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 00:00:30 ] >>306 コンパイラの種類/バージョンチェック云々以前の話なんだが、わかってるか? VCでifdefやifndefが使えないわけじゃあるまいし、 あえてpragma onceを混ぜる理由が無いだろ
314 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 00:05:42 ] 普通のインクルードガードと307みたいなVC限定でpragma onceを組み合わせて使うコードの存在が、 #pragma onceがあたかもVC限定かのように思わせるのではないかと言いたいんだけど
315 名前:313 mailto:sage [2009/02/14(土) 01:00:52 ] >>314 >>306 なの? 横レスで他人へのレスをされても噛み合わないレスしか返せないぞ
316 名前:306 mailto:sage [2009/02/14(土) 04:46:01 ] >>313 マクロによるインクルードガードでは2回目もファイルを開いて少なくともインクルードガードを 読む必要がある。 #pragma once なら2回目以降ファイルを開かずにスキップするような実装が 考えられる。 そのため、インクルードガードを置いて移植性を持たせつつ、特定のコンパイラでの コンパイル時間を短縮する目的で #pragma once を置くことが考えられる。 en.wikipedia.org/wiki/Pragma_once
317 名前:デフォルトの名無しさん mailto:sage [2009/02/14(土) 12:32:24 ] おまいら ._,,,,,,。,,、 广'x、 ,,、._ 」'゙''i、 ,,,,,_.,,,,、广゚┐ .,,,v―冖"~゛ ゙'i、 .ト ,|,_ riゃ .} .,i´ '冖i、 .] ` f゙,l° ,i´ .゙l_ .y-┐ 'や'゙"゙’ _,,,vr" .゙ト.゙'x,,,,广 ィ・'''゙~ .._,,v・゚ヒ''''・x、 入、rУ ,iレ-v,,,、 .,r°."'''l゙ ,|√゙゚'i、 匸 ._ .y・'゙゚,,,v―-, .:゚ーa .√ ._,rll_ :} .,r''y|゛゙゙l..,i´ ,i"゙l, .゙ト ,r°,,, .., ._,,vぐ .`√ .,i´l广._,,,,,,,,i´ ,,i´ ,i´ ,「 .:| .~''''″ .r″ .|゙l、 “ .,i″.yi入-イ il∠i、.` .,メ| | 」'ト .,,i´ .,i´ ,, ̄ .[ .,i´.,,,,,,! .]_ .゙l_,i´,レ .'_,,,,レ ~''┐ .,r°.,i´.| .| ,l゙ :゙l、 ,,i´ ,i´ l゜.゚L__ .:―ヤ゚″_ :~''=、 .,r″.,x=,, .,i´ ,x'".,,x'″ .゙l、 ゙冖''″ .] | .,i´ .゙l, .~1 .゚L '゙〃 ,n, .,,} .,l彡'''″ .゙~"''''''''''"゜ .テ''~゛ .:゚'―---―・° ―″ .~''¬―'″ .:゚=_,r
318 名前:デフォルトの名無しさん [2009/02/16(月) 17:47:44 ] 皆様こんばんは。 VC++ ExpressEditionでのリーソスの事について質問させてくダサイ。 (Resource.h) #define GAZOU000 1000 #define GAZOU001 GAZOU000 + 1 : : : : #define GAZOU030 GAZOU001 + 030 (Resource.rc) GAZOU000 BITMAP "bmp000.bmp" : : : : GAZOU030 BITMAP "bmp030.bmp" これでビルドしようとしたら .\Resource.rc(5) : error RC2135 : file not foundみたいなのが ズラズラズラ〜〜〜っと出てきました。 仕方が無いのでResource.hの、 #define GAZOU030 GAZOU000 + 30みたいに記述しているのを 全部#define GAZOU030 1030のように書き直したらビルドできました。 なぜ最初の書き方でダメだったんですか
319 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 21:07:15 ] 最初の書き方だと、 GAZOU001 BITMAP "bmp001.bmp" のGAZOU001をマクロ展開すると、 1000 + 1 BITMAP "bmp000.bmp" になるだろ?リソースファイルはスペースを区切りと扱うので、正しく認識できなくなる。
320 名前:デフォルトの名無しさん [2009/02/16(月) 21:57:46 ] >>319 えー!そうなんですか〜 初歩的ミスだったのですね。お恥ずかしい・・・ でも、お蔭様で、またひとつ勉強になりました。 ありがとうございました。
321 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:04:41 ] >>316 大抵の場合、フルビルドを立て続けにやることはなく、プリコンパイルヘッダの効果で意味がないと思われ
322 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 22:37:19 ] google C++コーディングスタイルに、 cppファイルの無名名前空間の使用は推奨されてたのですが 理由はなぜでしょうか。cppファイルは別に何をやってもいいような。 cppファイルですらusing使うのは駄目なの?
323 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 23:46:37 ] >>322 ほかのcppファイルから見える必要のないものを隠すために使えという意図だと思う。 同じ目的で、名前空間上のstaticも使えるけど、 一般的に、この意味ではstaticより無名名前空間のほうが推奨されている。
324 名前:デフォルトの名無しさん mailto:sage [2009/02/16(月) 23:57:52 ] static指定のかわりですか、なるほど。 名前空間上の関数定義だったら別だけど クラスのメンバ定義だけしか書かない分には 気にしなくてもいいのかな。 >staticより無名名前空間のほうが推奨されている。 これは等価だと理解してましたが、なぜでしょう。 どっちも他のファイルからは見えないのに?
325 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 00:39:05 ] >>324 もともとC/C++のstaticに静的記憶期間とファイル内って2つ意味があるのはややこしいから、 後者の意味を分離しようという動機で無名名前空間が導入されたという経緯がある。 だから大事に使ってあげてねと言うわけ。
326 名前:デフォルトの名無しさん mailto:sage [2009/02/17(火) 03:30:11 ] >>324 C++ ではオーバーロードやテンプレートの関係で、クラス名などもグローバルな定義の 識別に使われるので、関数や変数以外に class, struct, enum も別々の .cpp で同じ 名前空間内に同じ名前のものを定義するとマズイ。これが無名名前空間で解消できる。
327 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:20:15 ] お題。 ISO/IEC 14882:2003とXLib、Win32APIの範囲内でスクラッチからエディタを作る。 Win32、XLibともに標準C++ライブラリとかぶる機能があるが、この場合 標準C++を優先して使う。 これは、少しでも移植性を高めるための努力と考えてほしい。 また、拡張性の担保ともなりうる。 これは時間かかるけど、やりがいあるよ?
328 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 02:56:40 ] なんだコピペだったのか。
329 名前:デフォルトの名無しさん mailto:sage [2009/02/21(土) 03:02:01 ] まずISO/IEC 14882:2003がなんなのか調べるのめんどくせえから挫折 →XlibかWin32?どうせなら両立できるwxだろと意気込むがインストール失敗して挫折 →そもそも標準C++が分からなくて挫折 →努力なんかできなくて挫折 →わたるが死んじゃう!(自殺)
330 名前:デフォルトの名無しさん mailto:sage [2009/04/11(土) 22:30:51 ] すいません CとC++を実践の中で学びたいのですが なにを作ればいいか、というよりなにをその言語で作れるのか漠然として・・・ JavaやC#のようなオブジェクト指向言語ならイメージ浮かびやすいんですけど コンソールだとコントロール等がないのでどうしても・・・
331 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 00:19:13 ] C++もオブジェクト指向言語なんだが・・・
332 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 09:37:07 ] つーか、好きにライブラリを選べばいいのがC/C++流。
333 名前:330 mailto:sage [2009/04/12(日) 10:24:27 ] そういやC++もオブジェクト指向言語でしたw まだイメージができないあたり、ライブラリの知識が不足しているようですね。
334 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 10:29:32 ] ライブラリの前にオブジェクト指向と言語仕様の知識も不足してる
335 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 11:54:22 ] それを言ったら情報工学の基礎から何から全部だろう ポトペタでさくさく作っている間は必要のない知識だ
336 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 12:45:19 ] なんだポトペタって。
337 名前:デフォルトの名無しさん mailto:sage [2009/04/12(日) 19:33:18 ] 一覧からマウスで選択したコントロールをフォームに ポトっと落とすとペタっと張り付く機能やそれを備えたIDEのこと
338 名前:デフォルトの名無しさん mailto:sage [2009/04/13(月) 00:50:39 ] Stringクラス的なものを参考すればいいんじゃね? まさにコントロールじゃない目に見えないクラスオブジェクト。
339 名前:トミー ◆xb8eIST5.k [2009/04/25(土) 20:19:22 ] >>182 ぼくもそれをダウンロードして使ってみました。 うまくいきそうです。 どうもありがとうございました!
340 名前:トミー ◆xb8eIST5.k [2009/04/25(土) 20:21:25 ] >>339 はこのスレの>>155 です。
341 名前:デフォルトの名無しさん mailto:sage [2009/05/10(日) 22:02:48 ] ここはvc++は駄目かえ?
342 名前:デフォルトの名無しさん [2009/06/07(日) 16:31:54 ] 正の数であれば、小数点以下を四捨五入する場合、0.5を足して、intで切り捨てればいいのですが、 負の数も含めて、四捨五入をする場合、どのようなコードを書けばよいのでしょうか?
343 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 19:14:53 ] GUIアプリを作るのにC++を勉強しようと思っているのですが VC++EEとBCCどっちが作り易いですか? また言語自体はどちらも同じですか?
344 名前:デフォルトの名無しさん [2009/06/07(日) 19:20:10 ] GUIはスクリプトで出来る
345 名前:デフォルトの名無しさん [2009/06/07(日) 19:21:35 ] VC++EEとBCCで選ぶと結局は、VC++EEが簡単だろう。 ATL/WTLなどもあり対応しているライブラリも多い。
346 名前:デフォルトの名無しさん [2009/06/07(日) 19:22:57 ] rubyでGUI作れなければ、C++ではもっと無理。まずこれでやってみれば
347 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:30:11 ] >>342 x=(int)(x+.5-(x<0)); でよいか?
348 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:35:28 ] >>344-346 VC++使うことにします。 ありがとうございました。 >>346 C++は以前触ったことがあります。昔すぎて何も覚えてませんが…
349 名前:デフォルトの名無しさん mailto:sage [2009/06/07(日) 22:41:43 ] >>342 abs関数はどうですか
350 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 10:46:27 ] >>342 >>347 なんで cast なんか四捨五入で使うの?round とか使わない? cast なんてそんなに無闇に振り回すものじゃないと思うけど。
351 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 11:31:01 ] >>350 round()なんて関数ないぞ
352 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 12:44:07 ] >>351 すまん。ちょっと説明不足だったかも。厳密にいえば round/lround/rint/lrint 等々は C99 の規格みたい(といっても今や 2009 だが)。 プラットフォームによってはいまだに使えないのかも。
353 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 18:55:43 ] castはそんなに振り回すもんじゃ無いのは同意だが このケースは真っ当な使い方だし問題ない が、>>350 みたいにそういう判断ができないなら使うべきではないな
354 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 22:18:13 ] 俺は cast 使わないでもサクッとできるなら使わない方を選ぶな。
355 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 22:28:06 ] 昔からあるやり方だから、一種の慣用句。 BASICでも同じようなことしてたと思うし。
356 名前:デフォルトの名無しさん mailto:sage [2009/06/08(月) 23:45:37 ] >>353 「これは真っ当」というけど、intでoverflowの心配はしなくていいの? 別に一般にcastが良いか悪いかは別としてこの場合の素朴な疑問。
357 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 00:33:41 ] それも含めて分かって使ってるかということだろう。
358 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 00:35:52 ] >>357 それなら今回のケースは情報不足で > このケースは真っ当な使い方だし問題ない と言い切る根拠は無いように思うが。
359 名前:デフォルトの名無しさん mailto:sage [2009/06/09(火) 02:53:47 ] 言い切る根拠ねぇ。。 根掘り葉掘り前提を聞かないと、うかつにコメントしちゃいけないのもどうかと思うが。
360 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 00:09:27 ] プログラミング言語C第2版には「A.6.3.整数と浮動小数点」の項に >浮動型の値を整数型に変換するときには、小数部分は無視される とあるんだけど、実数xの少数分 x-[x] なので、例えば-2.3の整数部分は-3となり、 (床関数:ja.wikipedia.org/wiki/%E5%BA%8A%E9%96%A2%E6%95%B0 ) 結局、int a = -2.3 の結果は -3であるべきかな?かなかな?
361 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 00:34:11 ] >>360 いや、それは-2になる。 ここで言う小数部分を無視というやり方は、数学的定義とは関係なく (絶対値が)0に近づく方向へ切り捨てるということ。 ここまで書いてから気付いたが、その記事の下の方にC言語の場合もきちんと書いてあるじゃないか。
362 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 00:41:50 ] きちんと >『独自研究』に基づいた記述 と書かれていますね。
363 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 00:50:03 ] ANSI C 3.2.1.3 Floating and integral There was strong agreement that floating values should truncate toward zero when converted to an integral type, the specification adopted in the Standard. Although the Base Document permitted negative floating values to truncate away from zero, no Committee member knew of current hardware that functions in such a manner. [Footnote: We have since been informed of one such implementation.] 整数型への変換時に浮動小数点数はゼロに向かって切り捨てるように強く言われた。 規格でも標準で採用した。でも、元にしたドキュメントでは負の浮動小数点数は ゼロから離れる方に切り捨てることを認めていた。当時の委員の誰一人として現行のハードウェアがこのように振る舞うとは知らなかった。 [注釈: 我々委員会はそのような実装を伝えられていた。] 適当に訳したので間違っているかもしれない。 元にしたドキュメントは、負数の時はどっちでも良かったけど、 この規格では、ゼロに向かって切り捨てますよん。ってことだと思われる。
364 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:01:57 ] おぉ、すばらしい! これで安心して負数を丸められる。
365 名前:デフォルトの名無しさん mailto:sage [2009/06/12(金) 01:02:05 ] >>362 きちんと英語版のノートでは、規格で0方向への丸めだと指摘されている。
366 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 01:49:25 ] #include <iostream> #include <string> #include <fstream> using namespace std; int main(){ string str; fstream file; file.open("test.txt",ios::in); file>>str; file.close(); int h=str.length(); cout << h<<endl;; const char *seq1 = new char[h]; seq1=str.data(); delete[] seq1; } これどこか悪いですかね?実行時に強制終了になってしまう。 削っていって原因の箇所を特定したところ、delete[] seq1; の一行が悪いみたいなんですが、正直何が悪いかが理解できんのです。 bcc5.5で作業中です。
367 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 02:04:06 ] seq1=str.data(); これじゃよ。data() や c_str() の仕様をみるのじゃ。 記録するな。使ったらすぐ捨てろ。わかったな、今畜生。
368 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 02:05:26 ] >>366 やっぱり釣りなのね? 釣りに決まってる。 釣りではないなんていわせない。 釣りでなくちゃおかしい。 釣りだよね? 釣 り だ よ ね?
369 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 02:11:52 ] とりあえずわかったことは私はウンコマンということでしょうか。 つまりはチンカス以下。チンチンの先っちょについたティッシュのカスを師と崇めて行けというほどの。 ちょっと出直してくる。ありがとうござました。
370 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 02:16:22 ] >>366 #include <algorithm> seq1 = str.data(); → std::copy(str.begin(), str.end(), seq1); 別にmemcpyでもいいんだけど。
371 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 02:21:00 ] >>366 > const char *seq1 = new char[h]; 配列 new なんか使うからだ。 std::vector<char> seq1(str.begin(), str.end()); にしとけば int h も delete seq1 も要らない。
372 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 02:22:41 ] >>371 そもそもstringのまま扱うのでいい気がしてくる。
373 名前:デフォルトの名無しさん [2009/06/14(日) 18:57:00 ] int main(){ string seq1; とすればいい。コピーする手間もない
374 名前:デフォルトの名無しさん mailto:sage [2009/06/14(日) 19:40:25 ] すいません、質問宜しいでしょうか? vc++なのですが、ダブルクリックするとAP画面を開きだすタイプのexe(コマンドプロンプトが開くタイプではないexe)の ソースコード内にて『cout文』が記述されています。 コマンドプロンプト以外のどこかに内容が出力されていたりするんでしょうか? 分かりにくいと思いますが、よろしくお願いいたします。
375 名前:デフォルトの名無しさん mailto:sage [2009/06/15(月) 09:27:30 ] >>374 恐らく、電子の藻屑と消えています。
376 名前:374 mailto:sage [2009/06/15(月) 22:14:59 ] >>375 ありがとうございました。
377 名前:デフォルトの名無しさん mailto:sage [2009/06/16(火) 09:22:17 ] どうしても回収したいなら標準出力をリダイレクトすればファイルに落とせるんじゃないかな。 詳しくは環境依存C/C++スレかWinAPIスレ辺りで。
378 名前:デフォルトの名無しさん [2009/06/30(火) 00:19:00 ] Linuxアップデートしたらatoi( )無くなって驚いた。 奴は引退したんだな。
379 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 00:43:00 ] そなの? うちのLinuxはアップデートしてもいなくなってなかったよ
380 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 01:06:00 ] itoa()は引退するかもしれないがatoi()は標準関数でしょ
381 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 09:55:51 ] はい、atoi()はdeprecated3人組の筆頭ですからおいそれとはなくなりませんよ。
382 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 19:01:01 ] itoaを標準化しろよ あるいは%bを
383 名前:デフォルトの名無しさん mailto:sage [2009/06/30(火) 21:09:00 ] itoa()はやっぱし簡単にsprintf()で代用できるから標準じゃないのかなあ それにしてはatoi()にはstrtol()という基数変換関数が用意されているし いまいち対称性に欠けるよなあ
384 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 09:11:55 ] Cの標準ライブラリに関しては、対称性なんて考え出したら禿げるよw
385 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 10:38:00 ] ネーミングにセンスがないのは仕方ないよなあ 昔のCは昔のFORTRANと同じく識別子は先頭の6文字しか 認識しなかったからなあ だから無秩序な切り詰めで読みにくいったらありゃしない create()かcreat()になっているし この当たりはK&Rのジョークにも出てくるが
386 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 11:17:53 ] このスレまじ勉強になりすぎワロタ
387 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 18:37:21 ] >>385 creatについては字数制限だという風に広まった方が彼も喜ぶか
388 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 19:48:48 ] winbase.hについて教えてください。 win32コンソールアプリでプロジェクトを作ると古いwinbase.hが インクルード対象になってGetProcessHandleCountなどが 定義されていません。 プラットフォームSDKのwinbase.hだと定義されてます。 これはwin32コンソールアプリでは新しいAPIをサポートしていないと 言うことでしょうか。 無理やり古いwinbase.hに突っ込んだら動くには動いたのですが 別の方法で新しいAPI関数を、コンソールアプリで使う方法は ないでしょうか?
389 名前:デフォルトの名無しさん mailto:sage [2009/07/01(水) 22:47:35 ] パスの順番を変える
390 名前:388 mailto:sage [2009/07/02(木) 14:34:04 ] お返事ありがとうございます。 読み込むインクルードファイルのパスを 変えるということでしょうか。 調べてみます。
391 名前:デフォルトの名無しさん mailto:sage [2009/07/02(木) 20:46:04 ] 環境変数ならその順番、ツールなら書いた順番 VC++なら設定のとこで上下に動かして優先順位変えられるべ
392 名前:388 mailto:sage [2009/07/03(金) 01:03:15 ] バージョンは2005なのですがなかなか 設定できるところが見つかりません。 もうちょっと調べてみます。
393 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 02:09:35 ] インクルードパスの設定はうまくいっていて、 WINVERとかを設定していないだけということはないよな?
394 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 10:49:13 ] コピーしたら動いたらしいから大丈夫では? VCの基本だが、、、ツール - オプション - プロジェクトおよびソリューション - VC++ディレクトリ プラットフォーム[Win32] ディレクトリを表示するプロジェクト[インクルードファイル] で該当のインクルードパスを追加、もしあるなら上に移動
395 名前:392 mailto:sage [2009/07/03(金) 18:24:08 ] 色々とすみません。 みてみたのですがオプションのプロジェクトとソリューションの下に VC++の階層がありませんでした。 なぜ出ていないのか調べてみます。
396 名前:デフォルトの名無しさん mailto:sage [2009/07/03(金) 21:28:58 ] 左の三角クリックしても出てこない?
397 名前:395 mailto:sage [2009/07/04(土) 01:24:57 ] ありがとうございます。 見当たらないです。 VBの環境設定と、もう一つなんかしかないんです。 何が悪いのやら・・・
398 名前:デフォルトの名無しさん mailto:sage [2009/07/04(土) 01:38:24 ] VisualBasicの規定値と全般かビルド/実行あたりか。 変だなあ、、、設定のインポートとエクスポートからリセットしてみては・・・
399 名前:397 mailto:sage [2009/07/04(土) 11:12:02 ] ありがとうございます。 設定のインポートとエクスポートはありました。 それで初期化して見ます。 非常に助かります。 結果、ご報告させていただきます。
400 名前:399 mailto:sage [2009/07/06(月) 10:06:25 ] おはようございます。 設定のインポートとエクスポートで 環境の初期化ができました! 早速ディレクトリを色々いじってみます。
401 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 10:49:35 ] ホビープログラマさんかしら いじる前に初期化した状態でビルドしてみたらどう?
402 名前:400 mailto:sage [2009/07/06(月) 15:21:49 ] 御助言ありがとうございます。お察しのとおり自分は素人です。 設定初期化後にビルドしても識別子が見つかりませんになりました。 インクルードファイルの上位をSDKにしてもだめでした。 また、コンソールアプリのwinbaseには_WIN32_WINNTの 定数が0500までしかなかったので0501以降のAPIは事実上 未対応なのがコンソールアプリの習いなのでしょうか。 インクルードの優先設定に間違いがないか調べてみます。
403 名前:デフォルトの名無しさん mailto:sage [2009/07/06(月) 16:29:59 ] $(VCInstallDir)include $(VCInstallDir)atlmfc\include $(VCInstallDir)PlatformSDK\include $(FrameworkSDKDir)include 特に変更してない、うちの環境はこんな順になってる。
404 名前:402 mailto:sage [2009/07/06(月) 18:02:09 ] わざわざありがとうございます。 自分の環境も同様に無印が一番上でした。 となるとインストールパッケージのせいなんでしょうか。 自分のはプロフェッショナルのSP3でした。
405 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:33:09 ] そんで、どこにあるwinbase.hが気に入らないの? それと、ホビープログラマさんがなんでわざわざプロフェッショナル版を買っちゃった(んだよね?)の?
406 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 01:55:39 ] プロフェッショナルになりたいからじゃないかな。 自分もお金合ったらプロフェッショナル版ほしかったなぁ。 あの赤いパッケージが3倍開発速度が速くなりそうな感じがしていい。
407 名前:404 mailto:sage [2009/07/07(火) 10:14:45 ] おはようございます。 visual studio 8フォルダのvcフォルダ直下のincludeフォルダ内のwinbaseです。 ファイルの日付も古いのでコンソールでは新しいAPIは対応してないのかと 思いました。 プロフェッショナルバージョンを購入したのは おっしゃる通り目標でして。。 今は事務なのですがいつかは開発に行くのが目標なんです。
408 名前:デフォルトの名無しさん mailto:sage [2009/07/07(火) 14:35:05 ] C:\Program Files\Microsoft Visual Studio 8\VC\include うちはここにはwinbase.hないなあ。 ちゃんと情報出しとけば7/2ぐらいにはいろいろ解決できてただろうね。
409 名前:407 mailto:sage [2009/07/07(火) 22:30:29 ] 定数「_WIN32_WINNT」の値を0x501で定義し、VCの設定を初期化し $(VCInstallDir)includeを最上にした状態で、リビルドしたら 上手くいきました! includeの参照がPlatformSDKに変わってました。 先達の皆様、色々とありがとうございました。
410 名前:デフォルトの名無しさん mailto:sage [2009/07/09(木) 23:29:34 ] #include <stdio.h> #define N 10 int main(void){ int i, j = 1, x, y; int d[N][N]={}; /* 三角形を作成 */ for (i = 1 ; i < N ; i++, j = 1){ d[i][0] = 1; while (j <= i - 1){ d[i][j] = d[i-1][j-1] + d[i-1][j]; j ++; } } /* 三角形の表示 */ for (y = 0; y < N; y++) { for (x = 0; x < N-y-1; x++) printf(" "); for (x = 0; x < y; x++) printf("%5d ", d[y][x]); printf("\n"); } return 0; } pc12.2ch.net/test/read.cgi/tech/1245853701/835 pc12.2ch.net/test/read.cgi/tech/1246342847/440 これでどうかな?
411 名前:デフォルトの名無しさん mailto:sage [2009/07/12(日) 09:10:31 ] なんかひどいものを見た。
412 名前:デフォルトの名無しさん mailto:sage [2009/07/14(火) 23:10:33 ] ・環境変数の設定がおかしくてヘッダファイルが見つからない ・ヘッダファイル名をタイプミスした のどっちかじゃないかなあ? pc12.2ch.net/test/read.cgi/tech/1244942050/957 pc12.2ch.net/test/read.cgi/tech/1245059383/785
413 名前:デフォルトの名無しさん mailto:sage [2009/08/14(金) 17:15:35 ] 新規作成→プロジェクト→Win32→Win32プロジェクト で作成したVC++のアプリが Net3.5を入れないと「構成が正しくない…」のエラーで 起動出来なかったのですが ネイティブなWin32アプリのはずなのに 別途ランタイムが必要だったのはなぜでしょうか? 構成やコードを何度も見直しましたが Win32 APIしか使用してません
414 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 18:45:59 ] Microsoft製品にはよくある現象。 Visual Studio 2008なんてC++しか使わない人でも C#をインストールしなければならないという罠を実装。
415 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 20:06:29 ] いままでそんな事態に遭遇したことないわ
416 名前:デフォルトの名無しさん mailto:sage [2009/08/16(日) 23:59:19 ] .NET3.5を入れるときにたまたまCランタイムのDLLもインストールされただけだろう。 /MTでやっとくと解決するかもね
417 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 13:28:48 ] リリースビルドにした?
418 名前:デフォルトの名無しさん mailto:sage [2009/08/17(月) 20:02:59 ] >>416 /MTでやったらエラーは出ず Net3.5を入れなくても動作しました >>417 もちろんリリースビルドのexeです VS2008で作ったのをXP SP2で確認したのだけど 特別なAPIを使った訳でもないし ネイティブなWin32アプリが動かなかった原因は未だ分からず
419 名前:417 mailto:sage [2009/08/18(火) 00:27:15 ] >>418 状況から察するに別マシンで動かしてるんだよね もちろんリリースビルド、というのだから、もちろんランタイムDLLも別マシンにインストールしている?
420 名前:デフォルトの名無しさん [2009/08/18(火) 04:20:34 ] WIN APIのみのネイティブなアプリなら クライアント側は他にランタイムは不要じゃないの? 自分は開発したことないから詳しくは知らないけど
421 名前:デフォルトの名無しさん mailto:sage [2009/08/18(火) 09:58:07 ] ここでいうランタイムはC標準関数のランタイム /MTはスタティックリンク /MDはダイナミックリンク(DLL)
422 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 00:12:37 ] >>416 の1行目が正解のはず。 その場合、.NET Frameworkを入れずともVisual C++ランタイムだけをインストールすればいい。 現在、最新のはこれ。 VC++ 2005 www.microsoft.com/downloads/details.aspx?FamilyID=766a6af7-ec73-40ff-b072-9112bab119c2&DisplayLang=ja VC++ 2008 www.microsoft.com/downloads/details.aspx?FamilyID=2051a0c1-c9b5-4b0a-a8f5-770a549fd78c&DisplayLang=ja
423 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 02:31:50 ] >>422 みんな正解を言っている。 そんで、Win32APIだけしか使っていないのにmsvcrtを入れなければならない理由は何? というとこまで進んでたんじゃないの?
424 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 02:34:32 ] もちろん、>>417 も、 ランタイムをインストールしたが動かない →Debugビルド版のdllは頒布されていない という穴にはまりやすいという点で有意義
425 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 14:26:00 ] つまりWin32 APIのみのソフトでも ランタイムから何らかの機能を使っていて 単独では動作不可ということか そのランタイムは何かと一緒にインストされる事多いし 普段は目に見えない部分だから勉強になるなぁ
426 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 17:34:19 ] >>425 本当にWin32 APIだけで組めばCランタイムはいらないよ。 printf()もmalloc()もスタートアップルーチンも使えないけどな。
427 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 17:39:44 ] マングリングの兼ね合いで同一バージョンでビルドされたDLLが必要になったりしないもんなの?
428 名前:デフォルトの名無しさん mailto:sage [2009/08/19(水) 17:51:20 ] 全てを同一バージョンでビルドするのが前提でも、extern "C"するのが普通だと思う。
429 名前:デフォルトの名無しさん [2009/08/20(木) 21:24:16 ] すいません、質問させてください。 AfxBeginThreadを使ってマルチスレッド処理をおこなっているのですが、 制御関数の中でreturnして終わらせているはずなのに、 AfxBeginThreadの戻り値のCWinThread*が生きたままになっています。 そこで制御関数の中でおこなっているreturn処理に問題があるのではないかと 考えているのですが、 rerturn 0 と return -1 ではスレッド終了の動作に何か違いがあるのでしょうか?
430 名前:429 [2009/08/20(木) 22:22:31 ] 何度もすいません。質問を変えます。 CWinThread* th; th = AfxBeginThread(func,this); uint aaa::func(LPVOID lpvThis) { 〜略〜 if(){ return 0; } else{ return -1; } } 1.AfxBeginThread内でreturnした時点でスレッド自体は終了しているが、『th』は生成されている。 (th->m_hThreadはnullだがthはnullではない)という認識でよろしいでしょうか? 2.returnされた値が0か-1で動作上違いはあるのでしょうか? 3.returnされた値が0か-1でthの中身は違うのでしょうか?
431 名前:デフォルトの名無しさん mailto:sage [2009/08/20(木) 23:27:28 ] m_bAutoDeleteがFALSEの場合はスレッド作成側で破棄しないとダメだよ。 自動で破棄されるようにするには、サスペンド状態で開始し、m_bAutoDeleteをTRUEにし、リジュームする。
432 名前:429 [2009/08/21(金) 10:36:16 ] 429です。 あれからいろいろ調べました。 430の問について >>2.returnされた値が0か-1で動作上違いはあるのでしょうか? ない。GetExitCodeThreadを使って戻り値を判別しようと思えばできる。 >>3.returnされた値が0か-1でthの中身は違うのでしょうか? 違わない。AfxBeginThreadが実行された時点でthは生成される。 制御関数内でreturnされた値によって生成される、されないが決まるものではない (厳密に言うとreturnされた時点でth->m_hThreadの値が変わるので、違うといえば違うのだが、、、) というところまでです。 まだ分からないのが1なのですが、 一度生成された『th』が自動的にnullになることはあるのでしょうか? 431さんの言うとおり、サスペンド状態で開始し、m_bAutoDeleteをTRUEにし、リジュームすれば 『th』は自動的にnullになるのでしょうか? 逆にサスペンド状態で開始せず、リジュームしない状態ならばth』が自動的にnullになることはありえないのでしょうか? 431さん、ありがとうございます。 m_bAutoDeleteなのですが、あれって初期値はtrueですよね。 m_bAutoDeleteがtrueの場合はサスペンド状態で開始、リジューム等の処理をおこなわなくても自動的に破棄されるのでしょうか?
433 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:48:43 ] class CTest { private: int a; public: setValue(int val); // valをaに格納 }; CTest test; test.setValue(10); sprintf(buff,"%d",test); こうやると10がbuffに出力されるんですが これはよくないやり方ですよね (稀に不正な結果になりました) test+=10; if (test>=10) ... ++test; int val=(int)test; こういうのはoperatorを使えばaを対象にさせることができますが sprintf(buff,"%d",test); やはりこういうふうにtest単体だけを置いても 実際にはtest.aが返るようにするのは無理でしょうか? 何らかのoperatorが暗黙で呼ばれないかと思ったのですが どれを使っても駄目でした
434 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 13:59:53 ] >>433 一応C++ではiostreamを使うべしということになっている
435 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 15:49:04 ] >>433 intへの変換を定義して sprintf(buff,"%d",(int)test); ってやるのは?
436 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 17:45:22 ] >>434 iostreamって<<とかするやつですよね? これってあらゆるケースで機能するんでしょうか? 出力以外でも普通の変数のように振舞いたいんです //void func(int); func(test); // test.aが渡ってほしい >>435 もちろんoperator intなどもやってます でもこの書き方はintという型でほしいからであって 普段は型を意識しないようにしたいんです
437 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 17:58:19 ] >>436 > //void func(int); > func(test); // test.aが渡ってほしい intへの変換が定義されていれば、そのように振る舞う > 普段は型を意識しないようにしたいんです プログラマが型を意識せず、引数の型を意識しないprintf系関数を用い、誰が型を判断するのか。 ビャーネはそれが嫌いでiostreamを使うようにすべきと主張しているのではないか
438 名前:デフォルトの名無しさん mailto:sage [2009/08/21(金) 19:34:19 ] >>437 >> func(test); // test.aが渡ってほしい >intへの変換が定義されていれば、そのように振る舞う おっとすいませんこれは問題なかったですね 型がわからないsprintfなどが問題でした >ビャーネはそれが嫌いでiostreamを使うようにすべきと主張しているのではないか うーんなるほど ちょっとiostreamを考えてみます
439 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 00:12:28 ] 関数の引数でどの型でも指定出来るようにしたいのですが ポインターを使ってアドレス渡しをする方法以外に 何かないでしょうか? printfの変数指定する引数のような感じです
440 名前:デフォルトの名無しさん mailto:sage [2009/08/22(土) 01:15:44 ] >>439 printf: 可変個引数(1番目の引数、書式文字列で引数の型を判別) iostream: 想定される型に対して全部多重定義しておく ほか、場合によってはテンプレートやBoost.Anyという手も使える。
441 名前:デフォルトの名無しさん mailto:sage [2009/08/23(日) 13:24:37 ] 何をしようとしてるかに依るだろうね。比較的一般的な型が扱える関数 なら template が一番自然に思う。swap みたいに。ただ、swap は 定義されてるし、アドレス与えてるけど。
442 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 05:41:24 ] 質問があります。 C++でオブジェクトを作るとき 1)MyObj = a; 2)MyObj = new MyObj(); 上の違いって、1はスタック上にオブジェクトを作っている 2はヒープ上にオブジェクトを作っている というような解釈でいいのでしょうか? ということはJavaやC#は、基本的にプリミティブタイプ以外 オブジェクトはすべてヒープ上に作られているということですか?
443 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 07:44:10 ] >>442 1)と2)の例がおかしいし、C++がそうだとしてそれをJavaやC#にも当ては めるのは論理的ではない。
444 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 12:17:33 ] >>443 すみません 1)MyObj a; でした・・・ 理論的ではないのでしょうか? C++でもヒープ上で使われなくなったオブジェクトをガービッジと呼ぶと聞いたので根本的な部分は一緒なのかな、と思いまして・・・
445 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 12:37:23 ] >>444 ・>443は「論理的ではない」と指摘している。「理論的」かどうかは言及していない。 ・例がおかしいのは結局直っていない。 ・「ヒープ上で使われなくなったオブジェクト」は「ガービッジ」とは呼ばれない。 ・JavaやC#の実装がC++と同じである保証はない。
446 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 13:00:25 ] garbageのカタカナ表記ってJISとかで決められてるの?
447 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 13:03:02 ] ガベージ ガーベジ ガーベージ ガーベッジ ガービッジ この辺はどれでもまあ通じるからいいかなって思うわ ガベッジはイマイチ。
448 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 14:49:20 ] >>445 いやgarbageって呼ばれるから。出直してこい
449 名前:429 [2009/08/25(火) 15:55:43 ] 皆さん、失礼します AfxBeginThreadにて生成されたスレッドのm_bAutoDeleteの値がtrueであるにもかかわらす 破棄されないことがあるのはなぜでしょうか?
450 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 16:02:08 ] >>442 ,444 で、文意を汲みとってあげると 1) MyObj a; 2) MyObj* a = new MyObj; だとして、C++でさえ1がスタックで2がヒープとは限らない。 まあ普通に使われるWindowsやUNIXの処理系なら、前者はグローバル変数 やstatic変数じゃない自動変数ならスタックに確保されて、後者は operator newで変なことしてなければヒープに置かれると思う。 C#やJavaでどうなるかは、処理系のソースを見たことないので何とも言 えない。処理系がじゅうぶん賢ければ、newしてたってスタック上にオブ ジェクトを置くことは技術的に可能だと思う。
451 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 16:52:40 ] newするオブジェクトの実態をスタックに置く最適化は「エスケープ解析」という名称で有名。Javaはやっている。 逆に、MyObj a;をヒープに置くのは、C++/CLI(VC++で.NET Frameworkを対象にコンパイルしたとき)で行われることがある。 まあ、そんな例外的な事象もある。
452 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 16:58:20 ] >>449 AfxEndThreadは呼んでるのかな
453 名前:429 [2009/08/25(火) 17:27:49 ] 呼んでませんね。制御関数はreturnで終了させています。 制御関数を終わらせるにはreturnとAfxEndThreadの2つの方法が存在するが、 どちらでもOKだという認識です。 これが既に間違っているのでしょうか? 現在は431さんの方法 >m_bAutoDeleteがFALSEの場合はスレッド作成側で破棄しないとダメだよ。 >自動で破棄されるようにするには、サスペンド状態で開始し、m_bAutoDeleteをTRUEにし、リジュームする。 で試しています。
454 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 17:47:03 ] >>453 正常終了じゃないのにreturnで終わってるとか。
455 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:05:37 ] クラスについての質問なんですがあるサンプルプログラムで、 class Test01 { protected: int hoge01, hoge02; public: Test01(); ~Test01(); } // コンストラクタ Test01::Test01() : hoge01(10), hoge02(20) {} の様な部分があるんですがこの Test01::Test01() の後に続く : hoge01(10), hoge02(20) という記述の仕方は一体なんなんですか? その後のプログラムの動作からメンバ変数に値を代入しているというのは分かるのですが、どうもはっきりしてなくもやもやします。 なのでこの書式の具体的な動作と名称を教えて下さい。
456 名前:429 [2009/08/25(火) 18:15:16 ] >正常終了じゃないのにreturnで終わってるとか。 正常終了じゃないときはreturnで終わらせてはいけないのでしょうか? あと正常終了かどうかはどうやって判断すればいいのでしょうか? 自分の作った独自のロジックの中での正常かエラーかなんて AfxBeginThreadの戻り値には関係ないと思うのですが、、、 それとも制御関数の中でエラーが発生してスレッドが落ちてしまった時に AfxBeginThreadの戻り値はnullに戻らずそのままになってしまうということなのでしょうか? ついでにそのときに画面には何もエラーが出てこないものなのでしょうか?
457 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:20:49 ] >>456 俺もよく知らないで書いてんだけどね。 これ見ると正常終了以外はreturn使ってはいけないように見えるよね。 msdn.microsoft.com/ja-jp/library/2s21xzfe (VS.80).aspx スレッドで使用しているリソースはすべて解放し終わってから抜けてる?
458 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:26:11 ] >>455 メンバ変数を初期化する初期化子 初期化と代入の違いはメンバ変数がクラス型になるとわかる
459 名前:429 [2009/08/25(火) 18:28:09 ] >>457 本当ですね。 スレッドの正常終了は 「 AfxEndThread 関数を使うことも、return ステートメントを使うこともできます。」 と書かれているのに対し、 スレッドの中断は 「終了するスレッドから AfxEndThread を呼び出すだけです。」 と書かれていて、returnには一切触れていませんね。 何でもかんでもreturnで返しているのが原因かなぁ、、、
460 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:35:44 ] >>458 ありがとうございます
461 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 18:58:49 ] >>455 メンバ変数のコンストラクタ呼び出し 作成時にパラメータを必ず受け取る必要のあるクラスオブジェクトや基本クラスがあるときなんかに必要になる ちなみに変数名(初期化データ)はローカル変数宣言時でも使える, 代入演算処理が不要になるおまけつき void hoge(){ int a(0); // aを0で初期化 };
462 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:08:50 ] >>461 ご丁寧にどうもありがとうございます、参考になりますm(_ _)m
463 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:58:05 ] >>459 少なくともreturnで終了させる場合はデストラクタも呼ばれ正常終了する。 異常終了とはデストラクタが呼ばれないことを覚悟して強制終了させることだと思う。 msdn.microsoft.com/ja-jp/library/2s21xzfe (VS.80).aspx はAfxEndThreadで終了させる場合にデストラクタが呼ばれるとはどこにも書いてない。 MFCのAfXEndThreadは知らないが、Win32のEndThreadはデストラクタは呼ばれない。 ランタイムの_endthreadExも同様だけど、returnで終了した場合はデストラクタが呼ばれてから_endthreadEx が呼ばれるので問題ない。
464 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 19:59:27 ] >>463 訂正 Win32のEndThread X Win32のTerminateThread O
465 名前:429 [2009/08/25(火) 20:53:01 ] >>463 そうなんですか、詳しい説明、ありがとうございます。。。 原因わけとして、returnで返すことは何も悪くないと。 デストラクタが呼ばれないと、スレッドが生きたままになってしまうことがあるということか、、、 長い間ありがとうございました。
466 名前:デフォルトの名無しさん [2009/08/25(火) 20:58:02 ] char* pool = new char[100]; Hoge* ptr = reinterpret_cast<Hoge*>(pool); というコードがあったとして、 delete ptr; よりも delete [] pool; が呼び出された場合、 ptrは解放されずにメモリリークを起こすことになるんでしょうか?
467 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:03:05 ] というか、Hoge を new したわけではないのだから、Hoge を delete すべきではない delete は new した char[100] に対してのみ行うべき
468 名前:デフォルトの名無しさん mailto:sage [2009/08/25(火) 21:20:33 ] ポインタをキャストしてるだけだから参照してるアドレスは同じってことだ
469 名前:デフォルトの名無しさん [2009/08/25(火) 21:21:05 ] >>467 なるほど。 newはnew、キャストはキャストってことですね。 ありがとうございます。
470 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 02:42:25 ] >>468 だからといって ptr を用いてdeleteできるとは思わんがね
471 名前:デフォルトの名無しさん mailto:sage [2009/08/26(水) 10:06:16 ] デストラクタだけの問題だ
472 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 19:08:10 ] BYTE a[10],b[5]; としてaとbの配列を結合したい場合 新しい配列へ最初にa、次にbと ループでコピーする以外に良い方法はありませんか? 強引に普通のcharとしてstrcatすると 当然ながら上手く結合されなくて
473 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 19:13:32 ] memcpy()
474 名前:デフォルトの名無しさん mailto:sage [2009/08/27(木) 20:20:22 ] >>473 助かりました
475 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 03:00:17 ] ファイルの後ろから指定サイズ分の領域を削除したいのだけど 先頭から削除領域までをコピーしたファイルを新たに作り その後前のファイルを消すやりかたではなくて 直接その領域を無効化するにはどうすれば良いですか?
476 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 03:15:13 ] >>475 対象 OS のファイル操作 API を調べると良いよ。
477 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 08:25:48 ] CreateFileで開いたら SetFilePointerで削除したいところまで移動させて SetEndOfFileで切り捨てられる
478 名前:デフォルトの名無しさん mailto:sage [2009/08/29(土) 15:14:49 ] >>476-477 感謝します
479 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 01:59:29 ] 0x1234L のように末尾に付く Lの意味や読み方ってなんでしょう?
480 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 02:02:15 ] その数値がlong型であることを表す 読み方は「エル」でいいんじゃね?
481 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 02:03:45 ] >>479 整数リテラルの型を long にする指定。 読み方って、どういうこと?「える」とか、そういうの?
482 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 02:04:29 ] うは、ごめん。
483 名前:デフォルトの名無しさん mailto:sage [2009/08/30(日) 02:13:27 ] サフィックスという言葉を知りたかったんじゃないのかと
484 名前:名無しさん@そうだ選挙に行こう mailto:sage [2009/08/30(日) 03:45:26 ] なるほど、詳しい解説ありがとうございました
485 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 19:54:04 ] リストボックスでデータが追加されると 自動で最終行へスクロールするようにしたいのですが LB_GETCOUNTで項目数取得 → LB_SETCURSELでその行へ移動 とやっても上手く行きません どうやればいいでしょうか?
486 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 20:02:23 ] >>472 最初から連結したバイト列を保存する配列を用意しておいて、 前半をAとして使って後半をBとして使うのではダメなのか? >>485 そのあんたの使っているリストボックスとやらが含まれているライブラリのマニュアルを読んでください。 私には、それがどんなものかは想像するくらいしかありませんから。
487 名前:デフォルトの名無しさん mailto:sage [2009/09/05(土) 20:29:28 ] >>485 LB_SETCURSELのインデックスは0からのはずなのでLB_GETCOUNTの行は範囲外ではないか?
488 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 01:42:00 ] ReadFileでファイルからデータを読み込み ComboBoxへリストとして追加したいのですが 改行ごとの読み込み処理は皆さんどうやっていますか? 現在C++へ移行中で.NetではReadLineで簡単に出来たのですが なかなか良い方法が見つからず数日ほど悩んでいます
489 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 02:02:46 ] その流れだといろんな事が簡単にはできなくなるから覚悟しておいた方がいいと思うよー
490 名前:デフォルトの名無しさん mailto:sage [2009/09/06(日) 09:47:42 ] >488 改行単位で読むだけなら getline じゃないの?
491 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:05:18 ] ウィンドウサイズで 大きさを制限する方法なら沢山出てくるのに 矢印自体を無効化する方のが見つからない 案外スタイル指定だけで出来たりするのかな
492 名前:デフォルトの名無しさん mailto:sage [2009/09/07(月) 23:10:16 ] WindowsならWS_POPUPにしてWS_THICKFRAMEを外せばおk
493 名前:デフォルトの名無しさん mailto:sage [2009/09/08(火) 16:42:30 ] >案外スタイル指定だけで出来たりするのかな その通り
494 名前:デフォルトの名無しさん [2009/09/26(土) 03:42:47 ] for (int i=0;i<N;i++) { //処理A //処理B } より for (int i=0;i<N;i++) { //処理A } for (int i=0;i<N;i++) { //処理B } と書いた方が速くなるときがあるのですが、何故だかがわかりません。 考えられる理由を教えてください
495 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 03:52:15 ] 大雑把過ぎてよくわからんけど、ぱっと思いつくのは 1.キャッシュに乗った 2.loop unrollが効いた
496 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:04:41 ] 一番考えられるのは、測定ミスだな 釣りじゃないなら、Nの値と処理A,Bの内容を示せよ あと時間測定の方法も
497 名前:デフォルトの名無しさん mailto:sage [2009/09/26(土) 13:09:04 ] Windowsなら SetPriorityClass()、QueryPerformanceFrequency()、 QueryPerformanceCounter() を使って自動的に測定させればよい SetPriorityClassを使うのはバックグラウンドでいらないプロセスが動いて 測定値にバラツキが出るのを防ぐため 測定後に元に戻しておかないと大変な事になる(再起動)
498 名前:デフォルトの名無しさん mailto:sage [2009/09/30(水) 02:44:19 ] >>494 どっちかのループでSSEが効いたんじゃない?
499 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:00:21 ] C++でコードを書いていて引数にとったクラスにメソッドを適用する 関数を書きました。そのメソッドはクラスのprivate変数を変更するメソッドです。 デバッグプリントを追加して、メソッドが呼ばれている事や、 メソッドによってprivate変数が変更されている事を確認したのですが。 その関数を実行した次の行でそのprivate変数を確認するともとに戻ってしまっています。 適切に変更したいのですが、よろしくお願いします。 OS:MacOSX 10.6 Compiler: g++ 4.2.1 よろしくお願いします。
500 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:05:43 ] >>499 引数の型はなにかね?
501 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:19:33 ] メソッドの引数ですか? 独自で作ったHogeクラスのインスタンスです。 void FooBar (Hoge x) { x.SetX(10); } みたいな感じで使っています。 Hoge baz; FooBar(baz); //ここでbazのprivate変数Xは10にかわったはず!! baz.GetX() //なぜかここの返り値がもとのXのまま といった感じです。
502 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:23:54 ] そりゃbazの変数が変わったように見えてるだけで、実際変わったのはxの変数だ。 bazとxのアドレス確認してごらん。
503 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:26:00 ] なるほど、関数はHogeインスタンスのポインタを引数にとるようにし、 bazのポインタを引数に渡せばいいという事でしょうか?
504 名前:デフォルトの名無しさん mailto:sage [2009/10/18(日) 10:29:53 ] ポインタでもいいし、C++だと参照ってのもあるから好きなほうを使えばおk。
505 名前:デフォルトの名無しさん [2009/10/23(金) 09:01:30 ] 負の値も含めて四捨五入する方法を教えてください
506 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:22:17 ] std::vector<int> vA; std::vector<int> vB; // vAに値をpush_back vB.reserv(vA.size()); std::copy(vA.begin(), vA.end(), vB.begin()); としたときに vB.size() でサイズを取得するには何か細工が必要ですか?
507 名前:デフォルトの名無しさん mailto:sage [2009/10/23(金) 10:23:42 ] >>505 tech.ckme.co.jp/cpp/cpp_round.shtml
508 名前:506 mailto:sage [2009/10/23(金) 10:42:22 ] すみません解決しました
509 名前:デフォルトの名無しさん [2009/10/28(水) 05:31:06 ] Windowsで実行ファイルのディレクトリを取得する方法を教えてください
510 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 09:06:03 ] WinAPIスレにでもどうぞ。 それにしても、「実行ファイルのディレクトリ」とは「実行ファイルのあるディレクトリ」なのか 「実行ファイルを起動したときのディレクトリ」なのかはっきりしないもんだな。
511 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:00:44 ] 後者は普通カレントディレクトリと呼ぶだろ
512 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 22:40:41 ] 実行ファイルを起動したときのディレクトリのことをカレントディレクトリと呼ぶだって? やめてくれないか。
513 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:00:36 ] >>509 GetModuleFileName _fullpath とか、使って
514 名前:デフォルトの名無しさん mailto:sage [2009/10/28(水) 23:42:32 ] >>512 「実行ファイルを起動したときのカレントディレクトリ」と言いたいのだと思う。
515 名前:デフォルトの名無しさん mailto:sage [2009/10/29(木) 02:13:32 ] /usr/bin/ls
516 名前:デフォルトの名無しさん [2009/10/30(金) 03:42:49 ] デフォルトのコピーコンストラクタは ビットコピーをすると教わりましたが stlコンテナを含む自作クラスについて それをすると問題が起こりませんか? 大丈夫ですか? 代入してスコープ抜けるとき コピー先の奴が元のを破棄してしまいませんか?
517 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 04:50:35 ] >>516 > デフォルトのコピーコンストラクタは > ビットコピーをすると教わりましたが それは、うそだ。
518 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 06:57:24 ] >>517 では全てのメンバオフジェクトに operator=を適用するのですか?
519 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 07:38:15 ] >>518 コピーコンストラクタならコピーコンストラクタ。 operator= なら operator= 。
520 名前:デフォルトの名無しさん mailto:sage [2009/10/30(金) 07:40:49 ] >>519 アハ!悟った! あり^^
521 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:43:32 ] すみません。計算式についてなのですが long a = 3210; double b = 23.456789; long y = (a*3.1415) - (b+10.5) * 6.28; 例えばこうやって変数yを求めた場合、 「計算の為に見えない変数が確保され、メモリを消費する」という現象は起きるのでしょうか? もしそうだとするならば、 long a = 3210; double b = 23.456789; double c = a*3.1415; double d = (b+10.5) * 6.28; long y = c - d; こうやって(計算式がもっと長ったらしい場合)コードの可視性を良くしておいても メモリ消費や、処理の負荷は変わらなかったりするのでしょうか? それとも何かルールが有るのでしょうか。 「このURL読んで来い」とかだけでも何でも構いませんので、 情報を教えて頂けると助かります、よろしくお願いします。 orz
522 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:47:34 ] >>521 気にするな、コンパイラは善きに計らってくれる。
523 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 18:50:51 ] >>521 どうしても気になるなら、(最適化ありで)コンパイラにアセンブリ出力を出させて較べてみればいい。 >521が全てなら、恐らくはyが即値で得られるだろう。
524 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 20:51:29 ] >>522-523 アセンブリ出力・・やってみて確認してみようと思います。 ありがとうございました。 orz
525 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:05:01 ] すみません。 「整数同士の割算」の結果が「整数のみ」か「少数を含む」かを見分ける時、 今はintとdouble2つの割算をし、それらが等しいかif判定しているのですが もっとスマートな方法をご存知な方はいらっしゃられないでしょうか?
526 名前:デフォルトの名無しさん mailto:sage [2009/11/13(金) 22:40:57 ] if(a%b==0)
527 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 05:12:31 ] 割り切れるかどうかってこと? あんまりこういうこと言うスレではないかもしれんけど、正直、一瞬で>>526 が 浮かばないようだとヤバくね?
528 名前:デフォルトの名無しさん mailto:sage [2009/11/14(土) 16:04:09 ] そりゃ人によるでしょ。C/C++勉強し始めてすぐならしょうがない。 仕事でC/C++使ってる人間なら確かにヤバい。
529 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 11:17:26 ] >>526-528 成る程。何か効率化の方法が有りそうだとは思ってたのですが 526の式にピンとこず、実際数値を当てて試してやっと理解できました。 アマチュアだけど、センスがないなぁ・・自分。 ありがとうございました。
530 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 14:31:50 ] %を知らなかった(か、見たことはあるけど使ったことがなかった)のか?
531 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 15:37:13 ] >>530 いえ。知っていてほんの数回は使っていたんですが、実際に余った数値そのものが欲しい時ばかりでした orz 普段少数しか扱ってなくて、余り=何かの数値 という先入観が強かったのも有るかもしれません。 ピンと来れず申し訳ないです。 orz
532 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:12:09 ] まぁ謝ることではない FuzzBuzz問題を解けないのが普通、って話も少し実感できた
533 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 16:12:49 ] FizzBuzz問題だった
534 名前:デフォルトの名無しさん mailto:sage [2009/11/15(日) 23:27:57 ] まぁこういうのはセンスよりも経験だから 積めばそのうちピンと来るようになるさ
535 名前:デフォルトの名無しさん mailto:sage [2009/11/17(火) 19:07:57 ] 代入演算子=がオーバーロードされているBaseクラスを public継承したDerivedクラスがあり、 そのDerivedクラスは代入演算子=をオーバーライドしてあります。 そんなDerivedクラスのコンストラクタ中で、 @*this=100; Athis->operator=(100); Boperator=(100); CBase::operator=(100); これらはして良いコードでしょうか?
536 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 00:55:29 ] >>535 1〜4のどれもコンパイルエラーにならないんで、あとはやりたいことを 書いてもらわない限りはそれ以上の良し悪しを判断できない。
537 名前:535 mailto:sage [2009/11/18(水) 06:13:06 ] >>536 ありがとうございます。 コンストラクタ中で、thisポインタや代入演算子を使用しても大丈夫なのでしょうか? ということが伺いたかったのです。
538 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 08:31:52 ] >>537 同じじゃねーか馬鹿。 コンパイルは通る。一定の動作もする。 「大丈夫」かどうかは、少なくともその動作が期待している動作と合致するかどうかによる。 今のところ期待している動作は不明。したがって判別不能。
539 名前:537 [2009/11/18(水) 20:03:46 ] 仕様上未定義の動作でないことが分かれば大丈夫です。 ありがとうございました。
540 名前:デフォルトの名無しさん mailto:sage [2009/11/18(水) 23:21:25 ] 条件によっては未定義動作も有りうるって言われてるんじゃないの?
541 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:39:59 ] 質問です 10×10のマス目を「0,1,2」で埋める。使わない数字があっても可 それを例 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 0000000000 と言うテキストファイルで出力したい。ファイル名は連番。 すべての可能性を(回転して同一等を排除しない)出力するためのプログラムって どうやって書いたらいいんでしょうか?? 見当が付きません。
542 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:45:00 ] 3^100 ≒ 5.15×10^47通り全部書き出す気?
543 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 17:49:05 ] 3~100になるんですか…… 100~3だと思ってた………… えらいことになりますね。
544 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 18:07:30 ] >>541 のお陰で、STL に next_combination がないことに 今頃気付いた。
545 名前:541 mailto:sage [2009/11/19(木) 20:45:31 ] 少しアプローチの仕方を変えてみようかな まず10桁の数字を「1,2,3」で埋める。使わない数字があっても可 これなら3^10=59049個で、一つずつファイルに出力は厳しいけど 一覧で表示だけならできそうだ。 1111111111〜3333333333 までの数字で「0,4,5,6,7,8,9」を含む物を削除ってほうがわかりやすいのかな。 まぁそのあとどうやって縦に10桁並べるのかよくわからんけどww
546 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 23:10:34 ] 質問ですstd::string クラス文字列の内容ををchar型配列に移すときに char *text; string str ="testtxt"; int i=0; int len = str.length(); text = new char[len]; while(i<len){ text[i] = str.at(i); i++; } こうしたんですがもっとこう単純で綺麗に出来ないものでしょうか?
547 名前:デフォルトの名無しさん mailto:sage [2009/11/19(木) 23:44:51 ] >>546 whileの代わりにstd::copy(str.begin(), str.end(), text);とかstd::memcpy(text, str.data(), len)とか。 ところで、'\0'の終端がなくていいの?
548 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 00:32:49 ] いいんです。あったら上司に怒られます。
549 名前:デフォルトの名無しさん [2009/11/20(金) 01:19:51 ] 質問です。 ループ中の変数 j をファイル名としてテキストファイル"1.txt"〜"8.txt"を どんどん新規作成していきたいのですが、 「f.open(ji,ios::out)の第一引数は const char*だカス」と怒られます。 こういう場合はどのように行うのでしょうか? 自分で書いてみたものを張ります。 for(int i=0;i<9;i++){ char t_char[10]; sprintf(t_char, "%d", j); string ji = ""; ji += t_char; ji += ".txt"; fstream f; f.open(ji,ios::out) f.close(); }
550 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:22:43 ] >>546 std::vector<char> text(str.begin(), str.end());
551 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 01:23:37 ] >>549 ji.c_str()
552 名前:デフォルトの名無しさん [2009/11/20(金) 01:33:49 ] >>549 f.open(ji.c_str(),ios::out) かな
553 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 03:14:37 ] >>547 >>550 ありがとうございます!
554 名前:デフォルトの名無しさん mailto:sage [2009/11/20(金) 12:31:02 ] >>549 sprintf(t_char, "%d.txt", j); fstream f; f.open(t_char,ios::out)
555 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 20:36:18 ] >>551 >>552 >>554 ありがとうございます!!
556 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:20:28 ] Shift-JISの場合は char*型 strlen strcpyなどを使いますよね? UTF-8を扱う場合の変数型や文字列処理の関数はどうなりますか?
557 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:35:29 ] 基本的に、strをwcsに置き換えればOK
558 名前:デフォルトの名無しさん mailto:sage [2009/11/21(土) 23:42:03 ] UTF-8ってShift-JIS同様マルチバイト文字ではないのですか? UNICODEはワイド文字で、UNICODEとUTF-8は別物ですよね?
559 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 01:44:23 ] >>557 それはおかしい。 UTF-8はマルチバイト文字に分類される。 UTP-8を直接扱うときはcharとそれを扱う関数を使って問題ない。
560 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 01:53:17 ] えー。UTF-8というのはUnicodeのエンコード方式のひとつです。 Unicodeというのはいっぱいある文字を一覧表にしただけだと思ってください。 その一覧表をコンピュータでどのように表現するか、 2バイトで1セットとするコードを使うとか、 4バイトで1セットとするコードを使うとか、 最初の方は1バイトで、大部分は2バイトだけど、いい具合に3バイトとするコードを使うとかetc、etc… そういうなかのひとつがUTF-8です。UTF-8は可変長バイトです。 Unicodeを扱う場合、localeを正しくセットした上で、 wchar_tとwchar_tを処理するライブラリを使います。 ただし、UTF-8が本当に使えるかどうかは コンパイラしだいです・・・。
561 名前:556=558 mailto:sage [2009/11/22(日) 01:55:15 ] >>559 UTF-8を扱うときはShift-JISと同じように扱って大丈夫なんですね。 ありがとうございました。
562 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 03:26:17 ] >>560 UTF-8を単なるバイト列と見なして入力・処理・出力するだけなら、 単なるバイナリデータと同じchar型で扱って何の問題もない。 そのデータ中に'\0'が現れなければ、strlenやstrcpyはうまく動く。 普段使っているマルチバイト文字と改行の扱いが同じならテキストモードでのファイル読み書きもうまくいく。 ここまでlocaleの出番無し。 もちろん、この状態を「本当に使える」と言わないと主張するならそれに賛成するよ。
563 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 04:07:31 ] >>562 UTF-8はASCII互換部分があるからそういうことができるのかな。 いまいちこの辺はよくわからんです*_*
564 名前:デフォルトの名無しさん mailto:sage [2009/11/22(日) 10:05:16 ] UTF-8は外部インターフェース用と考えた方が良い 直接文字列操作するなんて考えたくない
565 名前:デフォルトの名無しさん [2009/11/23(月) 15:09:23 ] C言語の質問です。 C言語の基本はとりあえず理解したのですが、実際に自分でプログラムを組もうとした時 はて、真っ黒コンソールで走る、組んでて楽しいプログラムって何だ?と、困っています。 そこで、こんなコンソールのプログラムなら、作ってて面白いし、勉強にもなるんじゃ?といった案をお教えください。 ちなみに、基本情報処理者の資格を一応持っているので、多少のシステム関係の知識はあります。 プログラミング環境は、 ・Borland C++ Compiler 5.5.1 ・Microsoft Visula Stdio 2005 の二つあります。 どうぞお願いします
566 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:13:31 ] いや別にコンソール使わなくてもいいと思うけど
567 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:19:55 ] オセロ
568 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 15:29:16 ] ウィンドウ出す方法でも勉強したらいいんじゃね
569 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 16:58:24 ] >>564 ハァ?
570 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 20:47:18 ] >>569 俺も>>564 は普通に当然だと思うが
571 名前:デフォルトの名無しさん mailto:sage [2009/11/23(月) 21:21:03 ] >>565 テトリスなら2, 30分ぐらいで作れて遊べるから楽しいんじゃない? 昔、流行った頃は電卓に搭載されたぐらいシンプルなものだし
572 名前:565 mailto:sage [2009/11/23(月) 21:50:09 ] >>566 おぉそうですか。Winプログラムじゃ、"Hello, world"で挫折すると聞いていたもので・・・ 窓だと、どのようなプログラムがよいか、よろしければお教えくださいm(_ _)m >>567 なるほど!いいですね 次の手を思考ルーチンを、自分で考えてみるってのも、楽しいかもしれませんね! ありがとうございました >>568 ぐ、やはりWindowsプログラミングですかね、 とりあえずこのソースを打ち込め!的なページを見てみます >570 テトリスですか!いいですね、、、 mainをぐるぐる回して、関数の戻り値を確認すれば出来るのだろうか…やってみます! ありがとうございました
573 名前:デフォルトの名無しさん [2009/11/24(火) 00:20:57 ] CとC++の違いをお願いします。 また、 www.amazon.co.jp/gp/product/4797349816/ref=s9_simz_gw_s0_p14_i1?pf_rd_m=AN1VRQENFRJN5&pf_rd_s=center-1&pf_rd_r=0X37K4K5C7P745SGFKF4&pf_rd_t=101&pf_rd_p=463376736&pf_rd_i=489986 この本はCではなくC++を扱ってるように思うのですが、どうなのでしょうか
574 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 00:50:20 ] どうみてもC VC++はCも扱える
575 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:04:41 ] どう見てもC 初心者の俺がもってるイメージとしては c = 関数関数関数関数 cpp = c + クラス他
576 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 02:07:32 ] 言語仕様としては間違ってなくもないけど 実際のコーディングがまったく違うよ。
577 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 19:49:14 ] C++を有る程度使えるようになってから このまえCだけで全部つくる必要がでたときすごくとまどったな なんつっても文字列操作が…
578 名前:デフォルトの名無しさん mailto:sage [2009/11/25(水) 23:00:39 ] いつかC++のクラスやSTLが突然使えなくなる日が来るんじゃないかと思ふことがある
579 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 00:24:14 ] 〜ヘッダ〜 class BBB; class AAA{ BBB *processor; void do(); } 〜ソース〜 AAA::do(){ BBB &processor = *(this->processor); processor.execute(); } プログラミングの出来る友達のソースを見たらこのような記述がありました。 このようにするメリットって何があるのですか? 友達にも聞いたのですが、いまいち理解できませんでした。
580 名前:デフォルトの名無しさん mailto:sage [2009/11/28(土) 03:24:18 ] いわゆるpimplだな。 他のソースからそのヘッダだけインクルードしてAAAを使いたい場合に有効。 AAAのインスタンスを生成するには、AAAのメンバ変数のサイズが全部確定してないと ならない。プライベートメンバでも何でも。 でも、ヘッダにAAAのプライベートメンバ変数まで全部書くようにしてると糞ソースに なる。 だから、BBBを名前だけ宣言しといて、AAAのメンバ変数に「BBBへのポインタ」を 置く。ポインタなら中身が分からなくてもサイズは確定するから。 で、プライベートな実装は全部BBBの中に突っ込んで、AAAはBBBに丸投げする。
581 名前:デフォルトの名無しさん [2009/11/29(日) 05:28:36 ] 下のプログラムで、なぜかswitchのところでひっかかってしまいます。原因は何でしょうか。 プログラムの内容はsuujiに乱数を入れ、その乱数が〜なら○○を出力する、というものです。 int suuji; suuji = rand() % 5 ; printf("\n\n\n\nテストプログラム1\n"); switch (suuji) { case '0' : printf("\nCASE 0"); break; case '1' : printf("\nCASE 1"); break; case '2' : printf("\nCASE 2"); break; case '3' : printf("\nCASE 3"); break; case '4' : printf("\nCASE 4"); break; } return 0;
582 名前:581 [2009/11/29(日) 05:30:54 ] 頭にくる int main(void) がぬけてました。 また、ひっかかるというのは表示されないということです
583 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 06:40:40 ] suuji = rand() % 5 + 0x30; これで^^
584 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 08:38:50 ] やべえ俺>>583 を見てもなお引っかかっちまった 文字'0'(ASCIIコード0x30)と比較してるのか
585 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 14:14:52 ] if(1){****} とあった場合、 まともな(有名どころのg++とかVCとか)コンパイラなら if(1)という無駄なオーバーヘッドは消してくれると期待できますか? あるいはif(0)も同じく最適化してくれますかね?
586 名前:585 [2009/11/29(日) 14:22:33 ] #include <iostream> const int num = 1; int main() { if(num){std::cout << "num" << std::endl;} if(!num){std::cout << "!num" << std::endl;} return 0; } これがg++ (最適化-O1) でasmファイルが同じになりました。 他のコンパイラでも期待して良い物なのでしょうか?
587 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:11:43 ] よほど特殊な狂った(または単純に超絶バカな)コンパイラでなければ、最適化を 切ったりしない限りは当たり前のように消える
588 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 18:32:50 ] >>587 ありがとうございます。
589 名前:デフォルトの名無しさん [2009/11/29(日) 19:33:54 ] C++のクラス&構造体に関する質問です。 構造体を静的メンバとして定義するには、どうしたらいいのでしょうか。 以下のようなコードで、int型の数値をstruct型にまとめたいのです。 class Perception { public: static int trackingPointX; static int trackingPointX; } int Perception::trackingPointX = 0; int Perception::trackingPointY = 0; int main() { printf("%d", Perception::trackingPointX); return 0; } いろいろと検索・試作してみましたが、実装方法が分かりませんでした。 よろしくお願いします。
590 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:44:36 ] >>589 よくわからんな。 そのコードのどこが気に入らないの?
591 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:49:13 ] struct Perception { static int trackingPointX; static int trackingPointY; };
592 名前:589 [2009/11/29(日) 19:51:37 ] >>590 printf("%d", Perception::trackingPoint0.x); printf("%d", Perception::trackingPoint1.x); printf("%d", Perception::trackingPoint2.x); ・・・という風にしたいんです。
593 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 19:56:42 ] #include <stdio.h> struct _Perception { struct Point{ int x; int y; }; Point trackingPoint0; Point trackingPoint1; Point trackingPoint2; }; _Perception Perception; int main() { printf("%d", Perception.trackingPoint0.x); /* ...*/ return 0; }
594 名前:589 mailto:sage [2009/11/29(日) 20:22:19 ] >>593 構造体をクラス変数として使いたいなら、メンバ変数として定義した上で あらかじめクラスを作っておく方法しかないんですかね・・・。
595 名前:デフォルトの名無しさん mailto:sage [2009/11/29(日) 20:28:31 ] >>594 クラスインスタンス作るのが気に入らないなら 593 のメンバ変数に static つければいいだろうが。 >>593 要らんところで予約名使うなよ。
596 名前:589 mailto:sage [2009/11/29(日) 20:38:31 ] >>595 さんの方法も試してみます。ありがとうございます。 とりあえずは以下の方法で実装できました。(言われてみれば当たり前かも・・・汗) struct TrackingPoint { int x; int y; }; class Perception { public: static TrackingPoint trackingPoint0; static TrackingPoint trackingPoint1; static TrackingPoint trackingPoint2; }; TrackingPoint Perception::trackingPoint0 = {0, 0}; TrackingPoint Perception::trackingPoint1 = {1, 1}; TrackingPoint Perception::trackingPoint2 = {2, 2}; int main() { printf("%d", Perception::trackingPoint0.x); printf("%d", Perception::trackingPoint1.x); printf("%d", Perception::trackingPoint2.x); return 0; }
597 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 00:53:41 ] MFCを使ったサンプルプログラムを実行したいのですが、 .NET 2008だと有料版を買うしか無いのですよね・・・?
598 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 01:28:33 ] >>597 「.NET 2008」って、「Visual Studio .NET か Visual Studio 2008」ってこと? まあ、そうだね。MFCを無料で入手する手段はないと思うよ。 ちょっと試すぐらいなら、現在無料で配布中の VS 2010 懼ァイ22でいけるか もしれない。
599 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 04:05:07 ] >>598 説明が足りなくてすいません Visual Stadio .NET Express EditionでMFCを使用したサンプルプログラムの動きを見たかったのです VS2010なら、動作してくれるのかな? ちょっとダウンロードして実行してみます
600 名前:デフォルトの名無しさん mailto:sage [2009/12/02(水) 10:03:55 ] 1回動けばいいだけなら評価版をダウンロードすればいいだけだな
601 名前:デフォルトの名無しさん [2009/12/07(月) 21:57:33 ] a、b、cの3つのint型にそれぞれ8bit(01001110のようなもの)のデータをくっつけたいのですが、どうすればよいでしょうか。 つまり、aに5、bに3、cに8というデータがあったら、新しいint型のdに538というように ひとつの24bitのデータにしたいのです。 なにか良い手段がありましたら、お願いします。
602 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:27:47 ] >>601 a、b、cを左に8回シフトして0xffffff00(32bitの場合)とANDを取り 次に8bitデータとORを取る
603 名前:デフォルトの名無しさん mailto:sage [2009/12/07(月) 23:28:31 ] あっごめん24ビットデータか じゃあ0xffff00とANDを取って
604 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 01:14:20 ] >>601 > つまり、aに5、bに3、cに8というデータがあったら、新しいint型のdに538というように これ、 4 ビットずつ 3 つで 12 ビットのデータにしてね?
605 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 01:27:26 ] >>604
606 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 04:37:51 ] >>601 1行目と2行目以降が同じ意味に聞こえないんだけど、もしかしてこういうこと? int d = ((a & 0xff) << 16) | ((b & 0xff) << 8) | (c & 0xff);
607 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 07:44:40 ] visual C++ 2008 Express Edition でシンプルなソフトを作ってみました。 そこで質問があるのですが、もし分かる人いたら教えてください。 @実行ファイルにアイコンをつけたいんですが、プロジェクトファイルを作成してしまった後でも、 アイコンをつける方法はあるのでしょうか。 (アイコンの絵柄のきれいさはあまりこだわりませんが、せっかくなんでアイコン作ってみたくて) ARelease環境で作成されたフォルダをみると プログラムの中で使う画像ファイルがなぜかないので手作業でフォルダに追加しないといけなかったり、 作成されたフォルダの中にexeファイル以外のファイルが8つぐらいあったりしてごちゃごちゃするので、 最終的に作成するファイルをexeファイルだけにする方法はないでしょうか?
608 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 12:46:29 ] 昔はリソーススクリプトをごりごりしていたけど(VC++ 6.0) いまはXMLになっている気がする(VS 2003頃からか) とりあえず、スレ違い Visual Studio 2008 Part 19 pc12.2ch.net/test/read.cgi/tech/1259076828/
609 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 14:11:26 ] >>607 >最終的に作成するファイルをexeファイルだけにする方法はないでしょうか? ビルド後のイベントに消すコマンドを書けばよいがそんなことは普通しない。 分割コンパイルの意味がなくなる。
610 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 20:40:37 ] >>601 が真にやりたいことが理解できてなくて 説明がうまいこといってないのか 俺の読解力がないのかが判断つかねえ
611 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:29:28 ] R=5 G=3 B=8から、RGB値の#538が欲しい、だと解釈したので>>606 でいいと思ってる
612 名前:デフォルトの名無しさん mailto:sage [2009/12/08(火) 21:41:17 ] サンプルのdが0x538だったら惑うことも無かったろう
613 名前:612 mailto:sage [2009/12/08(火) 21:42:19 ] 8bitの合成で24bitだから正しくは0x050308か
614 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 12:49:28 ] >>601 今の人はビットフィールドって知らないのか?
615 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 12:51:22 ] はぁ?
616 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 12:58:29 ] >>610 1行目と2行目の関連がまるで見えないので説明の問題だと思う
617 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 13:00:10 ] >>614 もし、8ビット毎の合成だったらunionだけでOKだな
618 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 16:24:01 ] C++/CLIってググっても情報少ないんだけど、 あまり使われていないのでしょうか?
619 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 16:31:41 ] えぇ、使われてません。 C++のルールからあまりに外れまくっている上に C#より面倒なくせにやれることはC#未満という有様なので。 用途がすごく限られます。
620 名前:デフォルトの名無しさん mailto:sage [2009/12/11(金) 16:45:58 ] >>618 殆どはC#とC++の情報を読み替えるだけで賄える
621 名前:デフォルトの名無しさん [2009/12/12(土) 10:38:17 ] aとbというunsigned long型で、 aとbの差が±30以上ならint型cに1を入れる、というプログラムを作成したいのですが、 なにかいい方法はありませんか?
622 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 10:42:36 ] 普通に引き算の結果を比較するんじゃダメなの?
623 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 10:43:50 ] >>621 どうやったらダメだったのかとか自分の案くらい書けば?
624 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 10:44:31 ] unsigned じゃ引き算の結果のマイナスは表現できないから困るだろ
625 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 10:51:25 ] int main(){ unsigned long a = 39.5; unsigned long b = 6.4; unsigned long d; if(a>b){ d = a-b; }else{ d = b-a; } int c = 0; if(d>30){ c= 1; } cout << c << endl; }
626 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 10:51:25 ] 絶対値とりゃいい
627 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 11:49:49 ] if (a >= b + 30 || b >= a + 30) { c = 1; }
628 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 11:53:10 ] 最大値付近だとまずくない?
629 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 12:15:02 ] まずかった なんか綺麗に書けないかなと思ったけど難しかった
630 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 12:34:01 ] if (abs(a-b) > 30) c = 1;
631 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 12:34:58 ] 「30以上」
632 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 12:42:20 ] abs()の引数はintじゃねーの?
633 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 13:28:53 ] unsigned longのままでやりたいなら c = (a > b ? a - b : b - a) > 30 ? 1 : c;
634 名前:デフォルトの名無しさん [2009/12/12(土) 15:08:18 ] 横からスマソ int型のif文で、 if (x <= -50) みたいにできなかったっけ?
635 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 15:16:04 ] >>634 出来るが、一体どうしたね
636 名前:デフォルトの名無しさん [2009/12/12(土) 15:21:43 ] いや、int型のほうは負も扱えたよなと思って
637 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 15:22:29 ] >>636 今更なにを。。。 どの言語を普段お使いの方ですか?
638 名前:デフォルトの名無しさん [2009/12/12(土) 18:59:13 ] ここ数年、開発部門から離れてCとかC++も触れる機会が無かったからさ そろそろ戻れるって聞いて、必死で覚えなおしてる
639 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 19:01:58 ] ×戻れる ○戻される
640 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 19:14:33 ] >>1 なんで宗教的な話は禁止とか書いてあんの? プログラムと宗教って何か関係性でもあったの? 普通に考えたらプログラム板なんだから宗教の話なんてスレチのイタチだってのに わざわざ書くってことは何か理由がってのこと?
641 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 19:51:37 ] はい
642 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 20:37:59 ] >>640 vimとemacsのどちらがよりC++コーディングに適しているのか教えてください
643 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 21:20:01 ] 以下のコードのように文字列定数の先頭アドレスを返して 関数呼び出し元で利用するのは問題ないでしょうか。 手元の環境(gcc 4.4.0)では"abc"と表示されました。 #include <stdio.h> char *func() { return "abc"; } int main(void) { puts(func()); return 0; }
644 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 21:41:40 ] >>643 定数は問題ない
645 名前:デフォルトの名無しさん mailto:sage [2009/12/12(土) 21:58:57 ] 問題ないけど戻り値の型はconst chara*のほうがいいと思う
646 名前:643 mailto:sage [2009/12/12(土) 22:46:26 ] ありがとうございます。
647 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 04:59:03 ] >>642 それはエディタ論争だから鼬害
648 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 10:14:46 ] >>647 バカ発見www 単に彼は「宗教的な話は禁止」の例えで出したんだろjk
649 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 10:20:43 ] この板における「宗教」の意味を理解してないか、わざと理解してないふりをしてるアホには、 何を言っても無駄だろう。
650 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 11:21:40 ] viにしろ!!!!
651 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:22:13 ] 神は量子クラスを継承して光子オブジェクトを作られたわけだが それ以前から原子クラスを継承した水素オブジェクトは存在したのだな
652 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:33:22 ] >>651 いや存在してないと思うぜ。逆じゃねぇのか? あと、テンプレートの特殊化の方が近いと思うんだぜ。 template<double spin, double Mass, double Electric charge, 俺の知らない要素> class SubatomicParticle;
653 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 13:48:26 ] 逆というか、skyとgroundクラスをまず最初に作って そのとき一緒にwaterクラスも実装したらしい
654 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 15:26:49 ] 宗教的な話題は禁止します。
655 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 15:33:52 ] リアル宗教ktkr
656 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 17:01:10 ] C#信者だけど質問してもいい?
657 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 17:31:08 ] どうぞ
658 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 17:40:34 ] どうぞじゃねぇよ スレ違いだろ
659 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 18:00:32 ] C#信者だけど(C/C++の)質問してもいい?
660 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 18:08:40 ] >>659 ダメ 改宗してからおいでなさい。
661 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 18:15:40 ] C/C++/C# は宗教だったのか
662 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 18:26:25 ] そうです!!
663 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 20:14:15 ] すみませんがどうすればいいか教えてください。 下記のコードのcuetarget=cue_parse_file(fp);までは実行に成功するのですが、cd_dump(cuetarget);以降が実行されず、実行が止まってしまいます。 #include "C:/libcue-1.3.0/bin/cd.h" #include "C:/libcue-1.3.0/bin/cdtext.h" #include "C:/libcue-1.3.0/bin/cue_parser.h" #include "C:/libcue-1.3.0/bin/libcue.h" #include "C:/libcue-1.3.0/bin/rem.h" #include "C:/libcue-1.3.0/bin/time.h" int main(int argc, char** argv) { FILE *fp; /*ファイルポインタの宣言 */ Cd *cuetarget; /* ファイルのオープン */ if ((fp = fopen("S:/CDImage.cue", "r")) == NULL) { printf("file open error!!\n"); exit(EXIT_FAILURE); /*エラーの場合は異常終了する */ }else{ cuetarget=cue_parse_file(fp); if (cuetarget=NULL){ exit(EXIT_FAILURE); /*エラーの場合は異常終了する */ }else{ cd_dump(cuetarget); } } fclose(fp); /*ファイルのクローズ */ return (EXIT_SUCCESS); ・エラーメッセージ 特になし。 ・実行環境 OS:WindowsXP コンパイラ:MingW IDE:NetBeans6.0.1 使用したライブラリ:libcue-1.3.0( ttp://sourceforge.jp/projects/sfnet_libcue/ ) ・最終的にやりたいこと Cueシートの全てのトラックの、トラック名、アーティスト名などの属性を、別に用意したファイルの内容で自動的に置き換える。 (そのためにCueシートの解析用ライブラリをDLしてきた。)
664 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 20:18:23 ] とりあえず、PATHを通しとけ CUEファイルに原因があるかもしれないから CUEをどこかにあげてみて
665 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 20:44:05 ] >>664 PATHは通してあります。 CUEはこれです。 ttp://www1.axfc.net/uploader/Sc/so/63656
666 名前:デフォルトの名無しさん mailto:sage [2009/12/13(日) 21:19:00 ] >>663 この辺があやしい if (cuetarget=NULL){
667 名前:663 mailto:sage [2009/12/13(日) 21:27:17 ] 解決しました。ありがとうございます。我ながら何をやっているのか…。
668 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:10:06 ] 定数を左辺値にしないから・・・・・
669 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 20:27:02 ] いまどきのコンパイルなら警告出るだろ
670 名前:デフォルトの名無しさん mailto:sage [2009/12/14(月) 22:50:01 ] 脳内警告が常に出ます
671 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:07:23 ] >>668 左辺値の意味わかってないだろ。 まあどっちにしても定数を左に置くやつは信用できないけどな。
672 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:30:07 ] >>671 右の間違いだろ
673 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 10:44:07 ] プログラムの意味的にそうするのが自然であればそれでいいけど 単に凡ミスを防ぐために読みづらくするのは嫌だと言ってんの。
674 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 11:21:39 ] なんだ嫌なのか。
675 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:01:02 ] 俺も定数を左に置くような奴を見たら、どっかおかしい人だと思うだろうな、正直。 当然、そう書こうとする動機は知っているが。 ==と間違えて=を書く確率は、ちょっと慣れたまともなCプログラマなら0に限りなく 等しい。つまり、予防策としての効果も0に限りなく等しい。 よって、見た目に優れた書き方の方が良いが、左に定数を書く方がみんな見やすいと 思っているなら相当な変わり者だろう。物事は何でもかんでも対称的ではない。左と 右でどっちが感覚的に自然か、についても対称的な話ではない。現実に定数は右に 書かれる率が圧倒的に高い。 というようなことを感覚で判断できないか、または==と=を間違えることが実際に ある人なのか、どちらにしても信用には値しないだろうな。
676 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:03:56 ] ミスの確率の高さ低さより、致命傷になるかどうかじゃね? 今時のコンパイラを正しく使っていれば、間違えても致命傷にはならない だろうとは思う。
677 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:11:20 ] if ( MIN <= x && x < MAX ) {} とかは書くけど、 ==と=のミスを避けるために左に定数を書くことはないなぁ。 でも、 >ちょっと慣れたまともなCプログラマなら0に限りなく は、ソースがないから単なる妄想だね。^^ そしてハーブサッター先生の言葉を思い出そう。
678 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:16:48 ] ハーブサッターの言葉なんぞ多すぎてどれだか分かんねぇよw
679 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 12:21:59 ] ハーブサッターの言葉? 気の利いたコードは害悪だ、ってのは覚えてるな。
680 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 13:54:54 ] 個人的には >>677 > >ちょっと慣れたまともなCプログラマなら0に限りなく > は、ソースがないから単なる妄想 そういう統計は誰も取ってくれそうもないが、経験則としてはあるなあ。
681 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 14:08:48 ] 長くCを書いてると、比較の時は自然と==と入力してしまう
682 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 15:02:15 ] 0に限りなく近いなら定数を左辺にするテクや、=に警告するコンパイルなんて生まれなかったろうに。
683 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 15:06:07 ] if (!ちょっと慣れたまともなCプログラマ) { 682 名前: デフォルトの名無しさん [sage] 投稿日: 2009/12/15(火) 15:02:15 0に限りなく近いなら定数を左辺にするテクや、=に警告するコンパイルなんて生まれなかったろうに。 }
684 名前:デフォルトの名無しさん [2009/12/15(火) 15:17:15 ] 小心者はどこへいった・・・
685 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 21:57:19 ] 俺様は比較で代入なんて間違えないぜwwwwっていう勘違いちゃんならいるけど
686 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 22:35:07 ] 俺様は比較で代入なんて間違えないぜwww ただタイプミスするだけなんだぜwwww ダメじゃんorz
687 名前:デフォルトの名無しさん mailto:sage [2009/12/15(火) 23:37:27 ] \(^o^)/オワタ
688 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 10:47:01 ] 結構膨大なコード書いてきたけど、ごく初期は別にして普通に一度も間違えないけどな
689 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 11:08:54 ] 間違えることよりも、早期発見できるほうが重要だけどな。 他人の作ったコードもメンテすることあるし。
690 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 14:09:20 ] タイプミスばっかでげんなり
691 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 15:27:40 ] >>688 PL/SQL と並行してやってると、代入/比較どころか 文字列のクォーテーションまで間違うぜ!
692 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 16:10:07 ] 他人に「定数は左に書こうぜ」とか言ってたらさらにキチガイじみてるな
693 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 16:11:16 ] 他人の作ったコードのメンテで「定数は左に」って役に立つの? 右に書いてあるコードを全部左に置き換えてからコード読むとか?
694 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 16:17:45 ] 「仕事じゃバカのコードもメンテしなきゃならないんだよ」理論の失敗例だな
695 名前:デフォルトの名無しさん mailto:sage [2009/12/16(水) 18:25:03 ] vbの即時で文法ミス見つける機能が他の環境にもあれば そのうち実現するか
696 名前:デフォルトの名無しさん [2009/12/17(木) 04:02:14 ] パソコンの時刻を2038年1月19日3時14分7秒の30秒前に設定して30秒後どうなるのかを誰か試してみてくれないか? うちのパソコンでは何かうまくゆかないんだ
697 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 05:03:28 ] 女の腐ったような回りくどさだな どうせ30年弱の間には解決するだろ
698 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 08:04:46 ] 何でC/C++スレで2038年問題を?
699 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 11:32:43 ] 「C/C++スレ」ではなく「小心者スレ」だから
700 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 11:33:45 ] >>695 文法ミスじゃないから原因を特定しにくいバグになるんじゃないの? だから、コンパイル時にエラーとなるように定数を左辺に置くという小技が出てきたわけで。 今は警告でるんだからそんな小技はデメリットしかないと思うよ
701 名前:541 mailto:sage [2009/12/17(木) 17:41:27 ] >>541 で質問した者です。 検索の結果、やりたいことは「重複順列の列挙」と言うのだと分かりました。 また、列挙までのサンプルソースも手に入りました。 が、 あまりにも数字が多いので、必要のない物を出力前に除外しようと思い立ちました。 そこで質問です。除外条件で ・m桁目に2がある数値は除外 ・0が5個以上連続している数値は除外 ・左右反転して同一数値になるものは最初に出力した物以外出力しない 等々、どうやって条件付けしたらいいのか分かりません。
702 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 18:03:47 ] >>701 どういうものが必要ないかを俺が決めていいのかよ?? じゃぁ(ry
703 名前:デフォルトの名無しさん mailto:sage [2009/12/17(木) 19:37:56 ] 条件付けで処理が増える分、余計に遅くなるだけな気もするが。
704 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 06:40:17 ] 選択整列法の平均比較回数が約N^2/4になるのはなぜですか?
705 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 10:50:35 ] 平均っていうか、単純選択ソートの比較回数は固定のはずでは
706 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 10:59:38 ] 選択ソートの比較回数は(N-1)*N/2じゃないの?
707 名前:デフォルトの名無しさん mailto:sage [2009/12/18(金) 11:38:27 ] 失礼、挿入整列法でした。
708 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 00:49:35 ] スレ違いかもしれないけど。 wiiyourselfとかwiiremoteなどのwii関係のC,C++用のライブラリーでとっつき安いライブラリのおすすめがある人いませんか? 自分の作ったVRウォークスルーもどきにヘッドトラッキングを導入したいんだけど。
709 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 01:22:28 ] >>707 俺最低。異物挿入法とか読んだ。どこに異物があるのか。
710 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 01:49:11 ] >707 大雑把に説明してみる。 Insertion sort ではどの位置に要素を挿入するべきかを判定するために比較が用いられている。 最初逆順に並んでいる場合(=最悪の場合)は比較回数は 0+1+2+...+(n-1)=n(n-1)/2 になる。 各ステップにおいてどの位置に挿入することになるかは等確率となるため平均を考えると半分の位置になる。 従って 0/2+1/2+2/2+...+(n-1)/2=1/2(0+1+2+...+(n-1))=n(n-1)/4 となる。
711 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 01:58:03 ] 補足。 >各ステップにおいてどの位置に挿入することになるかは等確率 例えば最悪値で n-1 回比較するケースにおいて平均を考えると (1+2+...+(n-1))/(n-1) = n(n-1)/2/(n-1) = n/2 で大体半分。↑の式でも正確じゃないけどまぁオーダーとしては合ってるはず。
712 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 02:59:32 ] 質問なのですが、投げられた例外の型ってどうやって判定してるんですか? catchで分岐する時です。 静的に分かるものですか? それとも実行時型情報みたいなの使うんでしょうか?
713 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 08:32:55 ] >>712 っ msdn.microsoft.com/ja-jp/library/cc440190%28VS.71%29.aspx
714 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 08:36:11 ] >712 静的には分からないので >実行時型情報みたいなの を使ってる。 g++ の場合だと正に std::type_info を使ってるらしい。 詳しく知りたい場合は BinaryHacks おすすめ。
715 名前:デフォルトの名無しさん mailto:sage [2009/12/19(土) 14:51:07 ] try{ // コード }catch(Exception1 e){ //例外1 }catch(Exception2 e){ //例外2 }catch(Exception3 e){ //例外3 }
716 名前:デフォルトの名無しさん [2009/12/20(日) 16:14:52 ] #include <iostream> using namespace std; int main() { int n=100; double k = 1.0/n; for(double i=0.5;i >= -0.5; i-=k){ double x =0.0; x = i; cout << x << endl; } return 0; } これをコンパイルして実行したら0のところがe-16とかの小さい数になってしまいます。 原因を教えてください
717 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 16:18:46 ] >>716 www.kouno.jp/home/c_faq/c14.html
718 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 17:25:17 ] >>717 ありがとうございます 0のところだけ別に入れます
719 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 19:23:07 ] >>716 0以外の場合は浮動小数点誤差が情報落ちして消えてしまうけど、 0の場合は誤差がそのまま有効な数値になるから。 で cout << x << end; を使わず printf("%.2f\n", x ); を使えばいい
720 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 20:04:57 ] 定数は左に、インド人は右に。
721 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 20:44:05 ] なつかしいなおいw
722 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:42:41 ] インド人は右ってどういう意味?
723 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:51:22 ] ハンドルは右
724 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 21:54:28 ] そういう意味か!!!
725 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 22:49:34 ] >>724 「インド人を右に」でぐぐれ
726 名前:デフォルトの名無しさん mailto:sage [2009/12/20(日) 23:01:19 ] >>716 みたいなのだと、100倍した値で計算して、表示の時に100分の1するのもいいかもな
727 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 01:03:47 ] 別の言い方をすれば、ostreamで浮動小数点数を出力しようとするとprintfの%g相当ということだな。 <iomanip>をインクルードして、例えば cout << fixed << setprecision(2) << x << endl; と書けば、%.2f相当の出力になる。
728 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 22:37:27 ] VS2010β2のC++を使ってみました。 UInt32 aa; aa = 0x12; FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create); BinaryWriter^ binWriter = gcnew BinaryWriter( fs ); binWriter->Write( aa ); binWriter->Close(); fs->Close(); 作成したtmp.binが使用中のままになっているため、2回繰り返すとエラーになってしまいます。 Closeしただけではダメなのでしょうか? すいませんがよろしくお願いします。
729 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:35:48 ] >>728 CLIの質問は大胆すぎるので別スレでどうぞ
730 名前:デフォルトの名無しさん mailto:sage [2009/12/21(月) 23:38:00 ] >>728 エラーとはどういうこと? 次のように、単純に2回実行することを試したが、なんの例外も投げられることなく実行されるけど。 using namespace System; using namespace System::IO; int main() { UInt32 aa; aa = 0x12; { FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create); BinaryWriter^ binWriter = gcnew BinaryWriter( fs ); binWriter->Write( aa ); binWriter->Close(); } { FileStream^ fs = gcnew FileStream("tmp.bin", FileMode::Create); BinaryWriter^ binWriter = gcnew BinaryWriter( fs ); binWriter->Write( aa ); binWriter->Close(); } }
731 名前:728 mailto:sage [2009/12/22(火) 01:08:58 ] >>730 すいません、他のサブルーチンがひっかけてました。 ありがとうございました。
732 名前:デフォルトの名無しさん mailto:sage [2009/12/22(火) 01:35:39 ] >>731 そうそう、BinaryWriterのCloseは、大元のストリームもCloseすることになっているから、 fs->Close()は無くても平気だよ。もちろん、あっても害はないから気にしなくても全然問題ない。
733 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 02:58:29 ] すみません、 普通、構造体のインスタンスに、STLで見かける.size()メンバなんて有りませんよね? ttp://marupeke296.com/DXG_No37_AnimationController.html ここの「アニメーション上位レベル構造体」が「SetLoopTimeメソッド」で.size()されていて そのままインスタンスを作ってコンパイルしようとすると、当然のように >error C2228: '.size' の左側はクラス、構造体、共用体でなければなりません と出ます。 この構造体は何か、普通と違った使い方をしているのでしょうか? それとも私が、何か知らなければいけない事を知らないだけなのでしょうか。
734 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 04:52:19 ] >733 C++は詳しく知らないし、僕が昔使っていたときにはinterfaceなんてなかった気もするがおそらく class CHighLevelAnimController : IHighLevelAnimController { private: vector<struct HLANIMATION_DESC> m_Amin; CHighLevelAnimController operator=(CHighLevelAnimController& c) { return c; } public: CHighLevelAnimController() { } ~CHighLevelAnimController() { } bool SetLoopTime(UINT, FLOAT); ... }; CHighLevelAnimControllerクラスは、IHighLevelAnimControllerインターフェイスを継承(実装)して m_Aminオブジェクトは、vector<>のようなテンプレートクラスのインスタンスとしてCHighLevelAnimControllerクラスまたはその基底クラスで定義されている interfaceキーワードに詳しい人詳細キボン
735 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 05:39:46 ] >>734 Windowsでは、どこかのヘッダで#define interface structってされているだけ。 >>733 自分も、m_Animは実際にはなんらかのSTLコンテナか何かなのだと思う。
736 名前:デフォルトの名無しさん mailto:sage [2009/12/24(木) 11:08:03 ] >>734 >>735 何か特別な使い方かと思いましたが、STLに包んでいるとかなのですね。 ありがとうございました。
737 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:13:02 ] すみません。 起動や大型のファイル群を読み込むなどで10秒前後待たせる時 画面にLoading表示やその進行状況を表示したいのですが、 あれはどう実装するものなのでしょうか? 普通に組むと1つの工程(ファイルなど)単位で処理が停止してしまいますし、 「Loading」「読み込み画面」などの検索ワードでは違うものばかりHitし、 実現方法を見つけられずにいます。 何かご助言を頂けると幸いです orz
738 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:24:50 ] マルチスレッド
739 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 16:57:06 ] 1ファイルの読み込み途中の経過を出したいなら、読み込みの関数を呼ぶ度に進行状況のウィンドウを書き換える
740 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 17:13:38 ] >>738 ググってみました。マルチプロセス処理というものが有るのですね。 これで実現への道筋が見えました。ありがとうございました。 >>739 そうですね。その程度なら勉強〜開発時間を殆どかけずにやれそうですね。 ありがとうございました。
741 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 17:15:01 ] 凝ったLoading画面を作るならマルチスレッドが楽 止まってないことだけ示したいなら、一部読み込んでは表示、を繰り返せばいい
742 名前:デフォルトの名無しさん mailto:sage [2009/12/28(月) 17:15:41 ] マルチプロセスとマルチスレッドは一般的には別物だぜ
743 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 09:19:30 ] 端折れば マルチプロセス>メモリ空間が別 マルチスレッド>同じメモリ空間
744 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 14:01:26 ] HAL研のプログラミングコンテストの難易度をおしえてください。 ひととおり文法勉強したんですが、難しく思えます
745 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 18:35:29 ] 2009年のを見たけど、C++を適切に勉強していれば(文法的には)難しくはないと思うけどな 最短経路問題とかその類のロジックを問う問題でしょ 文法が分からないのであればそれ以前のレベルってことだね
746 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 19:20:51 ] どうやらプログラミングではなく、アルゴリズムを競うコンテストっぽいね。
747 名前:デフォルトの名無しさん mailto:sage [2010/01/04(月) 21:20:54 ] >>744 俺も去年の春からプログラミングを勉強し始めたばかりで参加してるけど アルゴリズムを考えるだけだから文法がわかってれば何も難しくもなくね? 難易度はどうですかって質問の答えにはなってないとは思うけど
748 名前:デフォルトの名無しさん mailto:sage [2010/01/05(火) 01:18:43 ] >>745 >>746 >>747 なるほど。じゃ用意されている関数を使えるレベルすらないので もう少し勉強してからトライします。もう終わりそうですけど。 レスありがとうございました。
749 名前:デフォルトの名無しさん [2010/01/07(木) 06:18:50 ] openmpはマルチプロセスにする方法はありますか?
750 名前:デフォルトの名無しさん [2010/01/07(木) 14:17:20 ] const Hoge* const Hoge& Hoge const* Hoge const& の違いを実例を挙げて詳しく教えてください。
751 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 16:17:41 ] 実例だったら自分で組んでみれば分かるだろ。
752 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 17:02:22 ] 俺も const& の2つがよくわからん。
753 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 17:18:14 ] const Hoge& と Hoge const& は一緒だから気にするな & を超えて Hoge& const になると変わる
754 名前:753 mailto:sage [2010/01/07(木) 17:19:46 ] ごめん 何かわけのわからんことを言った 参照はもともと変更不可だから Hoge& const のようなものは無かった Hoge* const はある
755 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 17:30:50 ] >>754 もちつけ。参照も変更可能。 #include <iostream> int main() { int a = 10, b = 20; int &r = a; std::cout << r << std::endl; r = b; std::cout << r << std::endl; /* int &const cr = a; // `const' qualifiers cannot be applied to `int&' std::cout << cr << std::endl; cr = b; std::cout << cr << std::endl; */ int *const cp = &a; std::cout << *cp << std::endl; //cp = &b; // error: assignment of read-only variable `cp' std::cout << *cp << std::endl; return 0; }
756 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 21:52:05 ] delete this; って適切に現在?のオブジェクトを破棄してくれるのですか?
757 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 22:21:38 ] 適切に使えば
758 名前:デフォルトの名無しさん mailto:sage [2010/01/07(木) 23:39:12 ] >>755 >>753 が言ってるのは「別のオブジェクトを指すように変更することはできない」ってことだよ。 Hoge&は最初からHoge*const相当で、参照にHoge*に対応するものはないんだから。
759 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:32:09 ] >>758 別のオブジェクトを指すように変更することはできない? いつからそうなってんの?w int a = 10, b = 20; int &r = a; std::cout << r << std::endl; r = b; std::cout << r << std::endl; これを実行して確認しる。
760 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:33:45 ] >>758 あーごめんw 俺が狂ってた。 r = b; これはひょっとして、代入されてるのか。 ( つд∩)うえーん ( つд・∩)チラ
761 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:42:09 ] int a = 10, b = 20; int &r = a; std::cout << &a << ' ' << &b << std::endl; std::cout << r << ' ' << &r << std::endl; r = b; std::cout << r << ' ' << &r << std::endl; 実行結果: 0x22cce4 0x22cce0 10 0x22cce4 20 0x22cce4 ___ ←樹海| オワタ  ̄|| ̄ ┗(^o^ )┓三 >>753 >>758 両氏ごめん || ┏┗ 三  ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
762 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:50:12 ] 学校の課題で配列に10個の実数を入力して最大値と最小値を求める問題なんですが、最大値は正常に出力されますが、最小値がうまく出力されません。 #include<stdio.h> int main (void) { float x[11]; float max,min; int i; printf("実数を10個入力してください\n"); for ( i = 1; i <= 10; i++){ scanf("%f",& x[i]); } max = x[0]; for ( i = 1; i <= 10; i++){ if (x[i] > max){ max = x[i]; } } min = x[0]; for ( i = 1; i <= 10; i++){ if (x[i] < min){ min = x[i]; } } printf("最大値は%fです\n",max); printf("最小値は%fです\n",min); return 0; } どこが原因なんでしょうか?
763 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 09:56:55 ] x[0]が未初期化
764 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 12:59:46 ] すみません。複数のクラスを辿りループ処理をするプログラムで クラス毎に1度だけ変数の初期化をさせたい場合、 1.コンストラクタを使う (再初期化が必要になった場合、結局の後者いずれかが必要に・・?) 2.各クラスのグローバルスコープに初期化用のstatic boolを置いて処理 3.初期化用メソッドを別に作って纏めて管理 この3つが思い付くのですが、 どういう初期化が定番、もしくは設計的に無難だと思われますでしょうか?
765 名前:デフォルトの名無しさん mailto:sage [2010/01/08(金) 13:29:43 ] staticイニシャライザじゃダメなの?
766 名前:765 mailto:sage [2010/01/08(金) 13:30:28 ] ごめんJavaと勘違いしてました
767 名前:デフォルトの名無しさん mailto:sage [2010/01/09(土) 09:17:09 ] >764 辿るのはクラスなのオブジェクトなの? 初期化するのはクラス毎なのオブジェクト毎なの? どんな処理しようとしてるのかが良く分からない。 擬似コードでいいから書いてみてくれた方が答えやすい。 「クラス毎に1度だけ」の条件を抜いた上で感覚で答えれば、 それが本当に「初期化」ならコンストラクタにすると思う。 状態の再設定が必要なら reset() みたいなメソッドも作るだろうね。 >各クラスのグローバルスコープ 言いたいのはクラススコープじゃね?
768 名前:デフォルトの名無しさん mailto:sage [2010/01/10(日) 12:33:35 ] >>767 初期化じゃなくて再設定って言わないとですね; >各クラスのグローバルスコープ すみませんでした、そんなの無いですよね; つい完成するまでは1行で済むクラスの置いてるソースファイルのグローバルスコープにstatic boolを置く癖から。。 表現に注意します; そして、変数の再設定メソッドが良さそうですね・・ありがとうございました。
769 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:08:21 ] すみません。 「配列にはしたくない変数名の末尾」に数字を付けるのは、滅多に見ない気がするのですが、何か危険なのでしょうか? 以前はhennsuuA ..B ..C としていたのですが、最近はhennsuu1 ..2 ..3 とやっているのですが・・
770 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:10:45 ] そういう命名がふさわしい場合が滅多に無いから
771 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:16:39 ] a, b, c, 1, 2, 3 なんて機械的な命名ではなく、それぞれの変数の役目に合った意味のある名前を付けるべき いい名前が思い浮かばないのなら変数名スレに相談してみては
772 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:22:51 ] 単純に通し番号を振るのがふさわしいような場合は、普通は似たような処理をそれぞれ の変数に適用するだろうから、素直に配列にすることが多いだろ。 配列はふさわしくないが通し番号がふさわしい、という場面が滅多に無いから、そういう 命名も滅多に見ないだけ。 で、その言い方だと頻繁に通し番号を振ってるようだから、やはり命名がおかしいか、 よほど特殊なジャンルで活動しているか。まぁ、後者ならこんな質問は出ないだろうと 思うので、多分前者だろう。
773 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 17:24:18 ] たまに通し番号が多発しやすいジャンルもあるから、何を作っててそういうコードに なるのか知りたい気もする
774 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 18:12:39 ] >>770-773 ありがとうございます。危険性そのものは多分、無いのですね。 私のプログラミング能力の低さから来てる問題なのが大半だとは思います。 あとは、 変数1の値に応じて処理をわけ、変数2の値に応じて処理を分け と どっちも1桁の数値だから配列にして置いてても良いのですが、 一応種類が全く違う2つなので、名前を別にしたいのですが 違い過ぎると使い間違えそうになるので・・とりあえずa, b, c, 1, 2, 3 と やっちゃってました。 変数名スレッドなるものが有るんですね。 探して見てこようかと思います。 ありがとうございました。
775 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 19:05:36 ] まーゲームなんかだと変数名にシリアル振りたくなることはある でも今時そこまでガチに汚く組まないと困ることはコンシューマでも珍しい
776 名前:デフォルトの名無しさん mailto:sage [2010/01/15(金) 22:33:15 ] 意味は異なるが関連のある変数? なら構造体にするとか
777 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:07:00 ] ポインタを配列形式でアクセスするとき、添字に負の数を指定するのは文法上許されるのでしょうか。 int a[10]; int *p = a+5; p[-4] = 0;
778 名前:デフォルトの名無しさん mailto:sage [2010/01/16(土) 17:10:40 ] >>777 値の正負は文法上の問題ではないので、非負の値が許されるなら当然、文法上は、有効。
779 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 00:43:20 ] けどすごい紛らわしい書き方だな…
780 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 12:01:30 ] まぁ素直に*(p-4)=0と書いた方がいいわな。1[p]とかと似たような空気を感じる。 どうでもいいけど、-4[p]=0は試してないけど有効じゃなさそうだな、優先順位的に。
781 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 18:13:26 ] 一連の流れでmalloc/freeを連想した
782 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:05:01 ] >>780 (-4)[p] なら大丈夫
783 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:17:49 ] そんな書き方、文法が許しても俺が許さん
784 名前:デフォルトの名無しさん mailto:sage [2010/01/17(日) 20:38:04 ] コーディング規約とかで人のプログラミングスタイルを制限するのは ナンセンスだと思っている俺ですら>>782 はぶち殺したくなる
785 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 09:30:44 ] べつにいいやんw 一箇所だけとか、少ないときは。 きっと清涼剤のようにさわやかになれるぞ。
786 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 09:40:05 ] なれねーよw
787 名前:デフォルトの名無しさん mailto:sage [2010/01/18(月) 21:22:34 ] マジックナンバーならまだ一目でわかるが int a[10]; int *p = a+5; int n = -4; /* 数十行のコード */ n[p] = 0; とかなってたら明確な悪意を感じる
788 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 20:40:13 ] すみません。 共通の変数50個を扱うデータクラスA(インスタンスは500個)に関連して 10種x1〜20の配列(ムラの激しい追加情報)が必要なのですが、 全部データクラスAに入れてしまうと、約190個x400インスタンス=76000個分ほどの変数は無駄になる計算で・・。 STLを使うなりクラスをバラにするなり考えているのですが こういう場合、どうデータを管理するのが定番、妥当なのでしょうか?
789 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:05:01 ] たかが76000個くらい気にしない、というのも一つの解決方法
790 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:24:38 ] 76000個のインスタンス一つは組み込み型程度なの? とりあえず気にしないで作ってだめそうだったら工夫するとか? 76000個をヒープに取ったらまずい?
791 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 21:44:52 ] 使うときに使う分だけ配列を確保すればいいんじゃね?
792 名前:デフォルトの名無しさん mailto:sage [2010/01/19(火) 23:57:49 ] それは本当に配列でなければいけないの?
793 名前:デフォルトの名無しさん mailto:sage [2010/01/20(水) 01:55:58 ] >788 >共通の変数50個 この段階でクラスの切り分け方ミスってるような気もするが。 追加情報については STL のコンテナ使うなり(コンテナの選択は追加、削除、検索の発生の仕方次第)、 適当なクラスにラップするなり、ケース次第だと思う。 追加情報に対して単なるコンテナ以上の操作が必要ならばクラスにラップするかもね。
794 名前:デフォルトの名無しさん mailto:sage [2010/01/22(金) 19:56:01 ] >>789-793 ありがとうございます。巻き添えらしいアクセス制限で返事が遅れてすみません。 今は、言われてみれば数十KB位のようですし、そのままデータクラスAに入れて使う事にします。 問題になってきたらご助言を参考に改良したく思います。 ありがとうございました。
795 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 13:10:49 ] すいません。 DIRECT法(DIviding RECTngle)のプログラムを組むことになったのですが、 どうにもとっかかりが無くて困っています。 おおよその理論は分かっているのですが、形にすることが全くできません。 ググって見たりはしたものの、それらしきプログラムソースは落ちていませんでした。 助けていただくことはできますでしょうか?
796 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 13:36:39 ] >>795 ググると普通にあるけど…? ソースが欲しいって訳?
797 名前:デフォルトの名無しさん mailto:sage [2010/01/27(水) 18:44:46 ] >>796 ソースがあれば、いただけると幸いです。
798 名前:デフォルトの名無しさん [2010/01/29(金) 17:20:14 ] 795 どなたかお願いします。 書き忘れましたが、C++です。 本当に困ってます
799 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 17:43:15 ] 留年したまえ
800 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 17:53:41 ] >落ちていませんでした こういうこと書かれると手伝う気うせる
801 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:13:46 ] >>800 なんでだよw
802 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 20:25:14 ] >>801 なんでだよじゃねえだろ。失礼甚だしい
803 名前:801 mailto:sage [2010/01/29(金) 22:04:27 ] >>802 まあ・・・確かに落ちているという表現はあまり良くなかったかもしれんな。 ま、その辺は本人がきっと弁明するということで。
804 名前:デフォルトの名無しさん mailto:sage [2010/01/29(金) 22:32:16 ] >>803 お前がその本人だろ・・・ 何しれっと他人の振りしてんだよ
805 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 00:01:15 ] >>804 いや別人だから失敬な。 まあ何だっていいけど。 証明方法がないもんなぁ。
806 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 16:20:48 ] 795です。 ご指摘の通り「落ちている」という表現は悪かったと反省してます。 ただ本当に困っています。どなたか助けてくれる方いましたら 本当にお願いします。
807 名前:805 mailto:sage [2010/01/30(土) 16:26:09 ] >>806 このスレには低能力者しかいないから 別のスレ(ttp://pc12.2ch.net/test/read.cgi/tech/1263556932/とか) に行ってみたらどうでしょうか? > 証明方法 fusianasanがあったか。 でもまあ晒したくないからやめとこう。
808 名前:805 mailto:sage [2010/01/30(土) 18:03:11 ] >>806 言い忘れたが、常識で考えてくれ。 このままだとマルチポストになるぞ。 どっちかでは別スレに行ってきますと断りをいれましょう。
809 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 18:25:36 ] すいませんでした。別スレ行きます
810 名前:デフォルトの名無しさん mailto:sage [2010/01/30(土) 19:22:32 ] . ____ _ | (・∀・) | `)) | ̄ ̄ ̄ ̄ ´ ∧ <⌒> /⌒\ _________]皿皿[-∧-∧、 /三三三三三三∧_/\_|,,|「|,,,|「|ミ^!、 __| ̄田 ̄田 / ̄ ̄Π . ∩ |'|「|'''|「|||:ll;| /__,|==/\=ハ, ̄ ̄|「| ̄ ̄ ̄ ̄|「| ̄ ̄| /_| ロ ロ 「 ̄ ̄ ̄ | | 田 |「| 田 田 |「|[[[[| |ll.|ロ ロ,/| l⌒l.l⌒l.| | |「| |「|ミミミミミミ
811 名前:保守 [2010/02/06(土) 11:57:12 ] ttp://exlight.net/devel/cpp/string_initialize.html C++の初期化指定は複雑 C++の初期化は恐ろしく複雑になってて, struct S { int a; static int b; int c; } s = { 1, 3 }; と書いたらs.a = 1,s.c = 3と初期化されるなんてルールも決まっている.あんまり深入りしないでおこう….
812 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 13:12:32 ] 複雑というより落とし穴だらけ、という感じだな
813 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 14:04:51 ] >>811 まあねえ 静的メンバは外で定義しないといけないしね そうしないとコンパイラから叱られる
814 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:21:56 ] だが、スタティックメンバ変数程度で*恐ろしく*複雑ってのは、さすがにどうよ? そりゃCよりは複雑だけど、C++に限らず、いまどきの言語でクラス変数使ったら 同じような状況になるし、少なくともスタティックメンバ変数の初期化ルールは *恐ろしく*なんて形容されるほどじゃないと思うんだが。 ついでに聞きたいんだけど、C++に限らず、みんなが「こいつは複雑だ」と思った 言語仕様ってある? 例えば多重継承とかテンプレートとかは複雑?簡単?
815 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:49:22 ] テンプレートの部分特殊化のルールは複雑だと思う
816 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:50:05 ] あとADLは時々わけがわからなくなる STLが吐く長いエラーメッセージはさすがに慣れたけど
817 名前:デフォルトの名無しさん mailto:sage [2010/02/06(土) 17:55:31 ] ヘッダに const 定義しても ODR にならない場合のルールは複雑だ。
818 名前:デフォルトの名無しさん mailto:sage [2010/02/07(日) 11:35:00 ] そりゃわかにくく書こうと思えばわかりにくく書けるさ とにかく他人にも,そして自分にもわかりやすく書くだけ 忘れた頃に見ても
819 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 02:26:30 ] 座標入れようと思ってdouble[3]のvectorを作ったはいいが、push_backしたときにエラー出る。 仕方ないから struct XYZ{ double array[3]; XYZ(){} XYZ(const XYZ&xyz){memcpy(array, xyz.array, sizeof(double)*3);} ~XYZ(){} XYZ &operator[](unsigned int n){ return array[n]; } }; って作ったけど、もっと楽にできなかったのかなぁ?
820 名前:819 mailto:sage [2010/02/10(水) 02:32:51 ] あ、そんなの言うと、普通にvector<vector<double> >使えって言われそうだけど、 大量の要素を入れたかったんで、double配列いっこいっこに、mallocの管理領域使うのがもったいなかったんだ。 あと、vector<double>にしといて、[i][j]を[i*3+j]ってしたり、ループするときにイテレータ3個飛ばしにしてもよかったんだけど、 なんかそこらへんでコードが地味に複雑化するのが嫌だったんだ。
821 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 05:43:20 ] >>819 boost::array<double, 3>
822 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 07:02:33 ] 要素が3つくらいならboost::tupleとか。 配列っぽく扱える必要があるなら使えないが。
823 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 07:26:33 ] boost::arrayがせいかいじゃね?
824 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 10:25:35 ] >>819 POD型の配列にはコピーコンストラクタがないからエラーになるんだろ
825 名前:デフォルトの名無しさん mailto:sage [2010/02/10(水) 11:09:45 ] >>821 そんなのがあったのですね。トンクス
826 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 07:34:09 ] すみません。Visual C++ 2008 Express Editionで ブレークポイント(行の左に赤丸)を付けてデバッグ開始をした時に ・ちゃんと矢印が出て止まる状況 ・透明な円になり、黄色い△に!が付いて止まらない状況 の2パターンが起きるのは何故なのでしょうか? 以前はちゃんとブレークポイントを入れれば矢印で止まってくれたのですが、 今は止まってくれず、無理に手前のブレークポイントからステップインすると ソースを表示できない とか 逆アセンブル画面へ とかと出てしまいます。 どうすればコードを辿れるようになるでしょうか・・。
827 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 10:17:30 ] 変更したのにビルドされてない、とか別の場所のソースだったりとか
828 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:12:40 ] デバッグビルドにするとか
829 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 15:25:45 ] あーリリースビルドで最適化で消されてると中抜きの丸になるな
830 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 20:31:00 ] >>827-829 情報ありがとうございます。デバッグモードのままでこうなるのですが・・ 頂いた情報から調べてみようと思います。 ありがとうございました。
831 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 20:44:20 ] すみません。今まで殆どの定数を、 「ヘッダーファイルに#define」で作っていたのですが、 配列の要素数宣言などに使うわけでもなく、ただ1ソース内の複数メソッドで使う数値などは そのソースのグローバルスコープにstaticで作った方が良い気がしてきたのですが、 これはプログラミングの常識として、やらないべきなのでしょうか? やるべきなのでしょうか?
832 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:09:58 ] >>831 > そのソースのグローバルスコープにstaticで作った方が良い気がしてきたのですが、 C言語ならそのソースの頭で#defineすれば良い。 C++ならconst定数を使うべき。 いずれにせよやらないべき。 ↓↓C++にて↓↓ 今までは #define max_num 100 としていたところをヘッダに const int max_num = 100; と書けばよい。 ttp://www7b.biglobe.ne.jp/~robe/cpphtml/html01/cpp01042.html
833 名前:デフォルトの名無しさん mailto:sage [2010/02/18(木) 22:18:11 ] >>831 1ファイルだけでしか使わないなら、そのファイルの先頭で定義するのは普通。 C++ならconst使え、とは832も言っているとおりだが。
834 名前:デフォルトの名無しさん mailto:sage [2010/02/19(金) 00:11:02 ] >>832-833 ありがとうございます。用途に応じてconstを使うよう心がけようと思います。
835 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 00:36:35 ] 2つ質問させていただきます (1) char* x = "ABC"; *x = 'x'; を実行するとエラーになるのですが、なぜ2行目の代入はうまくいかないのでしょう (2) void test(const int n) { int a[n]; } int main() { test(5); } を実行すると、 定数式が必要です。 サイズが 0 の配列を割り当てまたは宣言しようとしました。 'a' : サイズが不明です。 というエラーが出てコンパイルできません。 testの仮引数を定数にしたので配列が作れると思ったのですがなぜだめなのでしょう。
836 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 02:03:41 ] >>835 (1) www.kouno.jp/home/c_faq/c1.html#32 (2) www.kouno.jp/home/c_faq/c11.html#8
837 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 02:58:24 ] >>836 ありがとうございます。(1)はわかりましたが、(2)に関しては const int n = 5; int a[n]; はコンパイルでき、違いがよくわかりません。 関数として用いる場合(>>835 の書き方)は事実上定数になっていない、ということでしょうか
838 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 03:21:53 ] >>837 それがコンパイルできるなら、たぶん C++ 使ってるんじゃないかと。
839 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 04:04:15 ] >>838 どこでCとC++の区別をつけるのかいまいちよくわかっていませんが、 C++のつもりで書いていました。
840 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 04:12:29 ] >>839 コンパイラが違う
841 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 04:24:55 ] >>839 CからC++が派生する過程で、constがついている変数は定数とみなすようにルールが変更された。 逆に言うと、constがなければ定数とはみなさない、というルールなので従うしかない。 VC系コンパイラなら、拡張子をcにすればconstがついていてもエラーになると思う。 これがgccだと>>835 の(2)すら通っちゃうんだが、言語仕様上はエラーになるのが正しい、はず。
842 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 04:28:04 ] >>841 gcc で通っちゃうのはおそらく C99 の仕業。たぶん const なくても通る。
843 名前:デフォルトの名無しさん mailto:sage [2010/02/26(金) 04:41:14 ] C99制定前からのGCC独自拡張です
844 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 14:16:59 ] 質問です。 ttp://bal4u.dip.jp/mt/program/c-4/ ここの「数字変換 10進数を2進数に変換 dec2bin」を、 10進数から3進数へ変換するようにしたいのですが、うまくいきません。 どのようにしたらよいでしょうか。
845 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 14:43:18 ] >>844 どうしたらうまくいかなかったを書かないとなんともいえない。
846 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 15:32:41 ] 親クラス -(継承)-> 子クラス -(継承)-> 孫クラス というクラスで、孫クラスを親クラスに見立てて扱いたい(多態)と思い、 (親クラス型)孫クラス というふうにアップキャストしようとしたら、コンパイラに怒られました。 こういうの、って設計がマズいということでしょうか・・・
847 名前:844 mailto:sage [2010/02/27(土) 15:33:03 ] do { r = 0; non_zero = 0; for(i = dec_len - 1; i >= 0; i--) { d = tmp[ i ]; tmp[ i ] = d / 3; if(r > 0){tmp[ i ] += 3;} if(tmp[ i ] > 0){non_zero = 1;} switch(d) { case '0': r=0;break; case '1': r=1;break; case '2': r=2;break; case '3': r=0;break; case '4': r=1;break; case '5': r=2;break; case '6': r=0;break; case '7': r=1;break; case '8': r=2;break; case '9': r=0;break; } //r = d & 1; } bin[ bin_len++ ] = r; }while(non_zero); 主要部分を改造した物を上げて見ます。 ごらんの通り、答えが合いません。 全体的に訳が分かりません。(元のソースは理解できましたが……)
848 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 18:24:32 ] >>846 その変換は暗黙の変換で通るはず。 これ以上はエラーメッセージやソースを晒してもらわないとわかんない。
849 名前:デフォルトの名無しさん mailto:sage [2010/02/27(土) 18:32:43 ] >>844 ,847 元のソースから変数名が適当で読みにくいソースだね。わけがわからないのはそのせいじゃない? 素直に一旦ふつうの整数値として取り出して3進の文字列に書き出すようにしたほうが 簡単だと思うよ。整数値に変換する部分は strtol() 使えば一発だし。
850 名前:844 mailto:sage [2010/02/27(土) 19:44:37 ] >>849 多倍長演算ってことになっているので、いったん数値に戻すっていうのも難しそう。 一応 50桁の10進数を3進数に変換したいと考えています。 他に簡単に10進 3進の相互変換が出来そうな仕組みはありませんかね。 とりあえず一桁の時の答えだけは合うようになった(笑)
851 名前:846 mailto:sage [2010/02/28(日) 15:24:38 ] >>848 すみません、何か勘違いしていたようです。 問題なく動きました。 失礼しました。
852 名前:デフォルトの名無しさん mailto:sage [2010/02/28(日) 23:07:29 ] >>850 849 同様に俺も数値にした方がミスしにくいし応用も効くしいいと思うけどな 桁数多くてもgmp みたいなものもあるし,必要なら自分で class 作っても良いし まぁ目的に依るけどね >>844 のコードを変更することだけが目的ならしょうがないけどね
853 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 20:07:36 ] 初歩的な質問すみません、BYTE配列からDWORD型変数に数値をコピーした時、 1バイト分しかコピーできないのですが、(256以上が0…1…2… となってしまいます。) どうすれば8バイト分コピーできるのでしょうか。
854 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 20:49:47 ] > BYTE配列からDWORD型変数 C/C++にそんな型は存在しません。 MFCの用語はスレチな気がする。 ttp://pc12.2ch.net/test/read.cgi/tech/1250919279/ こことかか?
855 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 20:59:30 ] >854 MFC っていうか Win32 だと思われ。 書いてる事そのものは memcpy とか CopyMemory だけどそれが本当に自分のやりたい事かどうか 確認した方がいいかもしれない。
856 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 21:01:36 ] >>854 > C/C++にそんな型は存在しません。 小心者スレッドなんだからまあ良いではないか。 >>853 どんなコードでコピーしたの? そもそもBYTE型に256以上の値は入らないし、DWORDだったら4バイトだよね。
857 名前:854 mailto:sage [2010/03/07(日) 21:21:41 ] >>856 > 小心者スレッドなんだからまあ良いではないか。 一応 小心者 向けに多少はしたつもりだったんだが、 俺の言い方はやっぱまだ厳しかったか。 スマン
858 名前:デフォルトの名無しさん mailto:sage [2010/03/07(日) 21:40:13 ] コード見たほうが早いなたぶん
859 名前:853 mailto:sage [2010/03/08(月) 00:08:15 ] >>854-858 ありがとうございます、memcpy使えば良かったですね、 他の事に気がいっててそんな事にも気付かなかった、 orz あとDWORDは4バイトだったんですね、ご指摘ありがとうございました。
860 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 10:55:08 ] 配列ならポインタを強引にキャストするだけでもよくね メモリ上の配置の把握が必要だけど、memcpyするにしてもそれは必要だし
861 名前:デフォルトの名無しさん mailto:sage [2010/03/08(月) 12:43:22 ] >>860 エイリアシングルールというものがあってだな。 www.radiumsoftware.com/0304.html#030408
862 名前:デフォルトの名無しさん mailto:sage [2010/03/09(火) 03:46:00 ] 8bit変数配列→32bit変数、ってだけならunion作れ 8bit変数配列→32bit変数配列、とかならどうしたもんだか
863 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 22:33:09 ] unionつかったらエンディアンの問題はどうするの?
864 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 23:04:11 ] 2倍あるいは1/2倍していたところをビットシフトに書き換えたら、若干遅くなりました。 同じかそれ以上の速さになることはあると思っていましたが、遅くなるとはどういうことなんでしょうか?? CPUには乗算や除算のほうが高速に行える回路が付いてるんでしょうか??
865 名前:デフォルトの名無しさん mailto:sage [2010/03/12(金) 23:45:00 ] >>864 推測ではどういう風にでも考えられるので コンパイラにアセンブリを吐き出させてみればどうでしょう
866 名前:864 mailto:sage [2010/03/13(土) 01:38:25 ] >>865 ありがとうございます。 アセンブラは読めませんが、がんばって解読してみます。
867 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 10:20:26 ] >>863 気になるなら#ifdefするなり効率落として変換関数書くなりすればいいんじゃね 綺麗で効率いい方法は知らん
868 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 10:40:47 ] 絶対にWindowsでしか使わないのにクロスプラットフォームで書きたくなる病とかあるよな
869 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 12:11:15 ] >>868 できる限り標準に準拠するのは正しい態度だと俺は思うよ * ずっとWindowsだけの仕事をするとは限らん * 元々Windowsだけのつもりでもコードの一部流用とかすることがありうる
870 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 13:45:37 ] 8bit配列→32bitなんていう処理についての話からの流れだからなぁ 汚くする理由の無い部分は綺麗に書くのが当然だが、エンディアン絡みの処理を すっきり綺麗に効率良く、って訳には行かんだろ現状
871 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 14:15:49 ] >>869 * 言語標準に準拠しつつクロスプラットフォームではないコードは極めて一般的 * OS標準に準拠しつつクロスプラットフォームでないコードは言うまでもなく一般的 * そもそも「絶対に」という前提の話 まず、クロスプラットフォームと規格準拠は全くの別物。前者の需要は極めて稀。 Windowsアプリを書く時にクロスプラットフォームにしようとするのは、かなり病的 にならないと困難だと思うぞ。犠牲も大きいし。
872 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 15:25:22 ] Qtとかの外部ライブラリを使えば クロスプラットフォームでも楽に書けるぞ。
873 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 21:57:02 ] >>871 プラットフォーム依存性が必要無いところは敢えて依存性持たせない方が 良いと俺は思うけどな 必要もなくプラットフォーム依存してるコードもよくあるが 元々絶対に流用しないつもりでも一部切り貼りって結構あると思うぞ
874 名前:デフォルトの名無しさん mailto:sage [2010/03/13(土) 22:02:26 ] forループのインデクスすらDWORD使うサンプルとかあるからな
875 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 07:46:33 ] 程度問題だな。病気レベルの無駄なことはやらない方がいい。無理せずに依存無く 書けるなら当然その方がいい。 Qtは微妙だろ。必要も無しにあれを選ぶ理由は無いと思う。
876 名前:872 mailto:sage [2010/03/14(日) 10:36:59 ] 別にQtじゃなくても、とにかくクロスプラットフォームな外部ライブラリなら 俺の言いたいことは伝わると思うんで、適当に読み替えてください。
877 名前:デフォルトの名無しさん mailto:sage [2010/03/14(日) 15:01:47 ] クロスプラットフォームなフレームワークに乗っかれば クロスプラットフォームでも楽に書けるぞ。 ・・・当たり前だろjk
878 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:23:17 ] 本気で細かいことをしようとするととても楽に書けるなんてもんじゃないから、 普通は細かいことをバッサリ諦めるしか無いのがクロスプラットフォーム
879 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 00:27:38 ] まぁGUIに関しては特にそうだよね
880 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 08:24:51 ] 独自機能は全部諦めることになるしなぁ
881 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 21:37:14 ] >>878 細かいこと気にしない方が逆にいいものできたりして… 稀かもしれんが
882 名前:デフォルトの名無しさん mailto:sage [2010/03/15(月) 22:23:42 ] >>881 「逆にいい」は稀かと あっても無くても関係ない、ならまだそれなりにある話だが CUIなら割と素直にクロスプラットフォームになりやすいけどな それでも、元の流れの内容をエンディアン違いにまで対応させようとしたら あまり綺麗には済まないが
883 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 21:46:48 ] CUIでも、実用品でクロスプラットフォームなコードになると大抵はマクロで個別に ソース分岐させてるけどな。C/C++標準だけで書ける実用品なんて小物だけ。 LinuxとBSD系ですら、パフォーマンスを実用レベルにする為には移植作業が必要に なったりする訳で。Windowsならなおのこと。
884 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 21:56:00 ] 標準の範囲ではWindowsでUnicodeファイル名を扱えないし ディレクトリすら作れないし バイナリファイルを標準入出力で読み書きできないし 大きなファイルのシークもできない
885 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 21:57:51 ] だからクロスプラットフォームなフレームワークに乗っかろうぜ と言ってるじゃないか。 だれもC/C++標準だけで満足はしないさ。
886 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 22:03:09 ] オープンソースだと、単にWindowsのUnicodeファイル名などは 切り捨てているものも多いな
887 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 22:18:27 ] そしてパスに空白を含むと落ちるクソアプリができあがると
888 名前:デフォルトの名無しさん mailto:sage [2010/03/16(火) 22:24:03 ] >>887 > そしてパスに空白を含むと落ちるクソアプリができあがると たまにそういうクソアプリが見つかるけど、 それが原因だったんかい!
889 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 01:19:44 ] クロスプラットフォーム向けのフレームワーク使ったところで、問題の本質の ほとんどは解決しないよな
890 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 18:28:38 ] プラットフォーム依存性があるにしろオープンソースでクロスプラットフォー ムというと firefox, thunderbird, gimp, cygwin とか思いつくけど これらってクソアプリやへぼアプリの分類なの?
891 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 18:58:00 ] cygwinは最近出た1.7まではUnicodeファイル名に対応していなかった 実のところ、Windows専用でも、Unicodeファイル名に対応していないプログラムは ものすごく多い、特にコンソールアプリケーションではそれが普通
892 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 19:20:32 ] >>890 必死に移植作業してマクロで分岐させるんならいくらでもクロスプラットフォームに なるのは当然だろw
893 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 22:53:58 ] >>890 firefox, thunderbird, gimp, cygwin が クソアプリやへぼアプリだったら そうじゃないアプリって世の中にほとんどないんじゃないか?
894 名前:デフォルトの名無しさん mailto:sage [2010/03/17(水) 23:49:10 ] クロスプラットフォームなコードでもクソじゃないのはあると言いたいんだろ だが、あの辺のは「現実に十二分な需要がある」から、仕方なく「多大な手間を掛けて 複雑なコードを書いて」実現してるから、牧歌的な話からは程遠い
895 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 00:16:50 ] >>894 > クロスプラットフォームなコードでもクソじゃないのはあると言いたいんだろ クロスプラットフォームのアプリのほとんどが クソアプリだってことが言いたいのかい?
896 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 00:19:05 ] クソアプリの定義にもよるんじゃないの 例えばlameは最優秀のMP3エンコーダーだが、Unicodeファイル名には対応していない
897 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 00:31:07 ] 英語限定ならば問題は大分少なくなりそうだな…
898 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 00:32:40 ] そうだな GUIの場合、IMEという難関もあるし
899 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 11:56:10 ] >>895 どう見ても真逆の意味にしか読めないが
900 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 12:05:23 ] コードは肥大するけどお勉強の為に非依存で書いてみました、でも誰も使いません けどね、ってのが無駄 自然に非依存なコードになるならそれでいいんだよ(エンディアンなんかは面倒な ことをしなきゃ非依存にはならんけど) 実需があるなら無理もしなきゃならないし、変態コードが肥大しても許される
901 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 12:08:51 ] 実装の手間自体もでかいが、テストの手間のほうがより悲惨だな クロスプラットフォームを本気で考えるのは、プロジェクトが大きくなってからで いいと思う
902 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 14:36:18 ] クロスプラットフォームにするほど 他人が使ってくれるかどうかっていうところがなw
903 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 18:14:36 ] >>900 > 自然に非依存なコードになるならそれでいいんだよ(エンディアンなんかは面倒な > ことをしなきゃ非依存にはならんけど) 素朴な質問だが通常のコーディングでなぜエンディアンを 生で扱わなければいけないの?
904 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 18:20:57 ] >>903 誰かがエンディアンを持ち出したからだろ
905 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 18:21:42 ] >900ではないが 少なくとも画像や音声など、バイナリデータを弄る場合には必ずエンディアンの問題は 出てくるでしょ ネットワークプログラミングにおけるntohl()のように、ホストエンディアンを 意識せずに「ホストエンディアンと対象エンディアン(bigないしlittle)を 変換する関数」を複数用意することで、問題を解決できることが多いと思うけど
906 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 18:35:28 ] >>905 画像,音声,ネットワークだと生で扱わなくてもライブラリがあるんでは 自分で用意する必要は必ずしも無いはず
907 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 18:47:09 ] そもそも>>900 を読んで「通常のコーディングでもエンディアンを生で扱わなければ いけない」とは読み取れないんだが
908 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 20:41:29 ] >>906 ま、ライブラリにおんぶにだっこでいい場合はそうだね ただ、例えばntohl()のようなものはホストエンディアンによってコードを 分ける必要はなくしてくれるが、「ここはネットワークエンディアンに変換する 必要があるのでntohl()を呼ぶ」ような仕事は残るわけだから、 エンディアンを意識しなくてよい、というわけではないよね
909 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 22:06:47 ] >>908 それはどういうライブラリ使うかじゃないか? たとえば画像の時は「必ずエンディアンの問題は出てくる」というが, magick++ みたいなもの使えば「エンディアンを意識しなくてよい」 という状況だと思うけど違う?
910 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 22:30:11 ] >>909 正直議論の意味というか、何にこだわってるのか、何を知りたいのか 全く理解できんのだけど…… magick++を使ったことは無いのでわからんが、まあ、そう言ってしまえば 何だってそうだといえるだろうさ 画像処理で言うと、ファイルフォーマット内のバイトオーダーは ライブラリによって隠蔽されるケースは多いと思う が、ライブラリにロードしてもらった32bitラスタ画像のピクセルフォーマットが ARGBかBGRAか、といったことは、ピクセルを弄る場合には結局必要になるわけだ
911 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 22:54:34 ] picture[y][x].a = 〜 みたいに使えるんでないの? ロードの処理が重くなりそうだが。
912 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 23:01:06 ] >>911 一瞬意味が分からなかった、その.aはARGBのAか まあ、そういう実装は可能だろうね Cだと PutPixel(point, a, r, g, b) のような関数ないしマクロを使うんだろう
913 名前:デフォルトの名無しさん mailto:sage [2010/03/18(木) 23:13:43 ] >>910 画像処理と言ってもライブラリを使える場合もあるから 「必ずエンディアンの問題は出てくる」ということも無いということだよ magick++ とかを使ってできることをわざわざ車輪を再発明する事もない場合も多いし 具体的にピクセルをどう弄りたいわけ?
914 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 01:45:40 ] >>913 ああ、要するに「必ず」は言いすぎだろ、という突っ込みか 確かに言い過ぎたね
915 名前:デフォルトの名無しさん [2010/03/19(金) 12:22:01 ] Windowsでカレントディレクトリを取得する方法を教えてください
916 名前:デフォルトの名無しさん mailto:sage [2010/03/19(金) 12:36:42 ] GetCurrentDirectory()
917 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 23:45:49 ] 失礼します。 C++を勉強中の初心者です。 ポインタを関数の戻り値する場合は関数内の宣言にstaticをつけなければならないという記述をよく目にするのですが、 以下のようにstaticをつけずにHoge hを宣言しても問題なくプログラムが動き、5が出力されます。どういうことなのでしょうか。 typedef struct{ int k; } Hoge; Hoge* func(int a) { Hoge h; h.k = a; return &h; } int main() { Hoge* h = func(5); cout << h->k; }
918 名前:デフォルトの名無しさん mailto:sage [2010/03/27(土) 23:59:25 ] >>917 Hoge h がスタック上に作られている場合、関数から帰ってきた 直後は問題ない可能性が高いが、もう1回func()を呼んだり 別の関数を呼んだりすると、おかしくなる可能性がある。
919 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:02:59 ] >>917 動くのはたまたまです 試しに、func(5) のあとに別の関数を呼んでみてください 別の結果になると思います
920 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:16:44 ] なるほど たしかにおっしゃるとおりの事態が起きました。 ありがとうございます。 あと実はこのことに直接関わるかはわからないのですが、 別のプログラムにおいて、同じように構造体のポインタを戻り値とする関数をつくって内部の宣言をstatic有りと無しどちらも試したところ、 staticをつけた方はmainを抜けるところで停止してしまいます。 関係があるのかどうかよくわかりませんが、もし心当たりがありましたらお教えいただけると幸いです。
921 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:23:11 ] >>920 ソースをcodepadに貼れ 言ってる事がよくわからない
922 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 00:25:57 ] >>920 そんなことで悩むぐらいならポインタでなく実体を返せばいいと思う Hoge func(int a) { Hoge h; h.k = a; return h; }
923 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 01:30:09 ] >>922 構造体の配列を返したかったので・・・ すみませんどうやら別のところで引っかかっていたようで、今解決しました。 どうもお騒がせしましてすみません。
924 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 03:13:39 ] つーか根本的に関数側で確保した構造体のポインタを返すのがキモイ 呼び出し側で(空でいいから)構造体を用意して、そのポインタを関数に渡して、 関数側はその渡されたポインタで構造体の中身を加工する、っつーのが普通だし、 そういう設計ならポインタを返す必要も無いしstaticも要らないし、static無しで ポインタ返しても別に問題無い 何でそうなるかが分からんようだと辛い
925 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 09:22:50 ] >>924 関数側で確保した構造体のポインタじゃなくて構造体を返すのもダメ?
926 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 10:41:34 ] >>924-925 (コピーのオーバーヘッドはおいといて)1個の構造体や、固定長の構造体配列ならそれでもいいんじゃないの? 任意個数の配列をポインタではなく値で返す方法ってのを俺は知らないのだけど、どんなのがある? >>920 staticつけないのは論外として、つけてもポインタの指し示す先が共有されていることは理解してる? int *func(int n){ static int a; a=n; return &a; } int main(void){ int a,b; a=func(1); b=func(2); printf("a = %d, b = %d\n", a, b); /* a = 2, b = 2 */ return 0; }
927 名前:926 mailto:sage [2010/03/28(日) 10:42:50 ] ごめ、すっとぼけてた。 int main(void){ int *a,*b; a=func(1); b=func(2); printf("*a = %d, *b = %d\n", *a, *b); /* *a = 2, *b = 2 */ return 0; }
928 名前:925 mailto:sage [2010/03/28(日) 13:39:27 ] デザインの問題だけどたとえば何かデータをファイルから読むとか 与えたデータから新しいデータを作るというときに const vector<double> parseData(double x,vector<double> v,...){ vector<double> v1; …vector 領域確保して,データを料理してv1に入れる… return v1; } int main(){ ... vector<double> vData(paseData(x,v,...)); } みたいなのはなぜいかんのかなと思って void parseData(vector<double>&v1,double x,vector<double> v,...){ …vector 領域確保して,データを料理してv1に入れる… } int main(){ vector<double> vData; paseData(vData,x,v,...); } みたいに必ず書かなきゃいかんのかな?(確かに昔Fortranとかはいつもこういう スタイルだったなぁ) 個人的には前者の方が直感的だけど 簡単のため vector の例にしたけどもちろん自分で定義したデータ class でも同じこと
929 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 13:40:41 ] コピーが発生したら嫌じゃん
930 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 15:38:13 ] コピーのコストが問題にならない状況でなら、その手も使った。
931 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 16:47:51 ] 関数内でnewしてshared_ptrで返せばいいよ
932 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 17:06:34 ] #include <vector> #include <memory> #include <iostream> using namespace std; using namespace std::tr1; shared_ptr<vector<double> > parseData(double x){ shared_ptr<vector<double> > v1(new vector<double>); v1->push_back(x); return v1; } int main(){ shared_ptr<vector<double> > vData(parseData(1.5)); cout << vData->at(0) << endl; }
933 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:14:03 ] 何でstatic付けると助かるのかを理解しない限り、いくらでも似たような問題で 引っ掛かると思われ
934 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:24:01 ] #include <iostream> #include <vector> using namespace std; int sum(vector<int> vec){ int ammount = 0; for(vector<int>::iterator it = vec.begin();it != vec.end(); ++it){ ammount += *it; } return ammount; } // 2ch行数制限回避 int main() { vector<int> v; v.push_back(1);v.push_back(2);v.push_back(3); cout << sum << endl; // 表示結果: 6 } はいいんだけど、sumを template <class T, T zero> T sum(vector<T> vec) { T ammount = zero; for(vector<T>::iterator it = vec.begin();it != vec.end(); ++it){ ammount += *it; } return ammount; } にして、main中のcoutの行をcout << sum<int, 0>(v) << endl;にすると a.cpp:8: error: dependent-name ‘std::vector::iterator’ is parsed as a non-type, but instantiation yields a type a.cpp:8: note: say ‘typename std::vector::iterator’ if a type is meant のようになっちゃう。vector<T>::iterator itをT vector::iterator itに変えても a.cpp:9: error: ‘template<class _Tp, class _Alloc> class std::vector’ used without template parameters a.cpp:9: error: expected initializer before ‘it’ になっちゃう。 どう対処すればいいんでしょう?
935 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:29:52 ] >>934 ja.lmgtfy.com/?q=error%3A+dependent-name
936 名前:デフォルトの名無しさん mailto:sage [2010/03/28(日) 20:57:05 ] typename vector<T>::iteratorか。
937 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 20:14:09 ] test
938 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 20:59:59 ] 個人的にはそろそろ>>928 前者のような直接値を返すのも VC10とかg++ 4.3とかめちゃくちゃ新しいコンパイラならはありだと思うようになってきた。 C++0xのおかげでコピー発生しなくなったから。
939 名前:デフォルトの名無しさん mailto:sage [2010/03/29(月) 22:17:32 ] それはちゃんと右辺値参照をアレするクラスを書いた時限定じゃないのか 全てライブラリのコンテナに限定するなら構わんだろうけど
940 名前:デフォルトの名無しさん [2010/04/07(水) 05:36:10 ] error: pointer to incomplete class type is not allowedってどういうことですか?
941 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 05:40:42 ] >>940 そのまんまだろう。
942 名前:デフォルトの名無しさん mailto:sage [2010/04/07(水) 13:16:50 ] >>940 不透明ポインタあたりでぐぐれ