■過去ログ置き場に戻る■ 1- 前250 次250 最新50


[memo] "9999999999_00.html#R20" という感じで、URLの最後に "#RレスNo" を追加すると幸せになれます。

C++相談室2
751 名前:デフォルトの名無しさん :01/10/13 16:58
>>749
コンストラクタで(あるいは最初に使う時)
未初期化だったら初期化するようなことをするよ、おれ。

752 名前:デフォルトの名無しさん :01/10/13 17:05
最近の仕様だと、static objectのコンストラクタ呼出しを使えばいいのではないかな。
ANSIだとmainの前に呼ばれるけど、VC++だとWinMainの前かな。
VC++で実装されているかどうか知らないけど。

g++は駄目。よって>>751してる。

753 名前:デフォルトの名無しさん :01/10/14 14:07
gdbでstd::stringの内容を確認するイイ方法ない?

754 名前:デフォルトの名無しさん :01/10/14 14:52
string()って関数があるってこと?
それとも
文字列データのこと?

755 名前:sage :01/10/14 14:54
void print_string(std::string &s)

を作っておいて、gdbから呼べばいいんでないの??

756 名前:デフォルトの名無しさん :01/10/14 15:29
関数呼び出すとgdb落ちてしまうこと多くないですか?

757 名前:デフォルトの名無しさん :01/10/14 16:32
>>753
DDD使え

758 名前:753 :01/10/14 20:08
え!DDDだとstringサポートあるんですか。
でも emacs から使いたいなあ。

759 名前:デフォルトの名無しさん :01/10/14 20:21
>>758
そういう訳じゃないが、リンクが簡単に辿れるのだ
http://www.gnu.org/software/ddd/all.jpg
ここのウインドウの上側をみると分かるかな?

760 名前:デフォルトの名無しさん :01/10/15 01:12
>>753はどうして>>754には無言なの? 何をやりたいか書かないと、

(gdb) print 変数名

で的を得た答なのかどうか分からない…

761 名前:デフォルトの名無しさん :01/10/15 01:18
>>758
GVDでもstring objectの中、見やすい。
emacsからは使えんがね。デバグにemacs使いたい心境がわか
らんなぁ。素のgdbよりは格段にマシなのはわかるけど。

762 名前:デフォルトの名無しさん :01/10/15 01:24
>>760
754はC++知らない...とまでは言わないが的外れ。無視されても
しょうがないとおもうけど?

763 名前:デフォルトの名無しさん :01/10/15 01:37
>>760
的は得るものではなくて、射るものですね。

ってのはともかく print 変数名だと std::string オブジェクトの内部構造もろもろが
表示されて邪魔、単純に文字列だけ取得したいって話じゃないの?

764 名前:デフォルトの名無しさん :01/10/15 01:38
>760
参照
http://www.biwa.ne.jp/~take-c/nihongo/thema%201/mata.html

765 名前:デフォルトの名無しさん :01/10/15 01:39
HDDフォーマットしてWindows入れてVisualC++でデバッグ

766 名前:デフォルトの名無しさん :01/10/15 01:50
>>763
じゃぁ p obj.c_str() か p obj.data() か p obj.dat
他実装によりけり。

GVDはemacs support (gvd.el) あるみたいだねスマソ。
どうサポートしてくれんのかはしらんけど…。

767 名前:デフォルトの名無しさん :01/10/15 03:29
>>766
> じゃぁ p obj.c_str() か p obj.data() か p obj.dat
> 他実装によりけり。

ptype objでclassの定義見れる。

768 名前:デフォルトの名無しさん :01/10/15 04:30
なぜ代入系演算子は継承されない言語仕様なのでしょうか。
分かる気もするけれど、整然とは理解できません。

どなたかご教授ください。

769 名前:デフォルトの名無しさん :01/10/15 04:50
継承されてもあまり嬉しくないから。

770 名前:デフォルトの名無しさん :01/10/15 05:55
スライシングになっちゃうでしょ。

771 名前:753 :01/10/15 10:15
>>760
ごめん。std::stringっていたら文字列です。

772 名前:デフォルトの名無しさん :01/10/15 13:04
>>771
> ごめん。std::stringっていたら文字列です。

俺は>>754じゃないから謝る必要ないけど、>>760でいいのかどうか、また書いてない…
>>763の想像にもお答えしてない。何もんなんだ、あんた。

