■過去ログ置き場に戻る■ 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.