■過去ログ置き場に戻る■
1-
前250
次250
最新50
[memo]
"9999999999_00.html#R20"
という感じで、URLの最後に "#R
レスNo
" を追加すると幸せになれます。
C++相談室 part25
751
名前:
デフォルトの名無しさん
:03/11/24 22:35
>なにが言いたいのかよくわからないんだけど。
>やねがじゃなくて、745が。
漏れは分かったけど。
752
名前:
748
:03/11/24 22:38
>>750
つまり「Tにintが入る」ということを
コンパイラに伝えてクラスを生成してもらう為にはヘッダに
書かねばならないということでしょうか?
なんだか不思議な気分ですが、確かに生成って感じがします。
素早い解説、ありがとうございました!
753
名前:
デフォルトの名無しさん
:03/11/24 22:41
>>752
テンプレートはコード実体ではなく、
パラメータを与えられて初めてコードが生成される条件が揃うからね。
754
名前:
748
:03/11/24 22:45
>>753
♂。それを初めて体で理解しました。
でも、なんか気持ち悪い気もしますが...
*.cppの方に書くやり方というのはないのでしょうか?
755
名前:
デフォルトの名無しさん
:03/11/24 22:49
>>748
*.hppの最後に*.cppをインクルードする
ただこのとこ拡張子をcppからimpとかimplに変えたりする。
756
名前:
755
:03/11/24 22:51
ただこのとこ->ただ、このとき
つーか、別に変えなくてもいいんだけどさ。
757
名前:
748
:03/11/24 22:54
あ、そういう手がありましたね!
ありがとうございます。
いやー、なんか「コードの生成」ってかっこいいですね。
C++が好きになりました。
758
名前:
デフォルトの名無しさん
:03/11/24 23:19
>>754
export という cpp の方に書くやり方はあるんだが、
実装がメンドくてコンパイラメーカーがなかなか
実装してくれないので、事実上使えなかったりする。
759
名前:
デフォルトの名無しさん
:03/11/24 23:22
オーバーライドって必ずシグニチャを合わせないといけないんですか?
引数なし戻り値なしの純粋仮想関数を、引数あり戻り値ありの関数にオーバーライドしたいのですが、何か手はあるのでしょうか?
純粋仮想関数に環境依存した引数や戻り値を加えたくないのです
760
名前:
デフォルトの名無しさん
:03/11/24 23:31
>>759
不可能。
つか、仮想関数って何か一から勉強しなおせ。
761
名前:
デフォルトの名無しさん
:03/11/24 23:32
>>759
class Base {
virtual void methodA() = 0;
};
class Derived : public Base {
int methodA( int x ) { ... }
};
////////
Base* p;
...
p->methodA( ここをどう記述する気? );
762
名前:
759
:03/11/25 00:06
>>760
やはり無理ですか。仮想関数は一応わかってはいるつもりなんですが。
>>761
たとえば抽象ウィンドウクラスがあって、それを特化させてWindows用ウィンドウクラスを作りたいとします。
class Window { //抽象ウィンドウクラス
virtual ? Initialize( ? ) = 0; //?の部分をどうしよう
};
class WindowsWindow : public Window { //Windows用ウィンドウクラス
int Initialize( HINSTANCE ... ) //環境依存
};
という事なんですが、何かおかしいでしょうか。たぶんおかしいと思いますが。
763
名前:
デフォルトの名無しさん
:03/11/25 00:12
>>762
それをどうやって呼び出す気だ?
764
名前:
762
:03/11/25 00:14
>>763
呼び出せないですよね。俺って何がしたいんだろう・・・sage
765
名前:
762
:03/11/25 00:16
つまり特化で継承するときはオーバーライドじゃなくてオーバーロードしろということですね?
766
名前:
762
:03/11/25 00:20
ていうか継承は特化なわけですが。
やっぱり一から出直してきます。ありがとうございました。
767
名前:
デフォルトの名無しさん
:03/11/25 00:21
まぁ、Visitorパターンとか使えば全く関係のない関数呼ばせることもできるが。
768
名前:
デフォルトの名無しさん
:03/11/25 00:23
>>765
分かってないのは仮想関数でなくてC++そのものだな。
769
名前:
762
:03/11/25 00:29
ああ、多態するためにあるんでしたね仮想関数は。
>>768
オーバーライド時のシグニチャの問題がEffectiveC++か何かに載っていたような気がしたのでそれも復習します
770
名前:
デフォルトの名無しさん
:03/11/25 00:40
>>762
とりあえず、やねうらお氏の過去日記を一通り読むことを
お奨めする。その中の一つに、ずばり解答があるよ。
って書くと、また「信者きもい」とか言われるんだろうな。
771
名前:
デフォルトの名無しさん
:03/11/25 00:51
「その中の一つ」の URL を黙って貼ればいいのに。
772
名前:
デフォルトの名無しさん
:03/11/25 00:53
>>770
別にそこでなくともよかろうに、わざわざやねやね言うな。
ご希望通り言っておくよ、信者きもい。
773
名前:
デフォルトの名無しさん
:03/11/25 00:57
>>767
プラットホーム依存部分を分離したいって話だと、むしろ Builder か
Bridge の出番かと。ダブルディスパッチっぽいことをやりたいなら
Visitor がピッタリだけど。
774
名前:
762
:03/11/25 01:11
やね氏の本の1と2買ったんですが、あれは酷いと思いました。
真面目に理解しようと読んでるのに、すぐつまらない事言って茶化す。
「何馬鹿な事言ってんだこいつ?」というのと、相手が実力者でこちらが教えを乞うているという立場にあるという葛藤。
とてもイライラしました。馬鹿なDQNヲタにとってはすごく楽しいんでしょうね。嫌味でなく羨ましい。
ま、無能の負け惜しみです。くたばれシャーマンやねアンチ信者
もう疲た
775
名前:
デフォルトの名無しさん
:03/11/25 01:13
>>774
すごいイタいアンチだな。
776
名前:
デフォルトの名無しさん
:03/11/25 01:14
買う前にチェックしろよ…
人を罵倒する前に自分の愚かさを改めなさい。
777
名前:
デフォルトの名無しさん
:03/11/25 01:21
>>774
痛さが感染してるぞ。
778
名前:
デフォルトの名無しさん
:03/11/25 01:21
>>762
デザパタ用語に反応しないってことは知らないってことかな?
そっちも知っとくと良いよ。
779
名前:
デフォルトの名無しさん
:03/11/25 01:31
やね氏のつまらないギャグがイタイのは分かるが、
場を和ませるための挿入だったりするので、そこ突っ込みすぎると
かえって揚げ足どりになるかも。
肝を読んでみては?
780
名前:
デフォルトの名無しさん
:03/11/25 01:34
その名は禁句だと言ってるだろ。
いったい何の話がしたいんだ?
781
名前:
デフォルトの名無しさん
:03/11/25 01:36
プログラミング関係の書籍の寒いギャグは翻訳もので慣れた。
782
名前:
デフォルトの名無しさん
:03/11/25 02:04
>>781
ははは。禿同。
なんで海外モノの技術書って、寒すぎるギャグが連発するんだろ?
日本人のギャグのレベルが高すぎるのだろうか?
少なくとも、向こうでは「イタイ」と認識されてないから止まないんだよな?
783
名前:
デフォルトの名無しさん
:03/11/25 02:13
アメリカンジョークなんてたいがいそんなものだよ
784
名前:
デフォルトの名無しさん
:03/11/25 02:14
寒いだけならましで、理解できないのもたまにある。
785
名前:
デフォルトの名無しさん
:03/11/25 02:16
>>782
ジョークってのはかなり文化に根ざしてるから翻訳すると寒いのが普通。
ましてや書いてる人間も笑いのプロじゃないわけだし。
786
名前:
デフォルトの名無しさん
:03/11/25 02:16
>>アメリカンジョークなんてたいがいそんなものだよ
けど、映画やなんかだと、そんな寒いギャグってないんだよなぁ。
787
名前:
デフォルトの名無しさん
:03/11/25 02:19
>>786
ものにもよるけど、
プログラミング本のギャグ→笑いのプロが書いてない
映画のギャグ→笑いのプロが書いてる
が前提だし。
788
名前:
デフォルトの名無しさん
:03/11/25 02:23
それ以上は他所でやれ。ここは C++ のスレ。
789
名前:
デフォルトの名無しさん
:03/11/25 03:56
>>782
つーか文化の違いによるセンスの差をそのまま優劣に変えて、
しかも何の疑問もなく自分を上に置くお前のほうが寒い。
790
名前:
デフォルトの名無しさん
:03/11/25 05:46
>プログラミング本のギャグ→笑いのプロが書いてない
>映画のギャグ→笑いのプロが書いてる
でも、それって日本でも当てはまる前提条件なんだよなー。
そもそも日本の場合、プログラミングの本にギャグなんか載せないし。
たまに例外があったとしても、やねうらお本くらいだし。
>つーか文化の違いによるセンスの差をそのまま優劣に変えて、
確かに優劣うんぬんをつけるものではないと思うけど、
アメリカンジョークってまじで寒くてイタイかと。
文化に根ざしているものの違いうんぬん以前に。価値観の違いの問題ではないと思うな。
791
名前:
デフォルトの名無しさん
:03/11/25 05:52
>「何馬鹿な事言ってんだこいつ?」
>というのと、相手が実力者でこちらが教えを乞うているという立場にあるという葛藤。
ぶはははははははは。
キミ、意外と正直者だね。このスレの住人も素直になれば
キミに激しく同意する人も少なくないんじゃないかな?
つまらんギャグはノイズとして目をそらして、中身を見るようにすれば
それなりに有用な著だと思う。
実際、「C++に関して、やねうらをよりも博識で経験も豊富である」と
自信もって言える人、少ないでしょ?
792
名前:
デフォルトの名無しさん
:03/11/25 06:28
ここはやねうらおスレッドではない。
信者もアンチも他所でやってくれ。
793
名前:
デフォルトの名無しさん
:03/11/25 07:15
旗色悪くなるとすぐスレ違いとか言い出すなあ。
794
名前:
デフォルトの名無しさん
:03/11/25 07:16
それまで乗り気なくせに。
795
名前:
デフォルトの名無しさん
:03/11/25 07:24
お前らさてはゲーラボ読んでるな!
796
名前:
デフォルトの名無しさん
:03/11/25 07:32
>>793
旗色って?だれか言い争ってるの?
妄想もたいがいにしといてくださいよ。
797
名前:
デフォルトの名無しさん
:03/11/25 09:14
そんな議論よっか、せっかくだから
>>762
の解答ズバリのページを教えてくれよ。
798
名前:
デフォルトの名無しさん
:03/11/25 09:22
あのさ、俺ダブルディスパッチってなんだか理解できないんだけど、
言葉が出てきたから質問してもいいかな?
要するに、俺が相手にに仕事しろって命じたら、
相手がその詳細を知らなくて、俺に仕事をそのまま回すことだよな。
なんでそれだけのことにダブルディスパッチなんて仰々しい名前がついてるんだ?
インタプリタのソースとか読んでるとこの名前が出てきて
いきなり尻込みするんだが。
799
名前:
デフォルトの名無しさん
:03/11/25 10:21
>>798
ダブルディスパッチは、Modern C++ Degisnに出てくる
二つの異なるクラスの関係に対応した処理を選択する手法。
例は、形状クラス同士の重なりを判定するときに
形状には円クラスや四角形クラス、多角形クラスがあるとして
それぞれの組み合わせに最適な処理を選択する方法が出ている。
テンプレートを使ってね。
この言葉が
>>773
ででてきたのは、Window作成パラメータ型が
環境固有の型だとして、それを渡すと勝手に対応する環境の
Window派生クラスが選択されるという仕組みを指してるんだろう。
800
名前:
デフォルトの名無しさん
:03/11/25 12:25
最近VC++の勉強を始めた者ですが、教材にVC++6.0を使ってます。
VC++.NETにするべきですか?
個人的には変えたほうがいいかとも思いますが、
いまいち分からないので。
801
名前:
デフォルトの名無しさん
:03/11/25 13:02
C++でリフレクションって使えますか?
できれば環境依存せずに。
802
名前:
デフォルトの名無しさん
:03/11/25 13:05
>>801
使えない
803
名前:
デフォルトの名無しさん
:03/11/25 14:04
>>800
VC++6.0 は C++ の仕様がちと古いので
欲を言えば VC++.net 2003 の方がいい。
ただ、金がなければ無理して買うまでもない。
804
名前:
デフォルトの名無しさん
:03/11/25 14:45
new可能な最大メモリサイズを知りたかったので
MEMORYSTATUS.dwAvailPhys を使って
現在の未使用物理メモリを求めた後に new をしています。
dwAvailPhys=500MBの時に500MBを new した場合に
メモリ不足エラーになるのはしょうがないと思うのですが
400MBや450MBくらいを new した場合でも
「メモリが不足しています」
と表示される事がよくあります。
この原因はメモリ断片化/ページングなどのせいで
実際は500MB余っているが、この500MBはあくまで合計で
連続した領域ではない場合に発生するのでしょうか?
(newは連続した領域を取るのでそう思いました。)
もしこれが原因ならば(全然違ってたらすみません。。)
純粋に現在new可能なサイズを知るにはどうすればよいのでしょうか?
もしくはメモリ断片化をnew直前に最適化できたりするのでしょうか?
OSはWin2000/XPです。
よろしくお願いします。
805
名前:
801
:03/11/25 16:40
リフレクションなんとかなりませんか?
806
名前:
デフォルトの名無しさん
:03/11/25 17:02
>>805
変数なら、map<string, variant> に全メンバを格納するとか。
関数は難しいと思う。
807
名前:
800
:03/11/25 17:04
>>803
では、変えなくていいということでFA?
808
名前:
デフォルトの名無しさん
:03/11/25 18:33
>>807
http://www.microsoft.com/japan/msdn/visualc/productinfo/topten/upgrade60.asp
このあたりでも見て自分で考えろ。
809
名前:
デフォルトの名無しさん
:03/11/25 18:40
とりあえず.NETが捨てられることは確定したわけだから
6.0持っていて2003買うくらいなら次のまで待ったほうがいいと思うけど。
810
名前:
デフォルトの名無しさん
:03/11/25 18:52
templateとかきっちり使いたい or 使ったライブラリを使いたいなら
2003にすべき。
811
名前:
デフォルトの名無しさん
:03/11/25 19:04
>>810
それだけならgccにしたほうがいいと思うが
812
名前:
デフォルトの名無しさん
:03/11/25 19:16
>>お前らさてはゲーラボ読んでるな!
はて?なんで、そう思ったの?
>>dwAvailPhys=500MBの時に500MBを new した場合に
どういう用途かは知らないけど、まず、500MBをnewするのではなく
staticな配列にしてみてはどうだろう?
813
名前:
やね信者
:03/11/25 19:22
>純粋に現在new可能なサイズを知るにはどうすればよいのでしょうか?
>もしくはメモリ断片化をnew直前に最適化できたりするのでしょうか?
一応、環境非依存な方法を教えてあげるよ。
まず、2Gバイト確保要求。で、mallocが確保に失敗すればNULLを返却する。
で、失敗したら半分の1Gバイト確保。
それでも、失敗したら次はさらに半分の512MB確保要求。
でも、失敗したら、256MBで。
成功したら、256+256/2=384MB確保。
以下、繰り返すと、最悪でも28回程度で、正確な確保限界サイズが
判明する。(確保に成功したら、即座に解放するのもお忘れなく)
なんらかのステータス取得すれば、あっさり求まるとは思うけど、
一応、どんな環境でも適応できるので、一度組むと重宝すると思うよ。
814
名前:
デフォルトの名無しさん
:03/11/25 19:31
>>813
それじゃだめじゃん。
アドレスだけ予約してページ違反が発生するまで実際に確保しない可能性だってあるんだし。
815
名前:
デフォルトの名無しさん
:03/11/25 19:44
std::exceptionの実装が見つかりません。
includeフォルダにあるファイルexceptionには定義しか書いてありません。
includeフォルダを検索しても見つからず、CRTのソースフォルダにも見あたりません。
いったいどこにあるのでしょうか?
VC++6.0 SP5
816
名前:
デフォルトの名無しさん
:03/11/25 20:12
ないね。
コンパイラが内蔵してるんじゃないの?
817
名前:
デフォルトの名無しさん
:03/11/25 20:39
liboctave + atlas 使って数値計算してる香具師いる?
blitzとの比較教えて
818
名前:
デフォルトの名無しさん
:03/11/25 21:30
>>813
漏れはアンチ派だが、ちゃんと名乗っていることにはとっても好感が持てる。
ただ、その案はとてもオススメできる話じゃないぞ。
「free 関数 == ランタイムルーチンがシステムにメモリを開放」ってわけじゃないからな。
(そういう実装の環境・処理系も存在はするだろうが。)
819
名前:
デフォルトの名無しさん
:03/11/25 21:53
>>818
>「free 関数 == ランタイムルーチンがシステムにメモリを開放」ってわけじゃないからな。
どうせ、ある特定のソースが根拠だろ。
仕様と実装の区別がつかない痛厨。
820
名前:
デフォルトの名無しさん
:03/11/25 22:04
>>819
>>813
>一応、どんな環境でも適応できるので、一度組むと重宝すると思うよ。
821
名前:
デフォルトの名無しさん
:03/11/25 22:05
>>819
システムにメモリを返却することが保証されているわけじゃないんだから
それに期待した実装をするほうが厨だと思うんだが、どうよ?
特に今回のケースのように他へ影響を及ぼす場合は特に。
822
名前:
デフォルトの名無しさん
:03/11/25 22:07
16bit環境下でのエクステンダーなんてものもあるしねぇ。
823
名前:
デフォルトの名無しさん
:03/11/25 22:25
最近始めて、なぜVC6を使ってるのかがギモン
824
名前:
やね信者
:03/11/25 23:01
>それじゃだめじゃん。
>アドレスだけ予約してページ違反が発生するまで実際に確保しない可能性だってあるんだし。
んむ、一応その可能性も考えた上なのだ。っていうのも
>dwAvailPhys=500MBの時に500MBを new した場合に
>メモリ不足エラーになるのはしょうがないと思うのですが
という質問の文脈からして、newした時点での問題だと思うから。
>「free 関数 == ランタイムルーチンがシステムにメモリを開放」ってわけじゃないからな。
次の確保に備えて、そのような実装もあるとは思うけど、
一般的なヒープでは、free()した直後は、確保領域もそのぶん解放される
と考えて良いのでは?と思う。
825
名前:
800
:03/11/25 23:03
いろいろな意見ありがとうございます。
参考にさせていただきます。
>>823
おそらく私に対してのレスだと思いますので説明させてもらうと、
仕事場にあったやつです。
それを捨てるって言うんで、もらってきただけの事。
他にもVB6.0とかVJ(だったっけ?)があったけど、
VC++にした。
そういうことです。
826
名前:
デフォルトの名無しさん
:03/11/25 23:14
プログラマーに知能指数は必要ですか?
827
名前:
デフォルトの名無しさん
:03/11/25 23:15
>>824
>>「free 関数 == ランタイムルーチンがシステムにメモリを開放」ってわけじゃないからな。
>次の確保に備えて、そのような実装もあるとは思うけど、
>一般的なヒープでは、free()した直後は、確保領域もそのぶん解放される
>と考えて良いのでは?と思う。
百歩譲って、その主張が全面的に正しいかったとしても、
そのタイミングで別プロセスが無駄にメモリの確保に失敗することになるぞ。
>>819
氏ね。
828
名前:
デフォルトの名無しさん
:03/11/25 23:20
>>824
環境非依存を謳い文句にするなら
環境依存の書き込みを基準にしちゃダメじゃん。
一般的な環境を基準にしちゃダメじゃん。
829
名前:
デフォルトの名無しさん
:03/11/25 23:39
別に他のプロセスがどれだけメモリ確保してようが、
該当プロセスの仮想メモリアドレス空間が足りてれば
確保に成功するはずだが。
830
名前:
デフォルトの名無しさん
:03/11/25 23:47
>>829
仮想メモリの総量には限界があるだろ。
831
名前:
デフォルトの名無しさん
:03/11/25 23:48
環境非依存でお願いします。
832
名前:
デフォルトの名無しさん
:03/11/25 23:57
問題になるのは仮想メモリと実装メモリだけじゃないしな。
windowsだとプロセスに割り当てられるヒープサイズにも影響している。
初期だと200MB位じゃなかったか?
833
名前:
デフォルトの名無しさん
:03/11/26 00:56
unixだと確保できるけど、実際に代入開始するといきなりswapはじめるんだよなぁ。
834
名前:
デフォルトの名無しさん
:03/11/26 04:22
400MB も連続したメモリを扱おうとしている事自体を
やめた方がええんでなかろうか。
いくつかに分割して扱うようにして。
835
名前:
やね信者
:03/11/26 04:52
>百歩譲って、その主張が全面的に正しいかったとしても、
>そのタイミングで別プロセスが無駄にメモリの確保に失敗することになるぞ。
なりません。あるプロセス内のヒープの成否は、他プロセスのヒープの成否に
なんら影響を与えません。
ちなみにですが、Windows環境にせよunix環境にせよ
いきなり malloc( 256メガバイト ) としても、実際に消費される
物理メモリはたったの4kb〜8kbです。実際にアクセスしてみるまでは
swapだとか発生しないのです。
ただ833さんの指摘するような現象が発生する危険性はありますが。
だとしてもメモリ確保の失敗か成功かは、全く別の話題になるかと。
836
名前:
デフォルトの名無しさん
:03/11/26 07:57
>>835
グローバルヒープとローカルヒープの違いわかってる?
837
名前:
デフォルトの名無しさん
:03/11/26 08:22
これだからやね信者は困る、と言われそう
838
名前:
デフォルトの名無しさん
:03/11/26 15:47
>>836
http://www.nifty.com/webapp/digitalword/word/014/01479.htm
WindowsNT系ではグローバルヒープとローカルヒープの実質的
違いはない。APIは残されてるけど。
839
名前:
やね信者
:03/11/26 18:41
>>グローバルヒープとローカルヒープの違いわかってる?
えっと、
環境非依存といいつつ、実質、32bitポインター以上の環境であることを
前提に話を進めてます。だって、C++相談室なスレで
16Bitな環境を考慮に入れてもなにかと現実的でないでしょ?
で、Win95以降な32Bitな場合(もちWinNTも含めて)、
グローバルヒープだとかローカルヒープだとかの概念がそもそもないです。
なので、
>>違いわかってる?
違いがないので、わかりません。
840
名前:
やね信者
:03/11/26 18:43
例えば、vc++.netであれば、\Vc7\include にあるmalloc.hを
見れば分かるですよ。
841
名前:
デフォルトの名無しさん
:03/11/26 22:01
>>838
勉強し直せ。
>>839
>環境非依存といいつつ、実質、32bitポインター以上の環境であることを
>前提に話を進めてます。
勝手に前提を崩すな。
そんなこと言うなら初めから「どんな環境でも適応できる」なんて軽々しく言うなよ。
>>840
環境非依存の話なのに特定の処理系を持ちだしてそれでヨシとするなよ。
お前はそれで満足なのかもしれんがそれじゃ他人を説得できんぞ。
842
名前:
デフォルトの名無しさん
:03/11/26 22:05
グローバルヒープとか言い出した時点で、環境非依存ではないし、
そもそもの804自体、MEMORYSTATUS.dwAvailPhysとかいって
環境依存だし、あんたは人を論難するだけで建設的なことを言わないし。
843
名前:
デフォルトの名無しさん
:03/11/26 22:29
未来永劫一切freeすんな
メモリ枯渇が心配なら買え
PetaSiteでスワップしろ
844
名前:
デフォルトの名無しさん
:03/11/26 22:54
>>842
>グローバルヒープとか言い出した時点で、環境非依存ではないし、
環境非依存というのはいろんな環境で問題がないことを示す必要が
あることは理解できますか?
>あんたは人を論難するだけで建設的なことを言わないし。
代案無き批判がすべて価値のないものだとでも思ってるのですか?
もし、そう思ってるんなら無視すりゃいいだけ。いちいち相手にすんな。
845
名前:
デフォルトの名無しさん
:03/11/26 23:43
C++超初心者ですが、質問です。
現在hashとqueueを組み合わせたようなデータ構造をrubyで作成しました。
idとdataが入力されたら、idごとに分けてqueueに格納していきます。
rubyだと、
hashqueue = Hash.new
hashqueue[id].push(data)
のように書きましたが、C++だとどのように書くのでしょう?
std::map<int, std::queue<int> > hashqueue;
hashqueue.insert(pair<int, std::queue<int> >(id, c));
と書いてみましたが、エラーがでます。式の構文エラーと、未定義のシンボルpairと表示されます。
何か根本的に間違っているのでしょうか?
馬鹿な私にどうか教えてください。
846
名前:
デフォルトの名無しさん
:03/11/26 23:48
std::map は hash とは限らない。
STL じゃないけど、最近は std::hash_map が付いてることが多いんで、
こっちを使った方がいいかも。
で、std::map にしろ、std::hash_map にしろ、
hash[id].push(data);
という風に使えるはず。
847
名前:
デフォルトの名無しさん
:03/11/26 23:49
>>845
>超初心者
「初心者」を「超」えている・・・つまるところ、中級者ですね。
848
名前:
デフォルトの名無しさん
:03/11/26 23:50
とりあえず、pair は std::pairだから。
849
名前:
デフォルトの名無しさん
:03/11/27 00:06
>>844
>環境非依存というのはいろんな環境で問題がないことを示す必要が
>あることは理解できますか?
「問題がある環境」がconforming implemenationであることの証明は?
850
名前:
デフォルトの名無しさん
:03/11/27 00:07
↑
「問題がない環境」がconforming implemenationであることの証明も必要
851
名前:
デフォルトの名無しさん
:03/11/27 00:08
conforming implementationでない環境を非難する意図は毛頭ないが
852
名前:
デフォルトの名無しさん
:03/11/27 00:20
>>849
>「問題がある環境」がconforming implemenationであることの証明は?
必要ありません。
853
名前:
デフォルトの名無しさん
:03/11/27 00:25
>>845
std::map<int, std::queue<int> >型が扱うのは
pair<int, std::queue<int> >じゃなくてpair<const int, std::queue<int> >です。
854
名前:
デフォルトの名無しさん
:03/11/27 00:41
>>853
そこはどうでもいい。
pair<int, std::queue<int> > は pair<const int, std::queue<int> > に暗黙的に変換できる。
855
名前:
デフォルトの名無しさん
:03/11/27 00:50
>>852
どっちにでも取れる玉虫色だなw
856
名前:
デフォルトの名無しさん
:03/11/27 01:07
いい加減に非を認めろよー。
認めたくないなら、それはそれでとっととケツまくれ。
いつまでもウジウジ、うざい。
857
名前:
やね信者
:03/11/27 01:32
>環境非依存の話なのに特定の処理系を持ちだしてそれでヨシとするなよ。
>お前はそれで満足なのかもしれんがそれじゃ他人を説得できんぞ。
いや、だからおいらが813で示した方法は環境非依存だよ。
Win32、cygwin、linux、solaris、mac(OS9)はもちろん。
ARMを乗せたDVD操作リモコンで
32キロバイトのメモリしか積んでないケースでもいけたんだから。
(ヒープ容量は16kb)
逆に聞きたいけど、おいらが、813で示した方法でヒープの残りサイズが
正しく求めることができない環境の具体例を挙げてみてよ。
そんで、16Bit環境のmallocの引数は当然、16Bitだから2Gバイトなんで
数値渡せないけどさ、それでも813の方法で求められるんだよ。
最初に調査する2Gの数値を32768に置き換えるだけで。
MS-DOSでもこれでいける筈。
とりあえず、具体的な例外環境を挙げておくれ。
これといって、挙げられないなら、環境非依存だよ。
858
名前:
デフォルトの名無しさん
:03/11/27 01:37
>>857
>正しく求めることができない環境の具体例を挙げてみてよ。
初めから誰もその点については否定してませんが。
問題をすり替えちゃダメ。
859
名前:
デフォルトの名無しさん
:03/11/27 01:41
#include <iostream>
template <typename A,typename B>
class hoge
{
friend std::ostream& operator<<(std::ostream&,const hoge&);
A a;
B b;
public:
hoge(A a_,B b_):a(a_),b(b_){}
};
template <typename A,typename B>
std::ostream& operator<<(std::ostream& out,const hoge<A,B>& h)
{
out << '(' << h.a << ',' << h.b << ')' << std::endl;
}
int main()
{
hoge<int,int> h(1,2);
std::cout << h;
return 0;
}
860
名前:
デフォルトの名無しさん
:03/11/27 01:41
↑こんなかんじのファイルをコンパイルすると
hoge.obj : error LNK2019: 未解決の外部シンボル
"class std::basic_ostream<char,struct std::char_traits<char> > & __cdecl operator<<(
class std::basic_ostream<char,struct std::char_traits<char> > &
,class hoge<int,int> const &)"
(??6@YAAAV?$basic_ostream@DU?$char_traits@D@std@@@std@@AAV01@ABV?$hoge@HH@@@Z)
が関数 _main で参照されました。
hoge.exe : fatal error LNK1120: 外部参照 1 が未解決です。
といったエラーが出てしまうのですがどうしてでしょうか?
環境はVC++7.1です。
861
名前:
デフォルトの名無しさん
:03/11/27 01:46
>>857
STLportのノードアロケータは、標準に適合したmalloc/newの実装となり得るが、
813の方法ではヒープの残りサイズを正しく求めることができない。
862
名前:
デフォルトの名無しさん
:03/11/27 01:47
operator << は何も返さなくてもコンパイルできるん?
863
名前:
デフォルトの名無しさん
:03/11/27 01:47
>>857
これといって、挙げられないなら、環境非依存だよ。
使用にあたって実害がないというだけ。
これはイコール環境比依存とはならない
以前どこかのスレで話に出た浮動少数型をゼロでメモリクリアする問題も
IEEE754を採用してない例を誰もあげていなかったが、
環境非依存ではなく、実害がないという結論に落ち着いたはず。
あなたの言い分だと、上の問題も環境非依存であるというのと同じ。
864
名前:
デフォルトの名無しさん
:03/11/27 01:51
>>860
template class hoge<A,B> で friend として宣言されている関数は
std::ostream& operator<<(std::ostream&,const hoge<A,B>&);
であって、
template std::ostream& operator<< <A,B>(std::ostream&,const hoge<A,B>&);
ではない。
865
名前:
デフォルトの名無しさん
:03/11/27 02:00
>>863
だから、害ならあるんだって。
Win3.1 でそんな方法をとったら他のプロセスに実害がでるの。
もう、いい加減に非を認めるかケツまくれって。ホント、うざいぞ。
866
名前:
デフォルトの名無しさん
:03/11/27 02:06
実はアロケートされたメモリでも書き込みがあるまで割り当てが遅延される。
moatの範囲を知ったところで、残りメモリ量を知ることは無理。
867
名前:
デフォルトの名無しさん
:03/11/27 02:06
>>865
ん?何をそんなに怒ってるのかわからんのだが。
挙げられないのなら、を受けて
(挙げられなかったとしても)使用にあたって実害がないというだけ。
と返したかっただけだよ。
>>857
の書き込みは環境に依存していないということを証明してないぞってね。
868
名前:
859
:03/11/27 02:07
>>862
return out;
を書き忘れていました。
<<864
テンプレート関数のfriend宣言はどう書いたらいいのでしょうか?
friend template std::ostream& operator<< <A,B>(std::ostream&,const hoge<A,B>&);
ではエラーになってしまいます。
869
名前:
デフォルトの名無しさん
:03/11/27 02:14
>>868
friend std::ostream& operator<< <>(std::ostream&,const hoge&);
ちょっとキモイけど。
870
名前:
859
:03/11/27 02:22
>>869
それでもエラーになってしまいます。
871
名前:
デフォルトの名無しさん
:03/11/27 02:26
>>867
文意を履き違えますた。すまそ。
>>857
>>813
の方法にダメ出ししとくと、atomic な処理じゃないからやってる最中に
他プロセスがメモリの確保・解放をするだけで影響を受けて明後日な結果になるぞ。
まぁ、仮に atomic に処理できて正確なサイズが手に入っても他プロセスのメモリ操作で
無効な数値になるから所詮、目安の域をでないけどな。
872
名前:
デフォルトの名無しさん
:03/11/27 02:36
>>870
エラーメッセージは?
873
名前:
859
:03/11/27 02:45
>>872
(6): error C2143: 構文エラー : ';' が '<' の前にありません。
コンパイルされたクラスのテンプレートのインスタンス化 'hoge<A,B>' の参照を確認してください
(6): error C2433: 'operator`<<'' : 'friend' はデータ宣言をするのに使用できません。
(6): error C2530: 'operator`<<'' : 参照が初期化されずに宣言されています。
(6): error C2238: ';' の前に無効なトークンがあります。
(18): error C2904: '<<' : 名前は、現在のスコープで、テンプレートに対して既に使用されています。
'operator`<<'' の宣言を確認してください。
こんなかんじです
874
名前:
デフォルトの名無しさん
:03/11/27 02:57
うーん。gccならとおったんだけど。もうわかんないや。
875
名前:
859
:03/11/27 03:14
>>874
operator<<のプロトタイプ宣言が抜けてるだけでした。
それで869のfriend宣言でうまくいきました。
ありがとうございました。
876
名前:
デフォルトの名無しさん
:03/11/27 03:17
>>875
あれ?
friend 宣言は名前空間スコープでの宣言を兼ねるはず。
ちょっと気になるので、うまくいったソース貼ってほしいなぁ。
877
名前:
859
:03/11/27 03:38
>>876
#include <iostream>
template <typename A,typename B> class hoge;
template <typename A,typename B>
std::ostream& operator<<(std::ostream& out,const hoge<A,B>& h)
{
out << '(' << h.a << ',' << h.b << ')' << std::endl;
return out;
}
template <typename A,typename B>
class hoge
{
friend std::ostream& operator<< <>(std::ostream&,const hoge&);
A a;
B b;
public:
hoge(A a_,B b_):a(a_),b(b_){}
};
int main()
{
hoge<int,int> h(1,2);
std::cout << h;
return 0;
}
です。
878
名前:
859
:03/11/27 03:45
>>877
こっちでした。
#include <iostream>
template <typename A,typename B> class hoge;
template <typename A,typename B> std::ostream& operator<<(std::ostream&,const hoge<A,B>&);
template <typename A,typename B>
class hoge
{
friend std::ostream& operator<< <>(std::ostream&,const hoge&);
A a;
B b;
public:
hoge(A a_,B b_):a(a_),b(b_){}
};
template <typename A,typename B>
std::ostream& operator<<(std::ostream& out,const hoge<A,B>& h)
{
out << '(' << h.a << ',' << h.b << ')' << std::endl;
return out;
}
int main()
{
hoge<int,int> h(1,2);
std::cout << h;
return 0;
}
879
名前:
845
:03/11/27 14:15
>>846
,848,853,854
どうもありがとうございます。がんばってみます。
880
名前:
デフォルトの名無しさん
:03/11/27 20:09
質問させてください
今、stringクラスで"4-5-34-2"のように、数字と"-"からなる文字列を持っています。
ここから数字だけを取り出したいんですが、いい方法はありますか?
rubyとかだと、split(/-/)があるので簡単なんですけど・・
881
名前:
デフォルトの名無しさん
:03/11/27 20:10
remove_ifとisdigitかな。
882
名前:
デフォルトの名無しさん
:03/11/27 20:23
>>880
boost::RegEx("-").Split();
883
名前:
デフォルトの名無しさん
:03/11/27 20:37
なんかおまいらの議論は、思いっきり基本的なところでズレてるな。
>ヒープの残りサイズが正しく求めることができない
そもそも正しい値なんかあるのか?
x = coreleft(); // 仮にこいつが「正しい値」を返しても
p = new char[x]; // この時点で既にあてにならん
処理系非依存でクリティカルセクションが書けるものなら書いて見ろ。
しかもそれ以前の問題でメモリ管理に特殊機能が必要な場合は
operator new を自作して、そいつとペアで残量問い合わせ関数やら
用意するのが C++ のど基本だろうがよ。 違うか? てめーら
884
名前:
デフォルトの名無しさん
:03/11/27 20:56
>>883
そういう風に構ってあげると「漏れは賢いんだから何でも論破する」君が騒ぐから、
みんなわかってて傍観してるんだと思う。
885
名前:
デフォルトの名無しさん
:03/11/27 21:12
>>883
なにをいまさら?
886
名前:
デフォルトの名無しさん
:03/11/27 21:34
>>884
そういう煽りは他所でやれ。
887
名前:
デフォルトの名無しさん
:03/11/27 22:34
>>885
昨日の話だ
逃げたければ逃げろ
888
名前:
デフォルトの名無しさん
:03/11/27 22:42
ε--==≡≡┌(×o×)┘887
889
名前:
デフォルトの名無しさん
:03/11/27 22:49
885==888
そんなに悔しがらなくてもいいじゃん。
890
名前:
デフォルトの名無しさん
:03/11/27 22:54
このスレの連中、キモイ香具師おおすぎ
いつ初心者をぶったたこうか、うずうずしてるやつとかいるし。
891
名前:
デフォルトの名無しさん
:03/11/28 06:59
やね信者が現実的なラインで環境非依存な方法を示しているのに、
証明したことにはならないだの、Win3.1ではそれでは困るだの言い出す厨
ってキモい通り越して藁族かも。
この厨、多分、手元にWin3.1が起動するPCがないってのもお約束だったりw
コーディング時間よりも2ch閲覧時間のほうが長い人種。
ぶはははははははは。
892
名前:
デフォルトの名無しさん
:03/11/28 07:08
>>891
やね信者さんおはようございます。
環境非依存と実質非依存の大きな隔たりについて
よく勉強してみてください。
それでは失礼します。
かしこ
893
名前:
デフォルトの名無しさん
:03/11/28 07:19
お前らみんなやねスレへ行け。
そして二度と戻ってくるな。
894
名前:
デフォルトの名無しさん
:03/11/28 12:16
浦島太郎の天然ボケのせいでまた荒れてるのね
895
名前:
デフォルトの名無しさん
:03/11/28 19:12
>>浦島太郎の天然ボケ
ま、このスレにはWin3.1な住人がいるみたいだし。
896
名前:
デフォルトの名無しさん
:03/11/28 19:31
>>環境非依存と実質非依存の大きな隔たりについて
なんか、まだ粘着がいるな。
そもそも両者に大きな隔たりあるのだろうか?
じゃ、例えば、
(A)「C++は環境非依存である」
(B)「C++は実質環境非依存である」
のどっち?A宗?B宗?
俺はどっちも大差ないと思うし、議論の余地ないほど些細だと思う。
だとすれば、大きな隔たりなどないのでは?
897
名前:
デフォルトの名無しさん
:03/11/28 20:38
>>896
大きさは関係ない
== と != でしかない
898
名前:
デフォルトの名無しさん
:03/11/28 21:01
もう興奮しまくり
899
名前:
デフォルトの名無しさん
:03/11/28 21:02
>>896
そもそも、そういう問題じゃないと思うんだが。
>>813
>環境非依存な方法を教えてあげるよ
このへんはまぁ、ヨシとしよう。
>>813
>どんな環境でも適応できる
ポイントはここですな。
こんなこと言っておいて後から、16bit は知らんだの、
実質環境非依存なんだと言ったって恥ずかしいだけ。
900
名前:
デフォルトの名無しさん
:03/11/28 21:11
C++ってやって見ないと分からないことって結構あるね。
void func(int a = (MessageBox(NULL, "省略するな!", NULL, MB_OK), 0) ) {}
こんなこと出来るとはおもわなんだ。
901
名前:
デフォルトの名無しさん
:03/11/28 21:24
>>900
ttp://www.tietew.jp/cppll/archive/2711
902
名前:
デフォルトの名無しさん
:03/11/28 21:36
>>900
優先順位おぼえような
903
名前:
デフォルトの名無しさん
:03/11/28 21:41
>>902
よく見れ。
904
名前:
900
:03/11/28 21:48
既出でしたかやっぱり。
今まで定数しか駄目だと思い込んでもんで。
これ使えば引数だけでプログラム組めそうですなぁ。
カンマ演算子同様出来ないと思い込んでること多いねぇ。
905
名前:
901
:03/11/28 21:56
>>904
既出ってんじゃなく、単に類似したものを参考までにと。
906
名前:
900
:03/11/28 22:27
>>905
よく見たらちょっと違ってました。
関数の戻り値をデフォルト引数に指定できるとは!
ということがただ単に言いたかっただけでして。
907
名前:
デフォルトの名無しさん
:03/11/28 22:35
>>906
知ってる鴨しれへんけど、
あと、(一時?)オブジェクトや、
グローバル変数なんかもイケるよ。
908
名前:
900
:03/11/28 23:24
>>907
外部から関数の振る舞いを変えてしまう変なプログラムが組めますな。
知ると知るほどスゲー言語だなぁと思ってしまう。
自由度が高すぎるというかなんと言うか…
909
名前:
デフォルトの名無しさん
:03/11/28 23:31
>>908
無理やりその様を例えると「 C 言語が石製の鈍器だったのに対し、
C++ は金属製の鈍器だと思って使ってたら、実は銃器だった。」みたいな感じだよね。
910
名前:
デフォルトの名無しさん
:03/11/28 23:41
>>908
その自由度を生かすも殺すもプログラマ次第
911
名前:
デフォルトの名無しさん
:03/11/29 00:36
>>896
俺は 892 じゃないが、ほとんどの人は(A)でも(B)でもないと答えるだろうな。
(A)「C++は環境非依存である」
(B)「C++は実質環境非依存である」
(C++) 「C++は実質環境依存である」
912
名前:
900
:03/11/29 00:43
>>909-910
これはできないか、あれはできないかと試してばかりいて全然プログラムが前に・・・
逆に自由度という銃に狙われて逃げ惑っております。
templateにも参照であればグローバル変数渡せるみたいです
文字列定数素直に渡せればこんなまどろっこしいことしなくてすむんですけどねぇ
TCHAR *g_msg1 = _T("逝ってよし");
TCHAR *g_msg2 = _T("オマエモナー");
template<const TCHAR *& str = g_msg1>
struct msg
{
msg() { MessageBox(NULL, str, NULL, MB_OK); }
};
main()
{
msg<>(); // 逝ってよし
msg<g_msg2>(); // 逝ってよし
g_msg1 = _T("ウンコー");
msg<>(); // ウンコー
}
913
名前:
デフォルトの名無しさん
:03/11/29 00:49
>>909
> 「 C 言語が石製の鈍器だったのに対し、
> C++ は金属製の鈍器だと思って使ってたら、
> 実は銃器だった。」
ふむふむ。
けっこう的を射てる観察だと思う。
俺としては
「 C 言語は横暴な行動が許される発展途上文明の世界、
Java は全ての犯罪が法によって抑止される"理想的な"法治世界
(マイノリティ・リポートの世界)、
C++ は法規は整っているがそれを守るか否かは各人に委ねられている自由世界」
だと思う。
(長くて申し訳ない)
現実の世界では、時に法を犯すことが最善の解に成り得る。
914
名前:
デフォルトの名無しさん
:03/11/29 01:05
>>912
今まで手の届くような距離のものしか叩けなかったのに
飛び道具を手に入れたことで必要もないのに思わず
なんでも遠くにあるものを打って遊んでたり、
射撃に慣れてないことでなかなか的に当たらないといったところでしょうかね。
915
名前:
デフォルトの名無しさん
:03/11/29 02:07
今日の名言。
C++で自分の脚を撃ち抜くのは大変だがやれば大変なことになる。
なるほど、Cなら所詮ナイフを突き刺す程度だ。
916
名前:
デフォルトの名無しさん
:03/11/29 02:10
C++で自分の脚を撃ち抜くのは簡単だがやれば大変なことになる。
では?
917
名前:
デフォルトの名無しさん
:03/11/29 02:26
>>916
もっと簡単なのはクマと間違えて人を撃つことだが
918
名前:
デフォルトの名無しさん
:03/11/29 03:13
もっと難しいのは銀の弾を撃つことだが
919
名前:
デフォルトの名無しさん
:03/11/29 03:52
この弾丸は、大聖堂の銀の十字架を溶かして作ったものだ。
The bullet was made by melting the silver cross from the cathedral.
920
名前:
デフォルトの名無しさん
:03/11/29 04:23
銃を手にしたのに、実際に取れた獲物というか成果は少ないよね。
10年前に実際に市販されてるソフトと、今日のそれと、大差ないし。
921
名前:
920
:03/11/29 04:27
この歳になって気が付いたけど、やっぱプログラマにとって重要なのは
使用している言語とか環境ではなく、コーディングに対する
モチベーションというか、完成形に対するビジョンをどれだけ
明確に持っているか?だと思う。
c++でお洒落なコーディングを楽しむのも、まぁ、若気の至りで
俺も楽しんでたけど、結局、生産しないし、しても、しょーもない
もの生産してたり。
銃を手に入れて、いたずらに遠くにあるものを無駄に
撃ってるという前の発言を見て、ちょっとビクっときたね。
922
名前:
デフォルトの名無しさん
:03/11/29 04:30
銃を使いこなすにはそれなりの技量が必要なのです...。
923
名前:
デフォルトの名無しさん
:03/11/29 04:38
漏れは手に入れた銃に短剣を取り付けて狩りをしようと思う。
924
名前:
デフォルトの名無しさん
:03/11/29 04:41
10年前とは大違いだろ。10年前ってWindows3.1だよ?ちゃんとそれなりに進化してるよ。
925
名前:
デフォルトの名無しさん
:03/11/29 06:12
>>920
昔のソフトは自動認識のたぐいが全滅に近かったな。
C++的に見ると=0とdynamic_castか。
今でもGUIDがないから結局QueryInterfaceみたいなハメになって
Cでへこへこ等価コード書いてるのと大差なくなってる。
色んなブツが相乗りできるキャパをハードが持ち始めたとき
C++ではサポートしきれなかったわけか。
926
名前:
デフォルトの名無しさん
:03/11/29 15:22
>>10
年前とは大違いだろ。10年前ってWindows3.1だよ?
>>ちゃんとそれなりに進化してるよ。
じゃ、10年前のWordだとかExcel製品群を見てみろよ。
驚くほど、今と大差ない。
うざいイルカだとかイヌだとかが進化か?
927
名前:
デフォルトの名無しさん
:03/11/29 15:29
>>926
馬鹿馬鹿しい。
表計算ソフトや文書作成ソフトに、一体どのような進化を望んでんだ、お前は?
928
名前:
デフォルトの名無しさん
:03/11/29 15:33
つーか見た目が今と大差ないとか言ってそう。一般ユーザーと変わらんな。
929
名前:
デフォルトの名無しさん
:03/11/29 16:02
>>表計算ソフトや文書作成ソフトに、一体どのような進化を望んでんだ、お前は?
そうだな、WORDであれば、
リアルタイム自動スペルチェッカ、リアルタイム自動段落作成機能、
文書整形機能。カーソル位置にある単語を切り出して、文書内を
ハイライトで示してくれる機能などが「欲しかった」
あと、テンプレート文書機能だとかね。
異アプリ間の複合ドキュメントなんてのも欲しかった。
ワード中の絵をクリックしたら、その絵を編集するソフトが起動するだとか
表をクリックしたらエクセルが起動するなど。
あと、動的リンクか。エクセルで表を更新したら、その他のアプリで
参照されている表も全て自動更新されるだとか。
けど、これらの機能は全て、
Win3.1時代の一太郎やワードで既に実装されていた。
930
名前:
デフォルトの名無しさん
:03/11/29 16:10
>>929
> けど、これらの機能は全て、
> Win3.1時代の一太郎やワードで既に実装されていた。
つまり君的には、進化しなくてはならないのに進化できないのではなく、
望むものはもう全てあるから進化しないだけってことなんだね。
表計算ソフトや文書作成ソフトについては。
じゃあ何の問題もないし、ソフトウェア全般の何かを語る例にならないじゃん。
931
名前:
デフォルトの名無しさん
:03/11/29 16:36
>>929
お前相当馬鹿だな。
>この歳になって気が付いたけど
どの歳かわからんけど、一体今まで何してきたんだ?
932
名前:
デフォルトの名無しさん
:03/11/29 16:39
というか、DOS の時代から C++ は使われてたわけですが。
933
名前:
デフォルトの名無しさん
:03/11/29 16:50
>>932
DOSはVer7じゃねえだろなw
DOS用C++で古顔つーとMiwa, Zortechあたりか
あの頃、C++で開発されていたソフトって何だ?
934
名前:
デフォルトの名無しさん
:03/11/29 16:59
Turbo C++は比較的メジャーだったような。
Microsoft C/C++は7.0からだっけ?
935
名前:
デフォルトの名無しさん
:03/11/29 18:24
質問ですが、fmtflags って gcc3 だと ios_base::fmtflags で gcc2 だと ios::fmtflags 何ですか?
コンパイラーの version でコードを変更しなくてはいけないのでしょうか?
それとも何か回避策があるのでしょうか?
936
名前:
デフォルトの名無しさん
:03/11/29 18:41
VisualStudio.NET 2003を使い、C#の勉強をしてます。
一通りできるようになってきたので、今度はWindowsAPIの勉強を始めようと思ったんだけど・・・
とりあえず、ペゾルド本の最初に載っているプログラムを打ち込んで、
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance,
PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT("Hello, Windows98"), TEXT("HelloMsg"), 0);
return 0;
}
cl hello.cpp とやってみたんですが、
「window.obj : error LNK2019: 未解決の外部シンボル __imp__MessageBoxA@16 が
関数 _WinMain@16 で参照されました。
window.exe : fatal error LNK1120: 外部参照 1 が未解決です。」
と出てしまいます。
これって、何かコンパイルオプションをつける必要があるんでしょうか?
937
名前:
デフォルトの名無しさん
:03/11/29 18:49
#include "stdafx.h" ←入れたかな?
#include <windows.h>
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT("Hello, Windows98"), TEXT("HelloMsg"), 0);
return 0;
}
938
名前:
デフォルトの名無しさん
:03/11/29 18:51
いや#include "stdafx.h"はいらないね。
939
名前:
デフォルトの名無しさん
:03/11/29 19:31
>>936
#include <windows.h>
#pragma comment (lib, "user32")
int WINAPI WinMain (HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR szCmdLine, int iCmdShow)
{
MessageBox (NULL, TEXT("Hello, Windows98"), TEXT("HelloMsg"), 0);
return 0;
}
としてみたら?
940
名前:
デフォルトの名無しさん
:03/11/29 19:34
>>936
多分、環境の問題。
VC6 なら vcvar32.bat を実行しとけばいいんだけど、.Net 2003 は知らん。
941
名前:
デフォルトの名無しさん
:03/11/29 19:35
.NET 2003 は vcvars32 です。
942
名前:
デフォルトの名無しさん
:03/11/29 19:35
C++のプログラミングって無料で出来るソフトってあるの?
943
名前:
デフォルトの名無しさん
:03/11/29 19:36
>>942
>>8
の 最後
944
名前:
940
:03/11/29 19:38
あ、間違えた。
VC6 でも vcvars32.bat 。
945
名前:
デフォルトの名無しさん
:03/11/29 21:40
>>940
ごくふつーにインスコすればスタートメニューに
[Visual Studio .NET 2003 コマンド プロンプト]
ってアイテムができてるよ
946
名前:
デフォルトの名無しさん
:03/11/29 22:04
これがc++であるからこそ完成できた!っていう具体例を、
誰ひとり何ひとつ出せない・・・
でFA?
947
名前:
デフォルトの名無しさん
:03/11/29 22:12
>>946
は馬鹿。
でFA?
948
名前:
デフォルトの名無しさん
:03/11/29 22:15
946=947
おまえら二人とも(ジサクジエン?)、C++ならではの具体例を一つも
挙げられないから、馬鹿
でFA?
949
名前:
デフォルトの名無しさん
:03/11/29 22:17
>>947
OK。
950
名前:
デフォルトの名無しさん
:03/11/29 22:21
946〜949でスレのレヴェルが一気に萎えたな
951
名前:
デフォルトの名無しさん
:03/11/29 22:52
「レヴェルが萎える」
どこの方言だこれw
952
名前:
デフォルトの名無しさん
:03/11/29 23:10
>>951
英語という方言です
おっとマジレスは気体じゃなかったか?
じゃあ固体でこたいよう(プ
953
名前:
デフォルトの名無しさん
:03/11/29 23:12
>>952
w
954
名前:
デフォルトの名無しさん
:03/11/29 23:31
>>952
萎えるは英語じゃないよ。馬鹿だね。
955
名前:
デフォルトの名無しさん
:03/11/29 23:37
カナや漢字で表記してる限り日本語
956
名前:
デフォルトの名無しさん
:03/11/29 23:42
いいからC++の話しろよ池沼どもが
957
名前:
デフォルトの名無しさん
:03/11/29 23:57
>>954
ネタにマジレスしてるのカッコワルイ
958
名前:
954
:03/11/30 00:00
Human* poor = new Human(954,"バカ");
while( true )
{
int err =poor->GetMyStick()->Shake( VERY_FAST );
if( err ) break;
}
delete poor;
959
名前:
デフォルトの名無しさん
:03/11/30 01:08
>>957
マジレスしてるのはお前だけだと思うですわ
960
名前:
デフォルトの名無しさん
:03/11/30 01:32
以下のソースをVC++6.0でコンパイルするとエラーになって
BC++5.5でコンパイルすると正常にコンパイルできるんですけど
言語仕様としては、どちらが正しいのでしょうか?
961
名前:
デフォルトの名無しさん
:03/11/30 01:34
で、これがそのソース
#include <cstdio>
#include <cstring>
using namespace std ;
class Cparent
{
public :
classCchild
{
private :
structtag_child
{
char *name ;
int id ;
} ;
static struct tag_child ent ;
public :
char *getname(int i) { return ent.name ; }
int getid() { return ent.id ; }
} ;
Cchild child ;
} ;
Cparent::Cchild::tag_child Cparent::Cchild::ent={ "MANKO",100 } ;
int main( int ac , char **av )
{
Cparent p ;
printf("p.child.getname()=[%s]\n" , p.child.getname()) ;
printf("p.child.getid()=[%d]\n" , p.child.getid()) ;
return 0 ;
}
962
名前:
デフォルトの名無しさん
:03/11/30 01:43
>>960-961
そのソースがコンパイルできるコンパイラがあるとはとても思えんのだが。
あと、どーゆーエラーが出たかくらいは書いた方がいいぞ。
> char *getname(int i) { return ent.name ; }
char *getname() { return ent.name; } か?
963
名前:
デフォルトの名無しさん
:03/11/30 02:03
ごめんなさい
問題のある個所を絞り込む為に少し変更しました。
ご指摘の通り getname( int i ) は getname() に読み替えてください
964
名前:
デフォルトの名無しさん
:03/11/30 02:08
エラーは、こんなのがでてます。
nest.cpp(29) : error C2248: 'tag_child' : private struct
(クラス 'Cparent::Cchild' で宣言されている)にアクセスできません。
nest.cpp(11) : 'tag_child' の宣言を確認してください。
965
名前:
デフォルトの名無しさん
:03/11/30 03:47
いまベクトルをあらわす構造体を
struct tag_vect
{
int m_x;
int m_y;
};
とします。これに定数を掛けれるように演算子をオーバーロードしました
const struct tag_vect & operator * (int i)
{
m_x *= i;
m_y *= i;
return *this;
}
これだと
struct tag_vect v1, v2;
v1 = v2 * 10;
などとしたときにv2は10倍されてしまいます。
どうすればよいでしょうか??
966
名前:
デフォルトの名無しさん
:03/11/30 03:54
return tag_struct(m_x * i, m_y * i);
かな。
自分自身に掛けるんじゃなくて、新しいインスタンスを作って返す。
967
名前:
デフォルトの名無しさん
:03/11/30 03:55
>>965
const tag_vect operator *(const tag_vect &val,int scale){
tag_vect tv;
tv.m_x=val.x*scale;
tv.m_y=val.y*scale;
return tv;
}
968
名前:
デフォルトの名無しさん
:03/11/30 04:06
>>966-967
ありがとうございました。m(__)m
969
名前:
デフォルトの名無しさん
:03/11/30 04:13
と思ったらだめでした。
>>966
新しいインスタンスを返すとローカルアドレスをリターンしているという警告がでますm(__)m
(warning C4172: ローカル変数またはテンポラリのアドレスを返します。)
>>967
引数が多いといわれてしまいました。m(__)m
(error C2804: binary 'operator *' に引数が多すぎます。)
970
名前:
デフォルトの名無しさん
:03/11/30 04:16
>>969
コンパイラはなんなんだ?
971
名前:
デフォルトの名無しさん
:03/11/30 04:18
VC++6.0です。
972
名前:
デフォルトの名無しさん
:03/11/30 04:20
>>967
を変更して
const tag_vect operator *(int scale){
tag_vect tv;
tv.m_x=this->x*scale;
tv.m_y=this->y*scale;
return tv;
}
とすると?
973
名前:
デフォルトの名無しさん
:03/11/30 04:22
>>972
warning C4172: ローカル変数またはテンポラリのアドレスを返します。
となってしまいました。
974
名前:
デフォルトの名無しさん
:03/11/30 04:30
ちなみに全ソースは
typedef struct tag_vect
{
tag_vect()
{
m_x = 0;
m_y = 0;
};
tag_vect(int x, int y)
{
m_x = x;
m_y = y;
};
struct tag_vect & operator * (int i)
{
struct tag_vect v;
v.m_x = this->m_x * i;
v.m_y = this->m_y * i;
return v;
};
int m_x;
int m_y;
}VECTOR;
でMytestDlg.hファイルに記述してます。
975
名前:
デフォルトの名無しさん
:03/11/30 04:35
struct tag_vect & operator * (int i)
だから & はずしてよ・・・
976
名前:
デフォルトの名無しさん
:03/11/30 04:38
あ。。失礼しました。
&をとったらうまくいきました。ありがとうございます。
でもなんでかわからない。奥が深いですね
977
名前:
デフォルトの名無しさん
:03/11/30 04:41
>>976
参照の勉強をしてね・・・
978
名前:
デフォルトの名無しさん
:03/11/30 07:35
次スレ
http://pc2.2ch.net/test/read.cgi/tech/1065535118/
979
名前:
デフォルトの名無しさん
:03/11/30 08:38
Hashのインデックスを算出するのに、テーブルサイズ10万個に
対して500個くらいのインデックス(アドレス?)に収束してしまうことって
よくあるんでしょうか?ほとんどのハッシュキーがかち合って
しまっていて、ほかのスペースはほとんど無駄になっている
状態です。
980
名前:
デフォルトの名無しさん
:03/11/30 08:46
>>979
質の悪いハッシュ関数を使えばそうなる。
プログラミング言語C++第3版に載っていた方法はなかなか質が良かったな。90%以上は使ってくれた。
981
名前:
デフォルトの名無しさん
:03/11/30 08:52
ちなみにサンプル数はテーブルサイズの十倍
982
名前:
デフォルトの名無しさん
:03/11/30 09:11
>>980
90%とは・・・。500/100kだと0.5% _| ̄|○
サンプル数とは試したハッシュキーの数ですか?
自分の場合16バイトの文字列からかち合わない
組み合わせを探そうとしたんですが、組み合わせの
総数が28桁以上もある中から探そうというのがそもそも
アフォなんでせうか・・・
983
名前:
デフォルトの名無しさん
:03/11/30 09:31
>>983
なんかハッシュについて勘違いしてる気がする。。。
「どんな入力達に対しても絶対バラける」ハッシュ関数なんてのは、
よほど入力パターンが少なくない限り不可能だ。16バイトの文字列なら
3.4*10^38通りも入力パターンがあるわけだから絶対無理だ。
「想定される一般的な入力」がバラけりゃそれでいい。例えば
int hash(char* p) {
int h=0;
for(int i=0;i<=12;++i) h^= *(int*)(p+i)<<i;
return h % 100000;
}
みたいな何も考えてない方式でも、大抵の場合0.5%なんてことにはならんはずだが。
入力される可能性のある文字列を全部並べ上げられるなら、
http://burtleburtle.net/bob/hash/perfect.html
Perfect Hashing なんてものある。
984
名前:
デフォルトの名無しさん
:03/11/30 09:45
>>982
> サンプル数とは試したハッシュキーの数ですか?
そう。パス付きzip書庫のパスワードを解析するのに使う辞書を使った。
985
名前:
デフォルトの名無しさん
:03/11/30 10:02
>>983
古いJavaの腐ったハッシュ実装の例がプログラミング作法にあったな。
あれなら0.5%も夢じゃない。
986
名前:
982
:03/11/30 10:07
>>983
>「どんな入力達に対しても絶対バラける」ハッシュ関数なんてのは、
いえいえ、今回の場合は目的が逆なだけなんです。普通は文字列
からインデックスを探しますが、今回はインデックスに対応する文字列を
探そうとしたんです。もちろんかち合いがありますから文字列を総当たりで
試していって、それぞれのインデックスに最初に対応する文字列を
見つけていこうと。
合い言葉みたいな物を想定してやってるので寧ろかち合いを
期待しています。
>>984
あ、それいいですね。参考にさせてもらいます。φ(..)メモメモ
987
名前:
982
:03/11/30 10:13
ただ今更ながら気がついたのですが
ハッシュ関数内で、BCDを使ってまともに30桁近くを
計算してたんで、これをお手本通りにdoubleなんかにして
もういちど試してみます
(昔作ったBCDクラスを使ってみたかったってのもありまつ(汁)
988
名前:
v(^・^)v
:03/11/30 12:58
C++相談室 part26
http://pc2.2ch.net/test/read.cgi/tech/1070164402/l50
989
名前:
GETクラスメンバ
:03/11/30 13:30
typeinfoクラスで、実行時にclassの名前を取り出せますが、
同じように、実行時にメンバの一覧を取得することはできないものでしょうか?
990
名前:
GETクラスメンバ
:03/11/30 13:41
おっと、スレ閉じてましたね。
しかも、テンプレートスレに行った方がよさそうかな。
991
名前:
デフォルトの名無しさん
:03/11/30 14:28
レスキュー991
992
名前:
デフォルトの名無しさん
:03/11/30 14:32
日本の119番はレスキュー991を逆にしたものでありゅ
993
名前:
デフォルトの名無しさん
:03/11/30 14:32
レスキュー993
994
名前:
デフォルトの名無しさん
:03/11/30 14:33
994へぇ
995
名前:
デフォルトの名無しさん
:03/11/30 14:35
1000 名前:デフォルトの名無しさん[sage] 投稿日:03/11/30 14:45
1000
996
名前:
デフォルトの名無しさん
:03/11/30 14:37
記念カキコ v(^-^*)
997
名前:
デフォルトの名無しさん
:03/11/30 14:43
1000げとじゃん?
998
名前:
デフォルトの名無しさん
:03/11/30 14:44
for(int C=1; C<=1000; C++)
printf("%dゲット!!\n",C);
999
名前:
デフォルトの名無しさん
:03/11/30 14:45
for(int C=1; C<=1000; C++)
std::cout<<C<<"Get!!"<<std::endl;
1000
名前:
デフォルトの名無しさん
:03/11/30 14:46
1000
■過去ログ置き場に戻る■
1-
前250
次250
最新50
DAT2HTML
0.33f Converted.