773 名前:デフォルトの名無しさん :01/10/15 18:30
趣味プログラマです。ちょっと質問させてください。
GoF本の真似して、今までメンバ変数の頭を _dwMemberなどのように
_をつけて記述していました。しかし仕事でC++使ている友人に、それは
止めた方が良いと忠告されました。もちろん理由は教えてくれません(w

やはり何かまずいのでしょうか?

774 名前:デフォルトの名無しさん :01/10/15 18:44
>>教えてくれません(w
あたりがネタっぽいが・・・

C/C++ではアンダースコア(_)で始まる名前は予約語とされている。
だから使わないほうがいい

775 名前:753 :01/10/15 18:52
gdbでstringを表示させた事がある人なら何が問題か説明しなくてもわかると
思ったんだけどそうではなかったみたいですね。
余計な詮索させてしまって申し訳ない。
問題は色々あるけどstringの内部表現がNUL終端文字列ではないのが
一番大きいです。print コマンドの結果から読み取るのは困難です。
c_str()を呼ぶのはいい方法ですね。気が付きませんでした。
でも状態を変えてしまうので常に使える方法とはいえません。
GVDはよさそうですね。試してみます。皆さんありがとう。

776 名前:773 :01/10/15 19:05
>>774
やぁ、ネタと紛らわしくてすいません。友人もよく分かってなかったんですよ。
なるほど予約語だったのですねぇ。ったくGoF本め、なんだってあんな…。
ハァ〜これから今まで書いた全部のコード置換します。レスありがとうございました。

777 名前:セックスショパン :01/10/15 19:55
くーれないーにそーまあたーーーーーーーーーこーのおーーれーをーーーーーーーーーー

778 名前:デフォルトの名無しさん :01/10/15 20:01
まともな人が去っていくよ>777

779 名前:デフォルトの名無しさん :01/10/15 20:48
置換する必要はないと思うけどな。
先頭のアンダースコアは現状では安全だと思う。
(問題出た人いる?)
アンダースコア2つで始めると危険だけど。

780 名前:773 :01/10/15 20:59
>>779
レスどもです。ありゃそうなんですか?今どんなマクロなら確実に変換できるか
悩んでたところだったり。いちいちコンパイルして確認するの辛いなぁとか。
間違いなく良いソースでは無いのでしょうけど、そういうことなら今までのは放置しようかな。

781 名前:デフォルトの名無しさん :01/10/15 21:20
先頭がアンダースコアの名前を使うプログラマがあまりに多いので
システム予約シンボルはアンダースコア2つで始めるという仕様になりました。
...なわけないけどまあそんな感じかな。
俺はアンダースコアで始まるメンバ変数をいろんな環境でかなりの間
使ってるけど今まで問題にあったことはない。
Qt(GUIライブラリ)でもそういう命名規則やってるよ。
そもそもアンダースコア使わなきゃ絶対OKってわけでもないしね。
たとえばSolarisならsunが定義済みだったり。
ま、問題が出たシンボル名だけ変更すればいいんでない?

782 名前:デフォルトの名無しさん :01/10/15 21:24
>>779
たとえば FreeBSD のスタートアップルーチンだと _progname に実行ファイルの
名前が入るようになってるから、自分のプログラムで _progname なんてシンボル
を定義するとリンク時にはまると思われ。

>>780
問題ないなら、とりあえず放っておけば? ただ _ で始まるシンボルを使うことに
はリスクがある(メリットはあまりない)から、今後は避けるということで。

783 名前:デフォルトの名無しさん :01/10/15 22:15
俺は
「_で始まる語はCの予約語」
「__で始まる語はC++の予約語」
と教わったが・・・。

784 名前:デフォルトの名無しさん :01/10/15 22:22
>>775
なんだぁ、ついこの前オイラがぶちあたった
問題じゃないか。俺はそれを乗り越えて進化できたYO

785 名前:デフォルトの名無しさん :01/10/15 22:23
MS的には識別子にはGUIDを織り交ぜる、か?

古く形骸化してるが、_で始まる名前はさけるのがよいでしょ。
>>783で言ってるのが本来のお約束。

786 名前:sa :01/10/15 22:23
てす、てす。

787 名前:773 :01/10/15 22:33
みなさんありがとうございます。勉強になりました。知人に自慢しよっと。
お勧めに従い、今までのは問題が出ない限り放っておき、大丈夫そうですが今後は
一応_を避けていきたいと思います。これからはm_か〜、慣れるまで時間かかりそう。

788 名前:デフォルトの名無しさん :01/10/16 20:08
>>783
それはない

789 名前:デフォルトの名無しさん :01/10/16 20:27
_で始まるのは処理系実装で使用される予約語、
__で始まるのはC++処理系で生成される予約語
って説をみたが。どうよ?
プログラミング言語C++第3版には_から始まるのは
予約語だぐらいしか書いてないが。

790 名前:デフォルトの名無しさん :01/10/16 21:15
C++極めていますとうそぶいてしまってC++の仕事がやってきました。
2週間の学習猶予をもらえたので
そのうちに出来るだけ身につけたいと思っています。
実際は『憂鬱な…』と『プログラミング言語C++第3版』
『CプログラマのためのC++入門』しか読んでいません。
Effective C++、More Effective C++は定評があるようなので
頑張って読めるだけ読もうと思います。
他に何かやっておいたほうが良いことはありますか?
どれをクラスにすれば良い、とかそう言う話は憂鬱な…だけで
身につけられるのでしょうか?

アドヴァイスください、助けてください。

791 名前:デフォルトの名無しさん :01/10/16 21:18
とりあえずコード書け。

792 名前:デフォルトの名無しさん :01/10/16 21:19
>>790
exceptional C++ モナー。

っていうかさ、既存の(その仕事で使う)クラスライブラリの学習はしなくて平気なのか?

793 名前:デフォルトの名無しさん :01/10/16 21:19
なんか一個作れ

794 名前:790 :01/10/16 21:23
既存のものではなく新規の作成です。
C言語馬鹿なのでとりあえず継承とかやってみようと思います。

どれをクラスにすれば良いかなんてのはどうやって学ぶのですか?

795 名前:デフォルトの名無しさん :01/10/16 21:27
>>794
ふつうはOO関係の本を見て学びます

コンパイラの付録で付いてくるライブラリをみて、
どのレベルでクラスを作ればよいか調べてもいいと思うが...
二週間じゃその時間もないな

796 名前:792 :01/10/16 21:28
>>794
いや俺が言ってるのはMFCとかQtとかXercesとかそういうモノの学習は?
ってことよ?

どれを〜 は憂鬱でいいんじゃないの?あとある程度書けたら(納期的に
あともどりできるうちに)、デザインパターン読むと、劇的にコード改良
できたりするよ。さいしょのうちは。

797 名前:794 :01/10/16 21:31
デザインパターンってこれですか?

オブジェクト指向における再利用のためのデザインパターン 改訂版
ガンマ,エリック ヘルム,リチャード ジョンソン,ラルフ ブリシディース,ジョン
ソフトバンクパブリッシング (1999)ISBN:4797311126

798 名前:デフォルトの名無しさん :01/10/16 21:32
デザパタは、慣れてからの方がいいかもね。

799 名前:792 :01/10/16 21:34
>>797
それ。

800 名前:794 :01/10/16 21:39
C++はCでいうK&Rスタイルのように
権威のある(一般的な)コーディングスタイルは存在しないのですか?
ネットで調べたところ、
メンバ関数にはm_をつけてClass名の始めは大文字 というのが多いみたいですが。

801 名前:792 :01/10/16 21:45
ない。
おれはJava風に書く。m_ などつけない。

#MS系はともかく、UNIXでいろいろなライブラリ使ってるとスタイルの不統一
#の酷さでめまいがするよ。

802 名前:デフォルトの名無しさん :01/10/16 22:01
>>801
クソな記法でも、信者を量産したもの勝ちだっていうのか?
おれはそんなの認めない。認めないんだ!

803 名前:794 :01/10/16 22:03
Java style っていうのは
http://geosoft.no/style.html
ですね?

もし違うにしても、ここに書いてあるものが見やすいような気がする。

804 名前:792 :01/10/16 22:05
>>802
どゆこと?
まさかハンガリアンマンセーとかいうんじゃないだろうな?

805 名前:デフォルトの名無しさん :01/10/16 22:10
コーディングスタイルといえば、
なんでCって変数名 短くするの?
C++風に読める形にしたほうがいいのに。

806 名前:デフォルトの名無しさん :01/10/16 22:13
C言語は変数、関数名に文字数制限ある(きっと)からじゃない?
C++はないはず。

807 名前:デフォルトの名無しさん :01/10/16 22:29
おれ、メンバ変数はint value_;とか後ろに_つけてるけど
これって変?
で、クラス名は大文字始まり、publicメソッドは大文字
始まり、protectedとprivateのメソッドは小文字始まり
の名前つけてます。
あと、STLとかもよっぽどで無い時以外はstd::つけてる。

808 名前:デフォルトの名無しさん :01/10/16 22:34
>>807
それはオブジェクト指向的日常あたりの影響かい?

809 名前:デフォルトの名無しさん :01/10/16 22:45
>>808
スマソ、それ知らない。
題名から察すると雑誌の連載かなんか?
後ろアンダーバーはC++FAQの影響。他は特になし。

810 名前:デフォルトの名無しさん :01/10/16 23:32
プログラミング作法ってC++載ってたよね。
そのスタイルに従うのがいいんじゃ。

811 名前:セックスショパン :01/10/17 00:29
僕は
変数は
int MyInt;
こんなかんじです。
そして
関数は
void MyFunc();
こんなかんじです。
そしてクラスは
class MyClass{
}
こんなかんじです。
そして定数は
const int MyConstInt=1;
こんなかんじです。

812 名前:セックスショパン :01/10/17 02:53
名スレの予感

813 名前:デフォルトの名無しさん :01/10/17 03:09
コーディングスタイルうんぬん言うのは本末転倒。
プログラミング言語がなんのために存在しているのか
分かっていない。そういうのを好みで速攻置換するために存在する。
とPerlマンにうそぶかれて鬱。

814 名前:デフォルトの名無しさん :01/10/17 15:57
はじめからC++やったひとは
やっぱプログラムの細かいところはあんまり詳しくないのかな。  
リスト構造とかスタックとかも作る必要ないし。

815 名前:デフォルトの名無しさん :01/10/17 19:16
憂鬱なプログラマのためのオブジェクト指向...についているCDに
収録されているソースコードがコンパイル出来ないのですが
何か他にソースが必要なのでしょうか。
最後の魔方陣の奴です。
環境はでびあん、コンパイラはG++つかいました。

816 名前:デフォルトの名無しさん :01/10/17 19:30
>>815
g++ならたぶん答えられるからエラー貼ってみ?

817 名前:815 :01/10/17 19:55
g++ *.cpp
/tmp/ccEH60BU.o: In function `Nummgr::delnum(int)':
/tmp/ccEH60BU.o(.text+0x0): multiple definition of `Nummgr::delnum(int)'
/tmp/ccLVnn4N.o(.text+0x18): first defined here
/tmp/ccEH60BU.o: In function `Nummgr::getmax(void)':
/tmp/ccEH60BU.o(.text+0x34): multiple definition of `Nummgr::getmax(void)'
/tmp/ccLVnn4N.o(.text+0x4c): first defined here
/tmp/ccKhIvO0.o: In function `Hline::setnextline(Hline *)':
/tmp/ccKhIvO0.o(.text+0x0): multiple definition of `Hline::setnextline(Hline *)'
/tmp/ccLVnn4N.o(.text+0x0): first defined here
/tmp/ccKhIvO0.o: In function `Nummgr::delnum(int)':
/tmp/ccKhIvO0.o(.text+0x18): multiple definition of `Nummgr::delnum(int)'
/tmp/ccLVnn4N.o(.text+0x18): first defined here
/tmp/ccKhIvO0.o: In function `Nummgr::getmax(void)':
/tmp/ccKhIvO0.o(.text+0x4c): multiple definition of `Nummgr::getmax(void)'
/tmp/ccLVnn4N.o(.text+0x4c): first defined here
/tmp/ccPqUxZt.o: In function `Nummgr::delnum(int)':
/tmp/ccPqUxZt.o(.text+0x0): multiple definition of `Nummgr::delnum(int)'
/tmp/ccLVnn4N.o(.text+0x18): first defined here
/tmp/ccPqUxZt.o: In function `Nummgr::getmax(void)':
/tmp/ccPqUxZt.o(.text+0x34): multiple definition of `Nummgr::getmax(void)'
/tmp/ccLVnn4N.o(.text+0x4c): first defined here
/tmp/ccXW5oU3.o: In function `Hline::setnextline(Hline *)':
/tmp/ccXW5oU3.o(.text+0x0): multiple definition of `Hline::setnextline(Hline *)'
/tmp/ccLVnn4N.o(.text+0x0): first defined here
/tmp/ccXW5oU3.o: In function `Nummgr::delnum(int)':
/tmp/ccXW5oU3.o(.text+0x18): multiple definition of `Nummgr::delnum(int)'
/tmp/ccLVnn4N.o(.text+0x18): first defined here
/tmp/ccXW5oU3.o: In function `Nummgr::getmax(void)':
/tmp/ccXW5oU3.o(.text+0x4c): multiple definition of `Nummgr::getmax(void)'
/tmp/ccLVnn4N.o(.text+0x4c): first defined here
/tmp/ccleMZxq.o: In function `Hline::setnextline(Hline *)':
/tmp/ccleMZxq.o(.text+0x0): multiple definition of `Hline::setnextline(Hline *)'
/tmp/ccLVnn4N.o(.text+0x0): first defined here
/tmp/ccleMZxq.o: In function `Nummgr::delnum(int)':
/tmp/ccleMZxq.o(.text+0x18): multiple definition of `Nummgr::delnum(int)'
/tmp/ccLVnn4N.o(.text+0x18): first defined here
/tmp/ccleMZxq.o: In function `Nummgr::getmax(void)':
/tmp/ccleMZxq.o(.text+0x4c): multiple definition of `Nummgr::getmax(void)'
/tmp/ccLVnn4N.o(.text+0x4c): first defined here
/tmp/ccIA7dYg.o: In function `Nummgr::delnum(int)':
/tmp/ccIA7dYg.o(.text+0x0): multiple definition of `Nummgr::delnum(int)'
/tmp/ccLVnn4N.o(.text+0x18): first defined here
/tmp/ccIA7dYg.o: In function `Nummgr::getmax(void)':
/tmp/ccIA7dYg.o(.text+0x34): multiple definition of `Nummgr::getmax(void)'
/tmp/ccLVnn4N.o(.text+0x4c): first defined here
collect2: ld returned 1 exit status

818 名前:816 :01/10/17 20:09
憂鬱 はもっていないのでソースはみられないのだが、

>>817
.cpp から .cpp を #include してないかい?

819 名前:815 :01/10/17 20:23
cppはインクルードされていません。
コード変換していないのがまずいのでしょうか。
CDに入っていたソースはウインドウズに合わせていて EUCにはなっていなかったのですが。
nkfで一気に変換する方法を知らないのでそのままコンパイルしたのですが。

820 名前:816 :01/10/17 20:52
どこぞからソース貰ってきた。

> コード変換していないのがまずいのでしょうか。
コンパイルは通ってるからいまは問題ないです。

Nummgr.h と Hline.h で setnextline(),
getmax(), delnum() の実装が書かれていると
思うけど、 inline がついていないでしょ。
書けば通るよ。バグです。

821 名前:815 :01/10/17 21:04
820様、
有難うございます。
付属のCDにもバグと言うものはあるのですね。
これもまた、課題の一つだったのかも知れませんが。

822 名前:SS :01/10/17 21:58
inline はC++版マクロと判断していいですか?

823 名前:デフォルトの名無しさん :01/10/17 22:00
既に、C++版マクロはSTLと認定されておる。

824 名前:SS :01/10/17 22:20
>823
なんで?スタンダードテンプレートライブラリが?

825 名前:sage :01/10/17 22:27
>憂鬱な〜
この本てどこがいいの?斜め読みした感じいまいちというか全然
わからんのだけど。
普通の今時の入門書籍がJavaでやる類のことをC++でやったというだけか?

826 名前:デフォルトの名無しさん :01/10/17 22:31
それだけまともなC++のOO本がないってこと。
OOよりもEffectiveC++のような落とし穴を解説した本の方が必須だしな。

827 名前:デフォルトの名無しさん :01/10/17 22:35
 「憂鬱な」は読んでいて新しい感覚を受けましたけど
最後に載ってるソースコードは読みにくかったです。特殊な書き方ですね。

あの本読んでも最後の演習がよくわからなかったのですが
これは私のおつむが弱いからですか?
あれが一番簡単なOO本なんですよね?
プログラミング言語C++にしてもEffectiveC++にしても
あぁいうスタンスではないだろうから他に頼るものが…。

828 名前:816 :01/10/17 22:39
借りて読んだことがありますが、あの本は別にJava書きだろうが
Eiffel書きだろうが読む意味あるとおもいますがねえ。

>>825
具体的な書名は?

829 名前::01/10/17 22:40
JAVA信者のいうことなんか気にするなよ

830 名前:デフォルトの名無しさん :01/10/17 22:41
Javaが叩かれているのはど〜してなんでしょうね?ついていけない人?

831 名前::01/10/17 22:44
javaでついていけないなんてことは有り得ない。

832 名前:デフォルトの名無しさん :01/10/17 22:46
>>827
> あの本読んでも最後の演習がよくわからなかったのですが
> これは私のおつむが弱いからですか?
自分の分析力を信じろ。君のクラス設計が世界で一番正しい。

833 名前:825 :01/10/17 22:48
いまどき
C++ == OO
は無い。高レベルではgenericsやMSのCOM、低レベルでは組み込み
にOOを使う方法とか、C++のおいしい部分に関心無しにOOが欲しい
だけならC++で学習する意義は薄いと思うぞ。今はJavaやC#があるん
だからそっちで勉強した方がいいんじゃないの?
C++を中途半端に学習して消化不良になると時間の無駄だと思うが。

>>827
>プログラミング言語C++にしてもEffectiveC++にしても
>あぁいうスタンスではない

どのへんが? 後者はともかく前者は読んでないってこと?

834 名前:デフォルトの名無しさん :01/10/17 22:48
>>831
君のHNあほの「あ」か

835 名前::01/10/17 22:50
追加
java ごとき でついていけないなんてことはあってはならない。

836 名前:デフォルトの名無しさん :01/10/17 22:51
>>835
がんばってね

837 名前:827 :01/10/17 22:51
>> 833
いや、一応読みましたが全て通して読んではいません。
前半部分の機能説明の部分を辞書を引くようにして読んだ程度です。
そう言えば最後のほうに設計関係のことが欠いてあったような…
申し訳ない。

838 名前::01/10/17 22:53
追追加
java 程度 でついていけなくなるのは 絶対に おかしい。

839 名前:デフォルトの名無しさん :01/10/17 22:57
>>838
マジな話し、自分の使いやすい言語作れ。

840 名前:816 :01/10/17 22:57
>>833
(激しく)同意。

が、Java入門書と銘打ったもので良いOO入門書あるなら教えてくれよ。
感銘を受けるほどのOO入門書って少ないと思うので。
>>837
プログラミング言語C++を設計入門として読むなら、先にピアソンの
「オブジェクト指向言語のはなし」を購入しておくことを勧めるw

841 名前:827 :01/10/17 23:02
憂鬱→プログラミング言語C++
→Effective→More Effective
→デザインパターン→…

ですか?

842 名前:816 :01/10/17 23:05
>>841
Moreは読まなくてもいいんじゃない?

843 名前:デフォルトの名無しさん :01/10/17 23:08
参考書よむ奴は努力を認めるが、3流

844 名前::01/10/17 23:13
証明)
参考書は努力して読むものじゃない。参考にするものだ。
∴努力して読む奴=3流。
(証明終

845 名前:デフォルトの名無しさん :01/10/17 23:20
>>843
手段は問わず。結果を出せれば良し。

参考書読まないのは構わんが、それでダサい設計をしたり余計なバグを
埋めたら銃殺。

846 名前::01/10/17 23:22
ダサい設計というのは実に主観的であり、一概には決められないので845は却下。

847 名前:デフォルトの名無しさん :01/10/17 23:25
お前が一番ダサイということで終了な。

848 名前::01/10/17 23:26
主観的なので847は銃殺のうえ却下。

849 名前:デフォルトの名無しさん :01/10/17 23:35
そろそろ「あ」は放置プレイで行きましょう。

850 名前::01/10/17 23:39
その前に根拠のある理由を述べてください。

851 名前:816 :01/10/17 23:54
さぁ…
このスレ印刷して病院で聞いてみたら? >>850

きみがだれにも負けない一流の何かをもっているならそれは
おめでたいことだが、たとえその点で勝っていても、こんな
ところで意図不明(意味不明とは言っていない)の発言を繰
り返すような人間が健全と言えるか?ジジイになったときに
楽しい人生だったと思えるようにするために、やっておくべ
きことがもっと他に沢山あるんじゃないのか?

852 名前:816 :01/10/17 23:54
なんちゃって。

853 名前::01/10/17 23:58
>851
ネタにマジレスさんくす!あー釣れた釣れたおもしろかった。今度牛丼おごるよ。

854 名前:816 :01/10/18 00:01
そうか、傷つけたお詫びに俺がおごるよ。特盛な。
まぁコピペだから気にすんな。

855 名前:デフォルトの名無しさん :01/10/18 00:02
あほーん

856 名前:827 :01/10/18 00:04
となると一流の人は実践で学ぶと言うことですね。
なるほど。当たり前と言えば当たり前のような気が。
私はどうも参考書だのみになってしまうので
永久に三流です。
今度なんか簡単なのを設計してみようと思います。

857 名前::01/10/18 00:09
>856
そんなことはありません。世の中に”絶対”は無いのですから。

858 名前:デフォルトの名無しさん :01/10/18 00:46
あが一流だということは絶対にありえない。

859 名前:デフォルトの名無しさん :01/10/18 02:54
new, delete のオーバーロードと同様にして
自動変数の確保される領域を自前で管理する方法はないでしょうか?
色々調べているのですが方法が見つかりません。どうかご教示ください。

860 名前::01/10/18 02:56
>>859
なんでそんなことがしたいのかおしえて〜

861 名前:体育会系PG :01/10/18 02:58
>>856
参考書なんか読むな!
いきなりソースをにらむのだ!
読書百篇意自ずから通ず!

862 名前:859 :01/10/18 03:03
>>860
new, delete のオーバーロードだと
うっかり delete を書き忘れた時にリークしてしまうので
スコープの最後で必ずデストラクタが呼ばれる
自動変数の形でこれらが記述できると便利かと思ったんです。
方法、あるでしょうか?

863 名前::01/10/18 03:06
え、意味がわかんない。
かならずデストラクタが呼ばれるのだから、リークしない
(しないように書ける)じゃん。

864 名前:859 :01/10/18 03:12
>>863
いえ、基本的には全部ヒープを自分で管理したいんです。
ただ、そのために new, delete のオーバーロードを使っていると
うっかり delete を書き忘れたときに困るので
見かけは自動変数で中身は自前ヒープ上に、という形にしたいんです。
なぜ自前でヒープ管理したいかと言えば
指定されたメモリ空間内だけで処理が行なわれるようにしたいからです。
ちょっと特殊なソフトを書いてまして・・・
仕事が絡んでるので申し訳ありませんが詳細は公開できません・・・

865 名前::01/10/18 03:18
なるほど。
俺なら自動変数としてオブジェクト作成(Aとする)して、そいつに
newしたオブジェクト(Bとする)の参照渡して、Aがスコープはずれる
タイミングでBをdeleteするが、それでは駄目??

そんなことは結構やるなぁ。

866 名前::01/10/18 03:20
>>865
>AがスコープはずれるタイミングでBをdeleteするが
自明だと思いますが、Aのデストラクタで、の意。

867 名前:859 :01/10/18 03:22
>>865
それでもいいんですが
自動変数のデフォルトのメモリ制御を
オーバーロードあたり一発で済ませられれば
それが一番スマートかと思いまして。
placement new に似た自動変数の初期化構文があるだけでも
かなりすっきりとするんですが・・・。

868 名前:デフォルトの名無しさん :01/10/18 03:24
>>867
グローバルにクラスをひとつ置いて、
コンストラクタとデストラクタで処理するのは?

869 名前:デフォルトの名無しさん :01/10/18 03:24
std::auto_ptr ‥‥

870 名前:859 :01/10/18 03:29
>>868
すいません。意味がよく分かりません・・・。

>>869
それ以外にないんでしょうか?

871 名前:デフォルトの名無しさん :01/10/18 03:33
Boehm GC..

872 名前:859 :01/10/18 04:02
結局次のような処理で妥協することにしました。

void bar( void){
  simple_gc gc ;
  Foo* foo1 = new( gc) Foo ;
  Foo* foo2 = new( gc) Foo ;
  /* 処理 */
  // ここで gc がデストラクトされて foo1, foo2 もクリアされる。
}

873 名前:デフォルトの名無しさん :01/10/18 09:53
本質的じゃない質問で恐縮です。

いまどきのC++だと、
#include <stdio.h> → #include <cstdio>
ですが、↓これはどういう名前に換えれば良いのでしょう?

#include <sys/socket.h> →?

874 名前:デフォルトの名無しさん :01/10/18 10:19
これはUNIX CのヘッダであってC++標準とは無関係>#include <sys/socket.h>
なので、どうしてもいまどきのスタイルに死体なら自分で<sys/socket.h>を
インクルードする"csocket"という名前のファイルでも作って標準includeパス
にぶちこんどけ。
そうすれば#include <csocket>で行ける。激しく無意味だが。

875 名前:デフォルトの名無しさん :01/10/18 10:31
>>872
それって、自動変数に代入されるヒープ領域の管理であって、>>859
 自動変数の確保される領域を自前で管理する方法
なの?
本人納得なら別にどーでもいいことなんだけど。

876 名前:デフォルトの名無しさん :01/10/18 10:35
>>874
イヤ過ぎる...

877 名前:デフォルトの名無しさん :01/10/18 12:38
>>873
extern "C" {
#include <sys/socket.h>
}
ちゃいますの? Stroustrup本の9.2.4見てねん。

# せんで大丈夫なのは、たまたまそういうlinkageの実装の時だけ。linkage的には本質。

878 名前:デフォルトの名無しさん :01/10/18 13:21
>>877
せんで大丈夫なのは、ヘッダファイル中に extern "C" が書かれている
からでしょう。ほとんどの場合。

879 名前:デフォルトの名無しさん :01/10/18 14:32
Franz Lisp-386をWindowsに、移植中です。
Compilerは、Borland C++を検討しましたが
諸問題を抱えるのでcygwinを導入してcomlileしようと
思うのですがcygwin窓の$はプロンプトですか?
gccは単なるCコンパイラーですか?

880 名前:デフォルトの名無しさん :01/10/18 14:42
>思うのですがcygwin窓の$はプロンプトですか?
そうです。

>gccは単なるCコンパイラーですか?
そうです。

881 名前:デフォルトの名無しさん :01/10/18 15:08
>>879
>諸問題を抱えるので
それはあなたです。

882 名前:デフォルトの名無しさん :01/10/18 15:13
>>879
> 諸問題を抱えるのでcygwinを導入してcomlileしようと

MinGWもいいよん。
http://www.ab.wakwak.com/~tino/windows/

883 名前:デフォルトの名無しさん :01/10/18 16:17
痛い >>877

884 名前:デフォルトの名無しさん :01/10/18 20:11
C++を最短距離でみにつけたいのですが
どうすれば良いですか?
とりあえずプログラミング言語C++第3番のクラスのところからよみはじめましたが。

885 名前:デフォルトの名無しさん :01/10/18 20:14
頭から読め

886 名前:デフォルトの名無しさん :01/10/18 22:27
身に付けたいなら ひたすらコードを読んで変更して、その後書く事だな。

887 名前:デフォルトの名無しさん :01/10/19 06:46
>>886
C++ だと、あるていどオブジェクト指向を分かってないと、既存のコードを読んでも (?_?)
となるかもしれず。

888 名前:884 :01/10/19 11:36
コード読んで書くことですね。
プログラミング言語c++は全部読んでる余裕がないので
クラスのところから読み始めたんですが。
最初の方はたんなる紹介のような感じがしたので。

889 名前:デフォルトの名無しさん :01/10/19 11:48
>>888
今までにオブジェクト指向言語の経験があるなら、
必要なところをかいつまんで読めばいいけど、
経験無しなら、プログラミング言語C++だけじゃ
つらいかも。

890 名前:884 :01/10/19 11:58
憂鬱なプログラマのための・・・っていうのが
読みましたけど足りませんか?
プログラミング言語C++、K&Rのようなものを期待していたのですが
わかりにくいです。来週からC++の仕事が始まるというのに

891 名前:デフォルトの名無しさん :01/10/19 15:41
プログラミング言語C++の設計のところは抽象的過ぎるきらいがある

892 名前:デフォルトの名無しさん :01/10/19 16:08
本読みながらC++勉強中の厨房です。
C++が部品化とか再利用が利点とありますが、意味が良くわかりません。

例えば、あるクラスを自前で書いて、それにclass.h class.cpp
という名前で持ってたとして、ある日、別の似たような仕事で
そのクラスから派生させたクラスを作ればうまくいきそうだと
したとき、差分を書いたnewclass.hでclass.hをincludeして、
class.cppとnewclass.cppをリンクすれば再利用、C++って
ウマーってことになるんでしょうか(ハァ...なんか自分で書いてて鬱)

下らない質問でごめんなさい

893 名前::01/10/19 16:28
>892
そのとおりです!

オブジェクト指向∋>>1の文

です!

894 名前:デフォルトの名無しさん :01/10/19 19:49
>>892
部品化についてはEssentialCOMという本(のはじめの方)が簡単で良いです。

895 名前:デフォルトの名無しさん :01/10/20 12:27
text.txtから1行読むにはどうすればいいですかー!ウッウッ

896 名前:デフォルトの名無しさん :01/10/20 12:31
>>895
気合いを入れる

897 名前:895 :01/10/20 12:38
やっぱり改行コードを調べるのですか?あうち!

898 名前:デフォルトの名無しさん :01/10/20 12:41
>>897 いや、まあ、1行読む方法は幾らでもあるんで
  コメントのしようがない。  Cの方法もそのまま使えるし

899 名前:デフォルトの名無しさん :01/10/20 13:27
>>895
何も考えずにダブルクリックしてみろ!
一行と言わず何十行もまとめて読める。

900 名前:デフォルトの名無しさん :01/10/20 13:41
いまどきの初心者ならSTL使ってみろ!
string line_buf;
ifstream file("text.txt");
getline(file, line_buf);

こんなクソコード書いていいのは初心者のうちだけだぞ!

901 名前:デフォルトの名無しさん :01/10/21 00:17
VCで次のコードがとおらないのですが
何故ですか?
stringが定義されていないと出ます。


#include <string>

int main()
{
string str;

return 0;
}

902 名前:デフォルトの名無しさん :01/10/21 00:18
std::string str;

903 名前::01/10/21 00:21
>901
namespace std{
#include<string>
int main()
{
string str;

return 0;
}
}

904 名前:デフォルトの名無しさん :01/10/21 00:23
または、
using namespace std;

何のことかわからないなら「名前空間」を調べてみよう。

905 名前::01/10/21 00:28
>1
安全にネームスペースを使うにはこうする。
プロの開発現場ではよく使われる手法。

#include<string>
namespace std{
string str;
}
int main() {
std::str="1";
return 0;


}

906 名前:デフォルトの名無しさん :01/10/21 00:30
stdって標準でusing namespaceされてるんじゃありませんでしたっけ?
違いますか?
プログラミング言語C++にもそう書いてありますが。

907 名前::01/10/21 00:31
>906
大嘘。なんていう本ですか。

908 名前:901 :01/10/21 00:33
printfは名前区間を指定しなくても動くのは何故ですか?

909 名前::01/10/21 00:36
printfはC++の予約語だからです。

910 名前:デフォルトの名無しさん :01/10/21 00:40
>>909
嘘だよ。

#include <iostream.h> とか #include <stdio.h>

と、

#include <iostream> とか #include <string>

などの違いを調べてみるのも吉かと。

911 名前::01/10/21 00:45
C++の標準ではヘッダ名に後ろにhがつきません。
.hはC言語時代の名残です。

912 名前:デフォルトの名無しさん :01/10/21 00:48
なんか、散々偉そうだったけど、底が見えちゃった感じだねえ。
誰とは言わないが。

913 名前::01/10/21 00:49
>912
ワラタ
激しく同意

914 名前:デフォルトの名無しさん :01/10/21 00:54
>>913
909にワラタ。おれも。

915 名前:デフォルトの名無しさん :01/10/21 01:10
Danaのgrep最強なんたげと
拡張子ないと開かないんだよね・・

916 名前:デフォルトの名無しさん :01/10/21 01:12
string型に
int 型2つをセットするにはどのようにすれば良いのですか?
stringの使い方のページが見当たらなくて。

917 名前:デフォルトの名無しさん :01/10/21 01:13
ワケワカラン

918 名前::01/10/21 01:17
>916
string a,b,c;
char buf[10];
int d,e;

itoa(d,buf,10);
b=buf.
itoa(e,buf,10);
c=buf.

a=b+","+c;

多分違うと思うけど

919 名前:デフォルトの名無しさん :01/10/21 01:18
string str;
int a = 1;
int b = 2;
// これをStringにセット

cout<<string.c_str();

-out put-
1 2

920 名前:デフォルトの名無しさん :01/10/21 08:32
C++でマルチスレッドってどうやりますか?

921 名前:デフォルトの名無しさん :01/10/21 11:15
>>920
環境依存。

922 名前:デフォルトの名無しさん :01/10/21 13:41
pthreadライブラリを探せ

923 名前:920 :01/10/21 15:21
C++のマルチスレッドが環境依存とは正直驚いた。
標準じゃないのね。Javaだって標準なのに。

924 名前:デフォルトの名無しさん :01/10/21 15:29
>>923
Java以外に標準でスレッドインタフェースを持ってるものを考えてみ。

925 名前:デフォルトの名無しさん :01/10/21 15:29
>>923
Cも標準じゃないよ。POSIX環境ならCもpthreadも両方定義しているけど。
ISOやJISになっているくらいメジャーな言語でマルチタスク/スレッドが標準なのって、
Adaくらいじゃないの?

> Javaだって標準なのに。

「だって」って、Javaはmulti-plathomeでの道具の豊富さは他の追従を許さないよ。
// performanceとか、他に問題はかかえているけど。

926 名前:デフォルトの名無しさん :01/10/21 15:43
2次配列を使わなくてはいけないレベルに達しました。

ここで、
char buf[2][64];
などとしたはいいんですが、
関数の宣言部でこれを引数で使いたいとき、
int functionA(...... ,buf[2][64]);
とやっていいものでしょうか?こんなの見たことありません。
int functionA(...... ,buf[][]);
ですか?それとも、
int funcitonA(...... ,**buf);
でしょうか、わかりません。お助けください。

927 名前:デフォルトの名無しさん :01/10/21 15:48
>>923
マルチスレッドをサポートしないJavaプラットフォームも実在しますが、何か?

928 名前:デフォルトの名無しさん :01/10/21 15:52
int functionA(..., buf[][64])

929 名前:sage :01/10/21 15:55
>>927
そうなのか。
以下はそれがホントだとして書いてみる。

javaはどうせ廃れると思って見てなかったけど、駄目さ加減を知るために
いっちょやってみるか。

CやC++でマルチスレッドがサポートが標準で言語仕様にないのは、
これらの言語がアセンブラの延長として考案、拡張されてきたからだろうね。

アセンブラのニモニックレベルでマルチスレッド(というか同期処理)を処理する
CPUが20年以上前に作られていたら、Cの言語仕様にも組み込まれて
いただろうに..

930 名前:デフォルトの名無しさん :01/10/21 16:05
>>926
926の一番上のものでOK。
928ももちろん正解。

931 名前:デフォルトの名無しさん :01/10/21 16:07
>>925
>Javaはmulti-plathomeでの道具の豊富さは他の追従を許さないよ。

あれは既得権益というのです。

932 名前:デフォルトの名無しさん :01/10/21 16:09
>>926
コンパイラによっては一次元配列以外バグコード出すのもあり。

933 名前:デフォルトの名無しさん :01/10/21 16:16
うーん、基本的に2次元でもなんでも配列は
単なる文字列ということで知識を深めていますから、
**bufで行こうかとも思いますが、それでもバグコード
が出るのだったら厄介ですーーーナ

さんくす>>932

934 名前:デフォルトの名無しさん :01/10/21 16:39
やっぱ、宣言をchar **bufにした場合、
関数に渡す前にmallocやらをしないと怒られるかな・・・

935 名前:デフォルトの名無しさん :01/10/21 17:17
いろいろ見て回ったんですが、
char **argvの場合
argvとargcはたいてい組みでつかいますか?
argc使わなくてもごり押しでいけますか?
7割くらいわかってるつもりなんですけど。。

936 名前:デフォルトの名無しさん :01/10/21 17:21
使わなくてもいいし、ごり押しでもいいよ。

でもその前に getopt を覚えろ。
そしてそれ以前にスレ違いであることを反省しろ。

937 名前:デフォルトの名無しさん :01/10/21 17:23
わかりました。これからは多分スレは選ぼうと思います。
ありがとうございます。>>936

938 名前:sage :01/10/21 23:56
stl の vector (じゃなくてもいいけど)をつかった動的な配列で質問。

・要素内容:可変長buffer(malloc したbufferみたいな)
・要素数:可変
の配列って、どうつくるのですか?

vec[i] = new buf(size);
みたいにやれば、vec の消滅とともに思いっきり
メモリリークしそうだし。
auto_ptr するのも面倒だし。
第一、vector の要素に auto_ptr の pointer 入れた場合って、
auto_ptr のデコンストラクタがちゃんと呼び出されることが
「保証」されてるのですか?


みたいなのって、

939 名前:sage :01/10/21 23:57
最後の一行、ゴミです。無視してください。スマソ。

940 名前:sage :01/10/21 23:59
typedef vector<sage> variable_length_buffer;
std::vector<variable_length_buffer> hoge;

貴様にauto_ptrはまだ早い。
ついでにsageはコテハンじゃ。

941 名前:デフォルトの名無しさん :01/10/22 00:08
1.可変長バッファを管理するclassを作る。
2.それをvectorに格納。

可変長バッファの用途が文字列ならstd::string。

942 名前:デフォルトの名無しさん :01/10/22 00:28
>>938
std::vector< std::string > 可変長バッファの可変長配列
std::stringは文字列じゃなくても利用できるっす(\0が途中にあっても関係ない)。

>第一、vector の要素に auto_ptr の pointer 入れた場合って、
>auto_ptr のデコンストラクタがちゃんと呼び出されることが
>「保証」されてるのですか?
保障されるっす。デバッガで追いかけるとわかる。
でも以下のコードはメモリ漏れるので注意。
{
 std::auto_ptr<char> p = new char[100];
}
auto_ptrのデストラクタはdelete[]ではなくdeleteなので。

943 名前:デフォルトの名無しさん :01/10/22 01:12
なんと!
string 型でいいのか。すげぇ!これなら俺でもわかります。

> std::vector<variable_length_buffer> hoge;

hoge[0] = "variable_length_data";
・・・・・・
hoge[0] = "change_to_more_and_more_long_lenght_data";

みたいにできるのかな?
やってみよう・・・。

944 名前:943 :01/10/22 01:20
あ、オオボケなレスしちゃった。
943 で聞きたかったのは、
940 さんみたいにやったばあい、そのやりかただと、
variable_length_buffer[] の要素が、charの配列みたいに、
メモリ上に連続で並んでいることが保証されてないとヤバくない?
ってことです。
もちろん、vector は普通は単なる配列として実装されてるので、
実際問題としては動くとは思いますが。

945 名前:デフォルトの名無しさん :01/10/22 09:40
plathomeっていう単語は造語ですか?
platformと思っていたのですが、コンピュータ関係ではplathomeでOKですか?
いや、マジで聞いてます。

946 名前:デフォルトの名無しさん :01/10/22 10:08
>>945
私も数年前までは何気に「ぷらっとほーむ」と発音してましたが
plathome という英単語は存在しない模様
「がいしゅつ」と同類かと

google で検索してみると,ヒットするのは殆ど日本語サイトでした・・・
ってのはぷらっとホーム株式会社(plathome.co.jp)がヒットしたからなんだけど,
そうでなくても間違って憶えている人は多いみたいっすね

ちなみに「ぷらっとホーム」は Plat'Home と表記して欲しいみたいです

947 名前:946 :01/10/22 10:16
・・じゃなくて,945 はわりとスレ違いな気がしてきたけどいいや

・・じゃなくて,私も質問っす
BCB や VC++ では「プロパティ」てな概念が存在します
変数に代入したり変数を参照するような文を書くだけで
特定の関数を呼び出せるようなやし
具体的には BCB なら __property キーワード,VC++ なら
__declspec(property()) っすよね

他の C++ コンパイラではどうなんでしょうか?
テンプレートとクラスである程度似たようなことはできるけど,
さすがに限界もあるわけだし

あと,プロパティは C++ 的にどれくらい嫌われてますか(わらぃ

948 名前:3文字回答 :01/10/22 12:39
>>946
COM

949 名前:946 :01/10/22 14:17
>>948
3文字レスどうもです
そうっすね、BCB や VC++ なんかは COM のおかげで
「プロパティ」の概念の必要性が出てきたわけで

ということは、標準的にはどのコンパイラも __property みたいな
機能を備えている保証はないし、
特にこれから搭載される予定もなさそうだ〜、ということで
オッケーっすか

# ていうかずっと __property に甘えたコード書いてました(ゎらぇなぃ

950 名前:948 :01/10/22 14:53
じゃあ2文字回答で。
「C#」
Delphiつーのは無しな。

951 名前:デフォルトの名無しさん :01/10/22 16:35
>>943
std::vectorは operator[] を持ってます。持ってないと[]での
アクセスはできないので。

まぁ、libstdc++では、仰る通り
reference operator[](size_type __n) { return *(begin() + __n); }
const_reference operator[](size_type __n) const { return *(begin() + __n); }
となってますけんど。

952 名前:デフォルトの名無しさん :01/10/22 20:21
つうと、やっぱ、
memcpy( &vec[0], pBufSrc, vec[0].size() );
みたいなのは、
実際には動くだろうけど、
厳密にはSTLのインプリメントに依存すると
考えてOKですか?

953 名前:デフォルトの名無しさん :01/10/22 20:26
あ、訂正。
vec[0].resize(pBufSrc.len);
memcpy( &vec[0], pBufSrc.dat, vec[0].size() );
みたいなの。
ようは、vec[0] に入っているはずの可変長バッファに
STLでも何でもない普通のバイナリデータを転送する、とか。
Cだと、malloc したバッファへのポインタを要素とする配列を用意して、、
とかやんなきゃいけない場合を、STLできれいに書きたいのです。

954 名前:データ抽象マンセー :01/10/22 21:04
>>953
#include <algorithm>
string& buffer = vec[0].resize(pBufSrc.len);
std::copy((char*)(pBufSrc.dat), (char*)(pBufSrc.dat) + pBufSrc.len, buffer.begin());
こんなん? Cからの移行組は一旦実装はスカッと忘れなさい。でなきゃ悟れない

955 名前:デフォルトの名無しさん :01/10/22 23:56
enum型って 普通の演算子使えないのでしょうか。

m += n; // 両方ともEnum型

この演算子に適切な方への変換定義を行いません
というエラーが出るのですが

956 名前:デフォルトの名無しさん :01/10/23 00:27
enumって初期化時以外左辺値にはできないような。

957 名前:デフォルトの名無しさん :01/10/23 01:23
>>956
そりゃenumのメンバ自身のことやん。

>>955がエラーになる理由は、
「enumはintに自動変換されるが、intからenumには暗黙に変換されない」ということでしょう。

たとえば enum foo {A,B,C} m, n; という変数m,nがあるとして、
m = m + n; はコンパイル通らない。右辺が最終的にint型だから。しかし
m = (foo)(m + n); なら通る。これは実際には
m = (foo)((int)m + (int)n); と同じこと(それが望んだ結果かどうかは別)。

958 名前:デフォルトの名無しさん :01/10/23 02:04
>>954
STLはコンテナばっかり使ってるわ。
真っ当にもう一度勉強して悟ろう。

959 名前:デフォルトの名無しさん :01/10/23 02:19
このスレに集う皆様へ。
そろそろ次スレを立てたいのですが、1に書くべき文面はいかがいたしましょう。
また2〜3あたりに貼り付ける、おすすめリンク等ございましたら、ご教示ください。

960 名前:デフォルトの名無しさん :01/10/23 04:53
>>959
こんな感じでどうですか。

【スレタイトル】
C++相談室 Part3

【1の本文】
OS/環境に依存しないC++の話題。STLも可、むしろ歓迎。
前スレ http://piza2.2ch.net/test/read.cgi/tech/996640937/
C++参考リンクは>>2を参照のこと。

961 名前:デフォルトの名無しさん :01/10/23 05:39
>>959
こんな感じでどうですか。

【スレタイトル】
C++相談室 Part3

【1の本文】
OS/環境に依存するC++の話題。STLも可、むしろ必須。
前スレ http://piza2.2ch.net/test/read.cgi/tech/996640937/
C++参考リンクは>>2を参照のこと。

962 名前:デフォルトの名無しさん :01/10/23 14:21
>>959
STL関係

SGI STL
http://www.sgi.com/tech/stl/
STLport
http://www.stlport.org/
STL日本語解説ページ
http://www.wakhok.ac.jp/~sumi/stl/

963 名前:962 :01/10/23 14:34
ついでに

割と詳しい入門ページ
http://www.d1.dion.ne.jp/~ecb/cpp/cpp00.html

964 名前:デフォルトの名無しさん :01/10/23 17:56
FILEとfstream。あなたならどっち?

965 名前:分かりません。 :01/10/23 19:02
参照を戻り値にする場合は
一体なにが戻ってきているのですか?
例えば
strtype& operator+(strtype& ob);
のような関数の場合、戻ってくるのは
一時オブジェクトではなく、何なのですか?

966 名前:965 :01/10/23 19:08
このプログラムはなぜかメモリがおかしくなるみたいです。
突然ですいませんが、どうやら根本的なところが分かってないみたいです。

#include<iostream>
#include<cstring>
#include<cstdlib>
using namespace std;

class strtype{
char* p;
int len;
public:
strtype(){*p='\0';len=0;}
strtype(char* s){
len=strlen(s)+1;
p=new char[len];
if(!p){
cout<<"メモリが確保できません"<<endl;
exit(1);
}
strcpy(p,s);
}
~strtype(){
cout<<"メモリ解放:"<<(unsigned)p<<endl;
delete [] p;
}
char* get(){return p;}
// strtype(const strtype &ob);
strtype& operator+(strtype& ob);
}:
strtype& strtype::operator+(strtype& ob)
{
int l;
l=len+ob.len+1;
strtype temp;
temp.len=l;
temp.p=new char [l];
strcpy(temp.p,p);
cout<<temp.p<<endl;
strcat(temp.p,ob.p);
cout<<temp.p<<endl;
cout<<(unsigned)temp.p<<endl;

return temp;
}
int main()
{
strtype ob1("Hello!"),ob2("Good-bye");
cout<<"ob1:"<<ob1.get()<<' '<<"ob2:"<<ob2.get()<<endl;
cout<<"ob1とob2を連結すると--->"<<(ob1+ob2).get()<<endl;
     return 0;
}

967 名前:デフォルトの名無しさん :01/10/23 19:15
まず
strtype(){*p='\0';len=0;}

968 名前:965 :01/10/23 19:16
>>967
ありがとうございます。
どの変がおかしいのでしょうか?

969 名前:デフォルトの名無しさん :01/10/23 19:25
>>959
C++ Final Draft International Standard
http://www.kuzbass.ru/docs/isocpp/

970 名前:965 :01/10/23 19:27
参照を返すというのはどういうことなのかな?

971 名前:デフォルトの名無しさん :01/10/23 19:30
新スレ
http://piza2.2ch.net/test/read.cgi/tech/1003832761/

972 名前:デフォルトの名無しさん :01/10/23 19:36
>968 領域を確保してない。

973 名前:965 :01/10/23 19:38
>>972
ありがとうございます。
あの部分は変更したのですが、
まだうまくいかないみたいです。
ちなみに
strtype(){;}
↑こうしました。

あのプログラムは
return tempのところに問題があるみたいなんですが。

974 名前:デフォルトの名無しさん :01/10/23 19:44
>954 さん

いまやってるのは、
あるAPIの戻り値である不定長の要素をふんだんに持つ構造体、
ってのがあって、

struct out_t {
unsigned int type;
unsigned int len1;
unsigned char dat1[len1]; // ほんとはこんな書き方はNG
unsigndd int len2;
unsigned char dat2[len2:
};
result_t call_api(key1_t key1, key2_t key2, out_t& out);
for_each(key1, key2) { // ほんとはこんな書き方はない。
result = call_api(key1, key2, out[next++]);
}

それをkey1, key2 の組み合わせ毎にメモリに格納する。
key1 は、ファイルから読み込む。
key2 は、あるルールで範囲を決定してループで作ればよし。
・・っていうやつなんですけど、
もうすでにCで完成してます。すごく汚いコードですけど。(笑い)。
しかし。突然の仕様変更で、
key1 の方は、あるルールでソートしてメモリに格納する。
さらに、out_t もふくめ、全体を、シリアライズしてセーブ。
(二回目以降の読み込みの高速化のため。emacs の dump と同じ)
・・・とかになったもので、
いっきにC++とSTLで書き直したれ!とかなったんですが。

std::map< key1_t, std::vector< std::vector<out_t> > > gOutlist;

とかやってもダメっす。
(正確には、コンパイルは通るけど、使い方がわからん)

975 名前:デフォルトの名無しさん :01/10/23 19:49
ろーかるなオブジェクトを返してmp、抜けた時点ではじゃ胃されるや炉。
Effective C++の29校も読むと世濾紙

976 名前:デフォルトの名無しさん :01/10/23 19:54
新スレに移行せよ。諸君

977 名前:965 :01/10/23 20:24
一応解決しました。
関数内で定義した変数は参照で戻せないみたいです。
コピーコンストラクタをつくって、一時オブジェクトで
もどしたらできました。
それからやはり最初のstrtype(){*p='\0';len=0;} がまずかった
みたいです。
ありがとうございます。

978 名前:デフォルトの名無しさん :01/10/23 20:33
これで心置きなく新スレに以降

979 名前:974 :01/10/24 00:13
新スレのまえに、オイラにお助けを。

980 名前:キリ番ゲッター :01/10/26 18:54
1000間近スレッド発見

981 名前:キリ番ゲッター :01/10/26 18:55
1000狙うからな
邪魔するなよ>ALL

982 名前:キリ番ゲッター :01/10/26 18:55
俺様が1000とったら
ウラビデオさしあげます

983 名前:キリ番ゲッター :01/10/26 18:56
ウラビデオ
配布場所
http://www.megabbs.com/cgi-bin/readres.cgi?bo=douga&vi=991411619&rm=100

984 名前:キリ番ゲッター :01/10/26 18:56
邪魔したら
もらえなくなるんで

注意!!!!

985 名前:キリ番ゲッター :01/10/26 18:57
1000ほしい
お願い

くださいな

986 名前:キリ番ゲッター :01/10/26 18:57
邪魔するんじゃ ねーーーーーーーーーーーーぞ


baka

987 名前:キリ番ゲッター :01/10/26 18:58
つーか

プログラマー=きちがい

988 名前:キリ番ゲッター :01/10/26 18:59
大リーグって いつからやるん??????


hehehe

989 名前:キリ番ゲッター :01/10/26 18:59
くそ−−−−−−1000の道が 遠すぎる

お前らも 手伝え

990 名前:キリ番ゲッター :01/10/26 19:00
邪魔をとるか

おまんちょ丸見えビデオをとるか   よーーーーーく考えろ

991 名前:キリ番ゲッター :01/10/26 19:00



0GET  だよーん

992 名前:キリ番ゲッター :01/10/26 19:01
タリバンなかなか つぶれない


しぶといなあああああ

993 名前:デフォルトの名無しさん :01/10/26 19:01
>>キリ番ゲッター

サム

994 名前:キリ番ゲッター :01/10/26 19:01
おおおお
お前のような

邪魔者は

去れ

995 名前:キリ番ゲッター :01/10/26 19:02
くそ!!!!!!!!!
なんで
邪魔するんだーーーーーーーーーーーーー 氏ね>>993

996 名前:キリ番ゲッター :01/10/26 19:03
いいか、1000GETの
邪魔するんじゃ

ねーーーーーーーーーぞ!!!

997 名前:キリ番ゲッター :01/10/26 19:03
FUCK YOU!!!!!!!!


氏ね〜〜〜〜〜〜〜〜〜!!!!!!>ALL

998 名前:キリ番ゲッター :01/10/26 19:03
もうすぐだ!!!!!  ぜったい1000取るよ

999 名前:デフォルトの名無しさん :01/10/26 19:04
>>キリ番ゲッター

オソ

1000 名前:キリ番ゲッター :01/10/26 19:04
1000 is very good


ははははっはははははh


■過去ログ置き場に戻る■ 1- 前250 次250 最新50
DAT2HTML 0.33f Converted.