1 名前:デフォルトの名無しさん [2007/11/03(土) 00:20:13 ] エスケープシーケンスやWin32APIなどの環境依存なものでもOK。 ただしその場合、質問者は必ず環境を書きましょう。 ※sage禁止です(と代々スレに書いてありますが自己判断で)。 【前スレ】 【初心者歓迎】C/C++室 Ver.43【環境依存OK】 pc11.2ch.net/test/read.cgi/tech/1190860744/l50 【アップローダー】(質問が長い時はココ使うと便利) kansai2channeler.hp.infoseek.co.jp/cgi-bin/joyful/joyful.htm
116 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 02:16:44 ] sscanfとか、StrToIntExとか
117 名前:デフォルトの名無しさん [2007/11/06(火) 02:24:27 ] 893が75キロ VS 105キロの空手家 体重差 30キロの殴り合い映像 video.nifty.com/cs/catalog/video_metadata/catalog_071105039557_1.htm 店でNo4 ホスト VS 黒帯空手家 死闘の映像 video.nifty.com/cs/catalog/video_metadata/catalog_071104039294_1.htm イケメン ホスト VS ブルースリー ボコボコに殴る映像 video.nifty.com/cs/catalog/video_metadata/catalog_071103039028_1.htm 893 VS ブルースリー 対決映像 video.nifty.com/cs/catalog/video_metadata/catalog_071102038922_1.htm
118 名前:デフォルトの名無しさん [2007/11/06(火) 05:27:21 ] 算術命令圧縮って弱点あると思うんですが 例えば0 1の出現率が等しいとするとどのビット列も同じ確率になりますよね? データの並び順を考えないと駄目ではないですか? たとえば0000000000000000000000000000011111111111111111111111111111111などは 繰りかえし数を記録することでかなり圧縮できると思うのですが
119 名前:デフォルトの名無しさん [2007/11/06(火) 05:42:46 ] 算術命令圧縮ではなくて算術圧縮だったよ あと、文書を圧縮するならば前の1、2バイトごとに確率分布表を作って圧縮するといいと思うけど
120 名前:デフォルトの名無しさん [2007/11/06(火) 06:39:22 ] 算術の説明だと、1文字ずつの説明だけだけど、初めから5文字の分布を与えても出来るね 確率1%のものがあれば、2^(-7) = 0.0078125 だから小数点以下7桁程度を与えるのが良いと言うことになる ハフマン圧縮の一般化といえるね
121 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:49:45 ] class BaseClass{ public: int a; BaseClass(){}; ~BaseClass(){}; virtual void Func(){}; }; class SubClass : public BaseClass{ public: int b; void Func(){}; }; int main(){ BaseClass *pointer = new SubClass[2]; for(int i=0; i<2; i++) pointer[i].Func(); delete [] pointer; return 0; } これでエラー起こるの何故
122 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:53:35 ] >BaseClass *pointer = new SubClass[2]; 配列へのポインタはキャストしてはいけない
123 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 13:58:11 ] >>122 もし上みたいに子クラスのインスタンスの配列を親クラスのポインタに入れて使いたい場合どうしたらいいんですか?
124 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:04:50 ] 親クラスのポインタの配列を作れば良いじゃないか。
125 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 14:17:58 ] 申し訳ない… 具体的にはどんな書き方に…?
126 名前:125 mailto:sage [2007/11/06(火) 14:22:08 ] 自己解決しました ありがとうございました
127 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 17:52:46 ] そういうのも自己解決って言うのかw
128 名前:デフォルトの名無しさん [2007/11/06(火) 19:06:46 ] ディジタル技術検定の問題集で「二つの正の整数の積を求めるプログラム」の解説をお願いします。 二つの正の整数の積ということなのですが、二つの整数をかけるだけ(a*b)ではいけないのでしょうか? while文の処理がさっぱりわかりません。 よろしくお願いします。 #include <stdio.h> void main(void){ int a,b,prod=0,temp; printf("a="); scanf("%d",&a); printf("b="); scanf("&d",&b); if(a>b){ temp=a; a=b; b=temp; } while(a != 0){ if(a%2 == 1) prod +=b; a=a/2 b=2*b } printf("product of %d * %d = %d", a, b, prod); exit(0); }
129 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:31:10 ] ループ中の計算をシフトとビット演算で置き換えると 乗除の演算なしで掛け算が出来るなぁ…、なんて。
130 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:33:33 ] 燦然と輝くvoid main(void)
131 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 19:37:32 ] >>128 小学校で習った掛け算の筆算を二進数でやってるようなもんだ
132 名前:128 mailto:sage [2007/11/06(火) 19:40:53 ] >>129 こういうことですか? while(a != 0){ if(a%2 == 1) prod +=b; a=a >> 1 /* a=a/2 */ b=b << 1 /* b=2*b */ }
133 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 20:28:03 ] >>129 そこはコンパイラの最適化に期待ということでは? もっとも、これくらいならC/C++でもシフト使えということは同意。
134 名前:デフォルトの名無しさん mailto:sage [2007/11/06(火) 22:35:19 ] というか、そこで*を使ってしまうと、 「じゃあ(a*b)でよくね」みたいな話になるから(w
135 名前:デフォルトの名無しさん [2007/11/07(水) 19:47:22 ] class hoge : public base { private: base* m_base; }; これって循環ですか?
136 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 20:25:07 ] 開発中によく見る記述ですが何か心配なことでも?
137 名前:デフォルトの名無しさん [2007/11/07(水) 20:58:33 ] 循環なら避けたいんですが、 循環ですか? hogeの定義にbaseが必要で でもhogeはbaseを持ってるので なんか循環っぽいなぁと。
138 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:13:18 ] ならお前の避けたい循環の意味をちゃんと書けやタコが
139 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:16:02 ] 知ってる人に聞ければいいです。 そもそも知らない人は 自分が知らないのに人に教えられるわけがないでしょう。
140 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:18:34 ] それじゃ、誰にも答えられないね。
141 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:20:44 ] >>140 全知全能の神光臨。
142 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:29:49 ] 循環じゃないよ
143 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:30:14 ] とりあえず循環参照が起こる可能性は充分すぎるほどに有るわな。 ただ場合によるので、具体的にやりたいことを示してくれないと問題点の指摘は出来ん。
144 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:33:34 ] baseの定義にhogeを必要としてたら循環定義
145 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:35:38 ] 循環ってのは class sage の宣言に class age を使ってて class age の宣言に class sage を使ってる場合。 よって循環ではないべ?
146 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:36:24 ] >>135 普通に連結リストかなんかでありそうな気がするが
147 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:38:30 ] >>140 の立場wwwwww
148 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:43:03 ] で、結局どっちの意味で循環って言ってるのよ?>>135 は。
149 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:43:04 ] >>135 あほすぎ
150 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 21:55:38 ] >>149 = 顔をつぶされた>>140
151 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 22:08:21 ] >>150 はずれ
152 名前:デフォルトの名無しさん mailto:sage [2007/11/07(水) 22:19:11 ] >>135 エスパーがいない可能性を考えないのか?
153 名前:wolf ◆8VH3XAqjlU mailto:sage [2007/11/07(水) 23:08:13 ] >>135 base<---hogeで循環は存在しないけど m_base = new する第3のクラスを含めた循環に注意です
154 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:11:41 ] で、結局誰もまともに答えられないんですね。がっかりしました。
155 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:51:46 ] >>154 >>153
156 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 00:59:52 ] それはもう読みましたよ。
157 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 10:37:40 ] >>156 お仕事頑張ってくださいね
158 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 10:38:57 ] なるほど循環参照の事か
159 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 11:07:44 ] >>154 聞いてる時点でお前はそれ以下じゃんw
160 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 11:28:52 ] >>158 >>137 読めば分かるだろ。
161 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:06:16 ] >>159 それはつまり、回答者と質問者の理解度を対等に比較するのが あなたにとっては「自然」である、ということですよね? でもそれって、教師の知識が怪しい、という話をしている時に「生徒はそれ以下じゃんw」と 返すようなものですね。 こっちは、そういうレベルの人間が、知識を持っているという嘘をついて「教壇に立」って、 誰かに物を教えるのが間違いである、という点を言っているんですよ。 そういうレベルの人に回答者になってもらっては困るんです。質問者も、場も、混乱するだけなので。 確かに理解度は俺のほうが下です。 でも、あなた方も俺と同じ、質問者レベルなんです。回答者気取りをされると邪魔なのです。 そういうことです。
162 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:10:41 ] 社会性の無いキチガイが紛れ込んでますね
163 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:15:12 ] >>161 何を聞きたいのか分かりません 実体の循環参照ならコンパイルできないので安心して下さい ポインタを使う限り循環参照になる可能性は常にあります 諦めて下さい
164 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:28:37 ] プログラムの勉強に飽きたら2,3日何もしないとかいう人いる?
165 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:31:58 ] >>161 がっかりするとは俺もお前にがっかりだ
166 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 16:32:03 ] 勉強つーか趣味のコーディングではよくある。一週間以上になることもしばしば。
167 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:15:41 ] リアルで >>161 は空気読めない人って 周りから言われるんじゃね? 教師は仕事で金もらって教えてるわけだが、 ここは2chだしなー 質問者はこうあるべき! 回答者はこうあるべき! とか真面目に言われてもなー 郷に入れば郷に従えっていうから、 説教長文書くより、どうすれば 2chで回答を得られる可能性が高くなるのか? を考えたほうが現実的。 妥協できないなら、ネットで質問なんてするな。 第三者からみれば、あんたが荒らしだから。
168 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:35:28 ] 釣られすぎ。
169 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 17:58:31 ] >>162 まったくです。困ったものですね。 人に何かを教える立場というのは、自己顕示欲の異常に強い人達にとっては 魅力的なものなのでしょうね。だからそのスキルも無いのに気取りたがるのでしょう。 >>165 がっかりする分には好きなだけがっかりしてもいいですよ。 能もないのにでしゃばったりしないこと、これを学習することのほうが大切です。 >>167 「ここは2chだし理論」で物を言う人は、相手の言い分にもきちんとそれを適用して、 ここは2chなのだから説教なんかしてもしょうがない、という風に思い至るべきですよ。 ある理屈を、ある側にだけ適用するのはおかしな言動だと言わざるを得ません。 それから、「2chで回答を得られる可能性」は、この場合関係ありません。 回答者が回答できるレベルにあれば、それで解決していたことなので。 あと、第三者というのを一つの意志のように語るのは気持ち悪すぎです。 あっちの第三者と向こうの第三者は、異なる意識を持っているのです。 架空のみんなが自分を支持する夢から出て、自分の名義で物を言いましょう。
170 名前:167 mailto:sage [2007/11/08(木) 18:14:58 ] うわーすごいな だから空気読めといっとろうが 質問してみた ↓ バカにされた ↓ マジ反論 ←いまここ まともな回答もついてるんだからさ それでいいじゃん? これ以上何を望んでるの?
171 名前:167 mailto:sage [2007/11/08(木) 18:16:16 ] 釣りなら見事に釣られたわけだがな>俺
172 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 18:37:21 ] 釣りでしょ。少なくとも>154は漏れだし。
173 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 19:19:35 ] >>170 ダメ回答者達が維持したがっているダメな空気は、読んだ上で否定しています。 そんな種類の空気に支配的になられては困るので。
174 名前:173 mailto:sage [2007/11/08(木) 19:32:48 ] ごめん釣りでした。
175 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 19:34:54 ] ダメ回答者をバッタバッタと取り締まってくれる 救世主が登場
176 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 19:45:20 ] >>138 = >>140 がメンツをつぶされた挙句暴れている模様。
177 名前:140 mailto:sage [2007/11/08(木) 20:33:36 ] ちゅがうよ
178 名前:デフォルトの名無しさん [2007/11/08(木) 23:26:50 ] スレッドで、void* で渡した引数をclassに変換したいのですがキャスト出来ないと言われます 2つ以上の引数をスレッドに渡すにはどうすればいいですか?
179 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 23:44:35 ] classじゃなくて、classへのポインタにキャストしてみればどーか? void func(void *arg) { ((hogeclass *)arg)->func(); }
180 名前:デフォルトの名無しさん [2007/11/08(木) 23:49:05 ] サンクスやってみます
181 名前:デフォルトの名無しさん mailto:sage [2007/11/08(木) 23:50:40 ] って、まさか本当に HogeClass hoge = (HogeClass) threadArg; なんて記述をしてるんじゃ…。
182 名前:デフォルトの名無しさん [2007/11/08(木) 23:59:34 ] キャストしたvoid型ポインタのarg引数のポインタの元の型 が適切な物なら良いけど、もしそうじゃないなら怖いな
183 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 00:12:57 ] 俺はその辺が気持ち悪くなってboost::threadに逃げた。
184 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 04:19:15 ] 空気読めて無い人って本当に空気読めてると思ってるんだ・・・ リアルでは出会えない珍獣を見た
185 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 05:51:13 ] >>184 とっくにスレの流れ変わってるんだから、空気読めよ。
186 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 06:34:46 ] 違うんだ・・!>>184 の空気を読めなくしたのは・・・本当は・・漏れなんだ・・・!
187 名前:デフォルトの名無しさん [2007/11/09(金) 10:24:19 ] ビット列の出現個数を数えたいのですが毎回結果が違います 何ででしょうか? #include <iostream> #include <windows.h> #include <process.h> using namespace std; #define N 1000 #define K 320000 unsigned int su[256]; unsigned WINAPI open(void *p){ unsigned long size; char *buf=new char [K+100]; HANDLE fp=CreateFile((char*)p,GENERIC_READ,0,NULL,OPEN_ALWAYS,FILE_ATTRIBUTE_NORMAL,NULL); ReadFile(fp,buf,K,&size,NULL); for(int i=0;i<size;i++)su[ (unsigned char)buf[i] ]++;} main(){ WIN32_FIND_DATA fd; char path[200]="d:\\aaa\\",serchpath[200]; strcpy(serchpath, path); strcat(serchpath, "*"); SetCurrentDirectory(path); HANDLE hd = FindFirstFile(serchpath, &fd); int n; HANDLE hf[N]; for(n=0;n<256;n++)su[n]=0; for(n=0;;n++){ for(;;){if(!FindNextFile(hd, &fd))goto end; if(!(fd.dwFileAttributes & FILE_ATTRIBUTE_DIRECTORY))break;} hf[n]=(HANDLE)_beginthreadex(NULL, 0, open,(void*)fd.cFileName, 0 ,NULL);} WaitForMultipleObjects(N, hf, TRUE, INFINITE); end: for(n=0;n<256;n++)cout<<n<<" no kosu "<<su[n]<<endl;}
188 名前:デフォルトの名無しさん [2007/11/09(金) 10:27:39 ] su配列にマルチスレッドでアクセスしているところが駄目なんでしようか?
189 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:39:10 ] >>187 ・同一メモリに複数スレッドから同時にアクセスしているから ・serchpathなんてへんな変数名だから ・thread内でnewしているのに解放していないから ・高々Kバイトしか読み込まないのに100バイトも余計に確保しているから ・変数nを違う目的に使い回しているから ・コーディングスタイルが変態だから ・ハンドル変数にfpなんて名前を使っているから ・どっかWinAPIと思しき辺りの使い方が間違っているから ・毎回ディレクトリの状態が違うから ・毎回ファイルの内容が違うから どれだろね。
190 名前:デフォルトの名無しさん [2007/11/09(金) 10:47:50 ] 正解はなんなんですか?
191 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 10:56:48 ] >>190 1つずつ問題がないかどうか確認するんだ
192 名前:デフォルトの名無しさん [2007/11/09(金) 10:58:06 ] これでも値が違います なぜでしょうか #include <iostream> #include <windows.h> #include <process.h> using namespace std; #define N 200 #define K 16 unsigned int su[K]; unsigned WINAPI f(void *p){ int n=(int)p; for(int i=0;i<n*n;i++)su[i%K]++;} main(){ int n; for(n=0;n<K;n++)su[n]=0; HANDLE hf[N]; for(n=0;n<N;n++){ hf[n]=(HANDLE)_beginthreadex(NULL, 0, f,(void*)n, 0 ,NULL);} end: WaitForMultipleObjects(N, hf, TRUE, INFINITE); for(n=0;n<K;n++)cout<<n<<" no kosu "<<su[n]<<endl;}
193 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:01:05 ] >>192 馬鹿だから。
194 名前:デフォルトの名無しさん [2007/11/09(金) 11:03:41 ] 192よりこっちのほうがたんじゅんかとおもいます どこが駄目なんでしょうか #include <iostream> #include <windows.h> #include <process.h> using namespace std; #define N 200 #define K 12 unsigned int su[K]; unsigned WINAPI f(void *p){for(int i=0;i<(int)p;i++)su[i%K]++;} main(){ int n; for(n=0;n<K;n++)su[n]=0; HANDLE hf[N]; for(n=0;n<N;n++){hf[n]=(HANDLE)_beginthreadex(NULL, 0, f,(void*)n, 0 ,NULL);} WaitForMultipleObjects(N, hf, TRUE, INFINITE); for(n=0;n<K;n++)cout<<n<<" no kosu "<<su[n]<<endl;}
195 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:09:00 ] 書き手が駄目なんだろう。
196 名前:デフォルトの名無しさん [2007/11/09(金) 11:12:06 ] こうしんされた値が、別のスレッドで更新されてしまうからですかね? メモリがFDくらい動作がのろいとするとsu[・]の値を呼び出して 1を足して書き戻すときに、同時に呼び出して計算していた値で置き換えられると言うことです
197 名前:189 mailto:sage [2007/11/09(金) 11:16:26 ] ちゃんと最初に指摘しているのに……(TT
198 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:18:14 ] カワイソス
199 名前:デフォルトの名無しさん [2007/11/09(金) 11:20:38 ] これと同じ事ですね 速くする為にスレッドにしたいのに排他制御入れたら鈍くなりますね クリティカルセクション 例 ウェブページの来訪者数を表すカウンタのプログラムを例にとって説明する。カウンターのプログラムはおおまかに次の処理からなる。 ディスク等の記憶装置から現在のカウンタの値を読み出す カウンタの値を1増やす カウンタの値を記憶装置に書き戻す ttp://ja.wikipedia.org/wiki/%E3%82%AF%E3%83%AA%E3%83%86%E3%82%A3%E3%82%AB%E3%83%AB%E3%82%BB%E3%82%AF%E3%82%B7%E3%83%A7%E3%83%B3
200 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 11:24:24 ] 配列の要素を LONG volatile にしてInterlockedIncrement。
201 名前:187 [2007/11/09(金) 11:33:53 ] いいこと思いついた スレッド側でビット列の個数を数えて、その個数を配列で返してメイン側で足しあわせる これなら時間のかかる部分はスレッドでやってあるから高速のはず
202 名前:デフォルトの名無しさん [2007/11/09(金) 12:39:04 ] 環境:WindowsXP VS2005 SP1 MFCアプリケーション ダイアログベース ある市販のDLL(libも付いてたので「追加の依存ファイルに指定済み」)の外部関数をコールするたびに、以下のようなメッセージが出力ウィンドウにでます。 HOGE.EXEの0x7c812a5bで初回の例外が発生しました:Microsoft C++の例外: std::runtime_error (メモリの場所 0x0012f16c) 0x7c812a5bでググるといくつかヒットしましたが、原因特定できず。 仕方ないので関数コールをtry catchでくくってもcatchできず。 _try _exceptでも受けれず。 このエラーはどうやったら出なくなるでしょうか?
203 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:40:31 ] 非同期処理じゃなくて高速化が目的なのかヨ。 よく知らねぇんだが、デュアルコアとは言え プロセスでもない単なるスレッドでOSがマルチな処理してくれるんか? シングルコアな動きするなら、ディスパッチするだけでむしろ遅くなりそうなんだが。
204 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:42:39 ] ゆとり教育がどうこう言われてるけど、194はもっとソースにゆとりを持たせるべき 変態と言われてもそのままってことは真性のMなんだろうか
205 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 12:45:39 ] >>203 しかも、実態はディスクアクセスで律速されるから(同じディスク上のファイルを調べる限り)殆ど速くなる余地がない罠。
206 名前:202 [2007/11/09(金) 12:47:30 ] 書き忘れましたが、出力ウィンドウに表示が出るだけで、 動作には影響は今のところありません。 あと、その市販のDLLに付いてきたMFCのサンプルプロジェクトで試しても同じエラーが出力ウィンドウに出ます。
207 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 14:46:34 ] その市販DLLの名前も書かんということはエスパー希望か。
208 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 15:54:58 ] const.cpp 1 #include <iostream> 2 3 void extfunc(const int &val) 4 { std::cout << val << std::endl; } 5 6 class A 7 { 8 static const int CONSTDATA = 0x100; 9 public: 10 void func() 11 { extfunc(CONSTDATA); } 12 }; 13 14 int 15 main() 16 { 17 A a; 18 a.func(); 19 return 0; 20 } $ g++ --version g++ (GCC) 4.2.3 20071014 (prerelease) (Debian 4.2.2-3) $ g++ const.cpp /tmp/ccN8OXMd.o: In function `A::func()': const.cpp:(.text._ZN1A4funcEv[A::func()]+0x9): undefined reference to `A::CONSTDATA' うーん・・・コンストメンバ変数って、参照で受ける事が出来ないんでしょうか? extfunc(int(CONSTDATA)); とすれば通りますがなんか・・・
209 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 15:59:37 ] メーカーに電話。
210 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 16:19:18 ] >>208 定義が無いから賢いコンパイラなら定数データの領域は確保しないらしいね (なので当然シンボルもない) by メイヤーズ 定義してみなよ const int A::CONSTDATA;
211 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 16:41:20 ] >>203 187の場合で効果があるかどうかは別として、少なくともWindowsでは、 マルチスレッドでも複数の論理CPUを使ってくれる。
212 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 16:46:47 ] Linuxにとっては、スレッドはプロセスと基本的には同じ。 従って、特定のスレッドがどのコアで実行されるかは 原則的にカーネルにゆだねられる。
213 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 17:07:17 ] >>210 なんと・・・ 6 class A 7 { 8 static const int CONSTDATA; 9 public: 10 void func() 11 { extfunc(CONSTDATA); } 12 }; 13 14 const int A:CONSTDATA = 0x100; でOKでした,#defineしちゃいそうだけどここは我慢・・・ サンクスです
214 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:00:56 ] >>213 初期値の指定はクラス定義内でいいんだぜ。そうしないと配列要素数とかの 定数式につかえない。 >>210 クラスのメンバ変数は定義しない限り実体がなくて、参照やポインタを取ろうとすると エラーになることは決まっている。整数型に限って初期値をクラス定義内に書けて、 書けば定数式に使えるという特別ルール。
215 名前:デフォルトの名無しさん mailto:sage [2007/11/09(金) 22:03:41 ] >>206 DLL 内で throw されて DLL 内で catch されてるんでしょ。何も問題ない。
216 名前:デフォルトの名無しさん mailto:sage [2007/11/10(土) 00:33:03 ] 暗号アルゴリズムを勉強しはじめたところなのですが、 DES や AES など、一般的な暗号方式のライブラリはありませんか? C でも C++ でもいいです。 ご存知のかた、もしくは自作モノを持っているかた、情報をお願いします。 ;; できれば SHA-1 や base64 まで対応していると嬉しいですが、 ;; 無くても構いません。