2ちゃんねる ★スマホ版★ ■掲示板に戻る■ 全部 1- 最新50  

■ このスレッドは過去ログ倉庫に格納されています

C++相談室 part18

1 :v(^・^)v:03/04/13 05:02
C++に関する質問はこちらへどうぞ。
ただし質問の前にFAQに一通り目を通してください。
また、テンプレートライブラリ(STL含む)に関する質問は
専用の別スレへどうぞ。

過去スレ、関連スレ、関連リンクなどはこちら>>2-15

2 :v(^・^)v:03/04/13 05:02
■基本■
[Stroustrup]
禿 http://www.research.att.com/~bs/
C++に関するリンクの総本山でもあります。

[C++ Final Draft International Standard]
http://www.kuzbass.ru/docs/isocpp/
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf

[JTC1/SC22/WG21 - C++]
http://std.dkuug.dk/jtc1/sc22/wg21/
規格書の重箱の隅的な話題などが読めます。

[C/C++ Users Journal]
http://www.cuj.com/
[Object Management Group]
http://www.omg.org/
[Association of C & C++ Users]
http://www.accu.org/

[news]
news:comp.lang.c++
news:comp.lang.c++.moderated

[ML]
cppll(日本語) http://www.trickpalace.net/cppll/
メインページにC++に関する良質なC++日本語リンク集があります。

3 :v(^・^)v:03/04/13 05:03
■Document■

C++FAQ Lite http://www.parashift.com/c++-faq-lite/
C++FAQ(日本語) http://www.bohyoh.com/CandCPP/FAQ/
Cとその仕様を比較しながらの解説なので分かりやすい。
*** 質問の前に必ずこの二つに目を通してください ***

[STL]
http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
Standard Template Library プログラミング on the Web
リファレンス的内容。http://www.wakhok.ac.jp/~sumi/stl/
STL Programmer's Guide http://www.sgi.com/tech/stl/
[boost]
これに関しては公式のドキュメント、又はソースを読むのが一番です。
ただし日本語でいくつか有益な情報が読めます。
Let's boost http://www.kmonos.net/alang/boost/
shinichiroさん http://user.ecc.u-tokyo.ac.jp/~g940455/wp/
news news:gmare.comp.lib.boost.devel

4 :v(^・^)v:03/04/13 05:03
■Books■
amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/

The C++ Programming Language
http://www.amazon.com/exec/obidos/ASIN/0201700735/
http://www.amazon.co.jp/exec/obidos/ASIN/475611895X/(翻訳)
C++ Primer (3rd Edition)
http://www.amazon.com/exec/obidos/ASIN/0201824701/
http://www.amazon.co.jp/exec/obidos/ASIN/4756140068/(翻訳)
The C++ Standard Library
http://www.amazon.com/exec/obidos/ASIN/0201379260/
http://www.amazon.co.jp/exec/obidos/ASIN/4756137156/(翻訳)
Effective C++
http://www.amazon.com/exec/obidos/ASIN/0201924889/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118089/(翻訳)
More Effective C++
http://www.amazon.com/exec/obidos/ASIN/020163371X/
http://www.amazon.co.jp/exec/obidos/ASIN/4756118534/(翻訳)
Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/0201615622/
http://www.amazon.co.jp/exec/obidos/ASIN/4894712709/(翻訳)
More Exceptional C++
http://www.amazon.com/exec/obidos/ASIN/020170434X/
Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/(翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/(翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/

5 :v(^・^)v:03/04/13 05:04
■Compiler■
[GCC]
http://gcc.gnu.org/
(Windows上でのPOSIX環境構築 http://www.cygwin.com)
[Borland C++ Compiler]
http://www.borland.co.jp/cppbuilder/freecompiler/
[.NET Framework SDK]
1.0 http://www.microsoft.com/japan/msdn/netframework/downloads/sdk.asp
1.1βhttp://msdn.microsoft.com/downloads/default.asp?url=/downloads/sample.asp?url=/MSDN-FILES/027/002/056/msdncompositedoc.xml
[MSVC] コンパイラ以外のツール、ドキュメントです。
http://www.microsoft.com/msdownload/platformsdk/sdkupdate/
(一括ダウンロードの時は上のURLに続けてこちらを入力してください
default.htm?p=/msdownload/platformsdk/sdkupdate/psdk-full.htm)

なお上記三者を組み合わせたプログラミングにおいてはこちらが分かりやすいです。
http://www.geocities.com/Tokyo/Ginza/5432/documents/winprog/index.html

[DigitalMars]
http://www.digitalmars.com/
[Comeau]
http://www.comeaucomputing.com/
[intel C++ Compiler]
http://www.intel.com/software/products/compilers/
[metrowerks]
http://www.metrowerks.com/mw/default.htm

6 :v(^・^)v:03/04/13 05:04
■Libraries■
Boost http://www.boost.org/
STLport http://www.stlport.org/
Loki http://www.moderncppdesign.com/
LokiPort
MSVC7 http://www.geocities.com/rani_sharoni/LokiPort.html
MSVC6.0 SP5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport

ACE/TAO http://www.cs.wustl.edu/~schmidt/
Network、Thread、ORBなどのポータブルなライブラリ
Blitz++ http://www.oonumerics.org/blitz/
数値計算ライブラリとして人気がある、らしい
spirit http://spirit.sourceforge.net/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
パーサジェネレータ

他ライブラリリンク集
http://www.trumphurst.com/cpplibs/cpplibs.phtml

7 :v(^・^)v:03/04/13 05:05
■過去スレ■
Part1 http://piza.2ch.net/tech/kako/980/980175292.html
Part2 http://pc.2ch.net/tech/kako/996/996640937.html
Part3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
Part8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
Part9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
Part10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
Part11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
part12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
part13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
part14 http://pc2.2ch.net/test/read.cgi/tech/1041328679/
part15 http://pc2.2ch.net/test/read.cgi/tech/1043605481/
part16 http://pc2.2ch.net/test/read.cgi/tech/1045746245/
part17 http://pc2.2ch.net/test/read.cgi/tech/1047560042/

8 :v(^・^)v:03/04/13 05:36
■関連スレ(テンプレートを用いたライブラリ中心)■
【C++】template 統合スレ -- STL/Boost/Loki, etc.
part1 http://pc2.2ch.net/test/read.cgi/tech/1037795348/
part2 http://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/
STLスレッド
part1 http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
part2 http://pc3.2ch.net/tech/kako/1026/10267/1026793823.html
Generic Programming with C++ Template
http://pc.2ch.net/tech/kako/1008/10085/1008593126.html

9 :v(^・^)v:03/04/13 05:37
■関連スレ(環境依存の話題)■
[GCC]
GCCについて
part1 http://pc2.2ch.net/tech/kako/1007/10077/1007731543.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1046179115/
祝・GCC 3.0リリース http://pc.2ch.net/test/read.cgi/unix/992942337/l50
[Digital Mars]
Code of the Nerds" Digital Mars C/C++
http://pc2.2ch.net/test/read.cgi/tech/1044210976/l50
[Borland]
C++Builder相談室
part1 http://piza2.2ch.net/tech/kako/969/969458279.html
part2 http://pc.2ch.net/tech/kako/997/997074601.html
part3 http://pc3.2ch.net/tech/kako/1016/10160/1016065855.html
part4 http://pc2.2ch.net/tech/kako/1035/10355/1035596146.html
part5 http://pc2.2ch.net/test/read.cgi/tech/1045542179/l50
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1030493157/l50
[VisualC++]
VisualC++相談室
part 1 http://piza.2ch.net/tech/kako/970/970607517.html
part 2 http://piza.2ch.net/tech/kako/981/981630730.html
part 3 http://piza2.2ch.net/tech/kako/993/993186053.html
part 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
part 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
part 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
part 7 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
part 8 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
part 9 http://pc2.2ch.net/tech/kako/1036/10368/1036897197.html

10 :v(^・^)v:03/04/13 05:38
初心者にVisual C++を教えるスレ
part1 http://pc3.2ch.net/tech/kako/1023/10235/1023530449.html
part2 http://pc3.2ch.net/tech/kako/1030/10309/1030985362.html
part3 http://pc2.2ch.net/tech/kako/1038/10381/1038160750.html
part4 http://pc2.2ch.net/test/read.cgi/tech/1044196393/l50
part5 http://pc2.2ch.net/test/read.cgi/tech/1048698321/l50


VisualC++(MFC限定)相談室 MFC7.dll
http://pc2.2ch.net/test/read.cgi/tech/1047949606/l50
Windows Programing for C/C++(Not MFC)
http://pc2.2ch.net/test/read.cgi/tech/1018239290/l50
COM の世界を斬る!
http://pc2.2ch.net/test/read.cgi/tech/981823340/l50
ATL 相談室
http://pc2.2ch.net/test/read.cgi/tech/1029029882/l50
managed C++ やろうぜ!!
http://pc2.2ch.net/test/read.cgi/tech/1014486422/l50

11 :デフォルトの名無しさん:03/04/13 08:53
乙カレー。まったりいこうよ。

12 :デフォルトの名無しさん:03/04/13 08:56
最近C++をはじめたのですが、main関数の書式ってどう書くのが正しいのでしょうか?

前スレを見たかぎりでは
int main()とかvoid main()とかint main(int ac,char **av) とかvoid main(void)ですよね。
それにreturn 0を書いてあったりなかったり、そもそもreturn 0ってなんですか?
windows上で動いている時などはOSに0を返してるって事ですか?

13 :デフォルトの名無しさん:03/04/13 09:02
>>12
○ int main()
× void main()
○ int main(int ac,char **av)
× void main(void)

> return 0
あってもなくてもよい。mainだけは、無くても勝手にreturn 0されるはず。

> windows上で動いている時などはOSに0を返してるって事ですか?
そのプログラムを呼び出したホスト環境に0を返してるってこと。

14 :デフォルトの名無しさん:03/04/13 09:07
>>1


15 :12:03/04/13 09:17
レスありがとうございます。
Cの本ではvoid main(void)と書いてあったのですが、
× void main() × void main(void)この2つはだめなのですか?
C++ではmain関数にvoidを使わないのでしょうか、書式としてあまり美しくないという意味ですか。

16 :デフォルトの名無しさん:03/04/13 09:24
>>3
次からは http://boost.cppll.jp/HEAD/ を追加しる

17 :デフォルトの名無しさん:03/04/13 09:26
>>1
カレー

>>15
C++ではmain関数はintを返さなくてはならん、のです。
というかそれはCでも同じ。要するに、その本 を 窓から 投げ捨てろ

18 :12:03/04/13 09:36
>>17
マ…マジデ、1,750円もしたのに…
今から投げ捨てます、レスありがとうございました。

19 :デフォルトの名無しさん:03/04/13 09:43
>>18
拾いに行くので、待ってろ!
void main(void)のほうが美しいじゃないの。


20 :デフォルトの名無しさん:03/04/13 09:44
K&Rにはvoidという型がないので、void main() とは書けません。
また関数や変数の定義で型を書かずにいきなり main() {…} などと
書くことができる(このような場合はintと見なされる)ので、
ANSI Cでは void main() も許されていたと思います。

C++ の規格がどうなっているかは知りませんが、
逆に C++ で void main() と書かれているソースには
お目にかかったことはありませんね。


21 :デフォルトの名無しさん:03/04/13 09:47
>>18
その本、安っ!! もっといいのをたくさん購入しなさい。

22 :デフォルトの名無しさん:03/04/13 09:51
C++が死滅するのはいつですか?

23 :デフォルトの名無しさん:03/04/13 09:53
http://www2.leverage.jp/start/

24 :デフォルトの名無しさん:03/04/13 10:13
>>20
> また関数や変数の定義で型を書かずにいきなり main() {…} などと
> 書くことができる(このような場合はintと見なされる)ので、
> ANSI Cでは void main() も許されていたと思います。

論理的つながりが全くわかりません。

25 :デフォルトの名無しさん:03/04/13 11:36
>>24
マヂで逝ってんの?

26 :デフォルトの名無しさん:03/04/13 11:59
>>20 >>25
つまり、double main() や struct str_tag { int i; int j; } main() も
ANSI Cでは認められると?

27 :デフォルトの名無しさん:03/04/13 12:07
> ANSI Cでは void main() も許されていたと思います。
何てことを・・・

28 :24:03/04/13 12:20
>>25
マヂで説明してくれ。
 1: 「明示的に型指定子を書かないと int となる」
 2: 「ので」
 3: 「main の返値型は void でもよい」
と書いてあるようにしか読めないが、どうやったら1から3という結論が出てくるんだ。

29 :デフォルトの名無しさん:03/04/13 12:22
>>26
> つまり、double main() や struct str_tag { int i; int j; } main() も
> ANSI Cでは認められると?

Yes.

5.1.2.2.1 Program startup には、int main() と int main(int argc, char *argv[]) が書いてあってその後に、or in some other implementation-defined manner. と書いてあるから。

30 :デフォルトの名無しさん:03/04/13 12:46
>>29
ANSI C と言った場合、N739 …というか C99 の
ことは普通は指さないと思われるがどうか。

31 :デフォルトの名無しさん:03/04/13 17:05
STLつかうと一気に実行ファイルサイズが10倍に?!


32 :デフォルトの名無しさん:03/04/13 17:10
cinの(キーボードからの)入力待ちってキャンセルできるんでしょうか

33 :デフォルトの名無しさん:03/04/13 17:11
>>31
環境によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10Kほどしか増えない。

34 :デフォルトの名無しさん:03/04/13 17:14
>>33
すげえ。ダイナミックリンクしといてファイルサイズが増えないとかいってるよ。この人。


35 :デフォルトの名無しさん:03/04/13 17:17
C1010: プリコンパイル済みヘッダーの検索中に予期しない EOF を検出しました。
とかいうエラーが出るんだけどこれってどうすればいいの?

36 :デフォルトの名無しさん:03/04/13 17:18
>>33
コピペネタにマジレ(ry

37 :デフォルトの名無しさん:03/04/13 17:18
>>35
#include <stdafx.h>

後死ね。

38 :デフォルトの名無しさん:03/04/13 17:19
>>37
言葉が悪いな。それで教えているつもりか。
まぁヒントぐらいにはなったな。
うむごくろう。

39 :デフォルトの名無しさん:03/04/13 17:20
class foo {
int _id;
public:
foo(int id) : _id(id) { }
foo(foo& f) : _id(f._id) { }
foo& operator=(foo& f) { _id = f._id; return *this;}
virtual ~foo() {}
};
int main(int,char**){
foo bar(0);
bar = foo(1);
return 0;
}
以上のコードを gcc 3.2でコンパイルしたら
no match for `foo& = foo' operator
candidates are: foo& foo::operator=(foo&)
っていわれるんだけど、俺間違ってないよね?

40 :デフォルトの名無しさん:03/04/13 17:20
>>39
まちがってる

foo(const foo& f) : _id(f._id) { }
foo& operator=(const foo& f) { _id = f._id; return *this;}

コピーコンストラクタや代入演算子はconstの参照だ
一時オブジェクトは非const参照できない

41 :デフォルトの名無しさん:03/04/13 17:23
以上デジャブの(・∀・)ジサクジエーンでした。

42 :デフォルトの名無しさん:03/04/13 17:24
>>40
まだやるつもりだったのにー

43 :デフォルトの名無しさん:03/04/13 18:00
shade_transform.obj : error LNK2005: "double * r_inter" (?r_inter@@3PANA) はすでに
search_joint_point.obj で定義されています

とかいうエラーが出るんですけど、どうしたらいいのでしょう?

下の文を書いたヘッダファイルを3つのファイルで
incluedしてるのですが、何が悪いのか分かりませんので
お願いします。

#ifndef VARIABLE
#define VARIABLE
double r_inter[4] = { 0.237857 , -0.052922 ,-0.113636 , -0.05279 };
#endif

44 :デフォルトの名無しさん:03/04/13 18:12
>>43
外部リンケージを持つ配列が複数定義されているのが悪い。

・宣言と定義を分ける(外部リンケージの配列定義を一つにする)
・constを付ける(内部リンケージにする)

45 :デフォルトの名無しさん:03/04/13 18:15
constつけると解決しました。
ありがとうございます。

46 :44:03/04/13 18:26
>>45
ほんとに理解したのか?
例は出さずにリンケージの話だけ答えとけばよかったかな。

47 :デフォルトの名無しさん:03/04/13 19:15
音楽再生機能を持たせたいのだが参考になるものないかなぁ・?

48 :デフォルトの名無しさん:03/04/13 21:14
>>45
>>46 の言う通り、その方法でホントに良いのか ?
その数値が何示すかわからんけど、修正する時は両方のファイル共に修正しないといけなくなるぞ。
extern について調べるべきだと思う。

49 :デフォルトの名無しさん:03/04/13 21:28
進行早いな。
>>29
実装依存->結果どうなるかも実装依存
ということ。

>>47
OSやデバイスによって書き方が激しく違う。
適切なスレに行くべし。


50 :デフォルトの名無しさん:03/04/14 07:31
>>49
じゃあ何処逝けばいいですか

51 :デフォルトの名無しさん:03/04/14 10:52
すんませーん STL 学び始めたばっかりなんですが
コンテナって 後始末に明示的にデストラクタ呼び出さなくても
良いのですか?

本のサンプルみてても とくに呼び出さず終了してますが
プログラム終了時に自動でメモリ解放してくれる?
そんな便利じゃないですよねえ


52 :51:03/04/14 10:58

すんません よくわからない文章ですね
つまり デストラクタを自分で実装しない構造体型
のコンテナを作ってるんですが

どのようにメモリを解放しているか
よくわからないんです

53 :デフォルトの名無しさん:03/04/14 11:00
>>51
コンテナの自動変数はスコープアウト時に自動でメモリも解放する。
そんな便利なものなのです。

54 :デフォルトの名無しさん:03/04/14 11:01
>52
> デストラクタを自分で実装しない構造体型

これなーに?
よけいにわからなくなった。

55 :51:03/04/14 11:14
>>51
アリガトです 安心しました

>>54
失礼 組込型メンバのみの構造体ってことです
メモリ確保も自分でやってないので
コンストラクタもデストラクタも書いてないという...
つもりだったんですが よけいわかりにくいですね


56 :デフォルトの名無しさん:03/04/14 11:56
勝手な造語を乱造するのはやめてくだちぃ

57 :デフォルトの名無しさん:03/04/14 12:01
ポインタが好き。


58 :デフォルトの名無しさん:03/04/14 12:08
リファレンス型は好きだけどC系のポインタの扱いは鬱

59 :デフォルトの名無しさん:03/04/14 12:32
末尾に'\0'のついたchar型の配列の文字列は「Cスタイル(の)文字列」と言うんですよね?
ぼーよーにはNTBSって書いてあるんですけど・・・・

60 :デフォルトの名無しさん:03/04/14 13:15
class Base;
class Hasei1 : public Base;
class Hasei2 : public Base;
とありまして, 使う側は"base.h"だけ知っていれば問題無いですよね。
ところが,ファイルに保存した情報からnewしようとすると
具体的な"hasei1.h"や"hasei2.h"が必要になってしまいます。
これはなんとかならないものでしょうか?
意味不明ならスマソ

61 :デフォルトの名無しさん:03/04/14 13:20
>>60
必要なのはあたりまえ

必死で意味を読み取ろうとしたんだがhasei1.hで定義されているクラスを
それを読み込まずに宣言したいとしか読めん

62 :60:03/04/14 13:24
補足しますと
string className;
ReadClassNameFromFile(className);
Base* base = new className;    // ←!!!
みたいなことができないものでしょうか?

63 :60:03/04/14 13:24
>>61
そのとうりです・・・

64 :デフォルトの名無しさん:03/04/14 14:02
string型の文字列を、char*へ変換するにはどうしたらよいですか?
よろしくお願いします。

65 :デフォルトの名無しさん:03/04/14 14:05
c_str()

66 :64:03/04/14 14:22
>>65
レスありがとうございます。
そうだと思ったのですが。
const char*型は、 char*型へ変換できないっていうエラーが出ます。

67 :デフォルトの名無しさん:03/04/14 14:27
>60
問題点
1) >>62 やりたいことはわからんでもないが
 マクロじゃないんだから型名を変数で置き換えなんてできないぞ
 まだやるなら
 int classKind;Base* base=NULL;
ReadClassKindFromFile(classKind);
switch(classkind) {
 case CLASS_HASEI1:base = new HASEI1;break;
 case CLASS_HASEI2:base = new HASEI2;break;
default:dataerror();break;
}
2)こうしたところで、HASEI1を解決するためには
 "hasei1.h"をインクルードしなきゃいけないのは 当然。


68 :デフォルトの名無しさん:03/04/14 16:59
>>66 64
1.受け取る側が値を変更しないならそちらをconst char*にする
2.値を変更せずかつ書き換え不可ならconst_castを使う
3.値を変更するなら適当に領域を確保してコピーすべきなのでは

>>67
ClassFactoryを使えば"hasei1.h"のインクルードは不要になるのでは?
もちろんClassFactoryのほうはインクルードが必要だけど(w


69 :デフォルトの名無しさん:03/04/14 17:03
>>66
書き込むためのchar*が必要ならstd::vector<char>で代替できる。

70 :64:03/04/14 17:57
>>68>>69
ありがとうございます。たすかりました。

71 :60:03/04/14 19:57
>>67
なるほど。よく考えれば当然ですね。
生成以外は抽象的に扱えるのでここもなんとか,と思いましたが
知らないものを作るのは無理か
>>68
ちょっとすっきりしますね。考えてみます。

テンプレート?を駆使してグローバルなmapにコールバック関数を登録し,
動的に照会してnewする方法をとれば,依存ゼロが可能なようですが
大変そうなので,ClassFactoryがよさそうかなと思います。
ありがとうございました。

72 :デフォルトの名無しさん:03/04/14 20:29
C++ではヌルポインターはNULLマクロを使うよりも0と書いた方がいいですか?

73 :72:03/04/14 20:30
多分#define NULL 0となっていると思いますけど、一応。

74 :デフォルトの名無しさん:03/04/14 20:40
可読性考えてNULL入れておいたほうが無難だと思う。

75 :デフォルトの名無しさん:03/04/14 20:40
おれは0を使う。
NULLが定義してあるヘッダをインクルードするのがメンドクサイ。

76 :デフォルトの名無しさん:03/04/14 20:51
foo(bar*);
foo(int);

foo(0);
どっちが呼ばれるんだっけ?

77 :デフォルトの名無しさん:03/04/14 20:55
後者だがそんなオーバーロードをする奴とは仕事をしない


78 :デフォルトの名無しさん:03/04/14 22:51
>>32

79 :デフォルトの名無しさん:03/04/14 23:31
呼び出す側が注意できるやつならば、特に問題なし。

オーバーロードするときは
型の第一候補が見つからないときに起きる
暗黙の標準変換のことも考慮しないとやばいわな。

80 :デフォルトの名無しさん:03/04/15 01:20
#include <memory>

struct B {};
struct D : B {};

int main() {
    std::auto_ptr<D> bp6(std::auto_ptr<B>());
    //bp6.reset();
    return 0;
}
gcc(3.2.2,2.9.5とも)でこれをコンパイルすると通る上に、//の
部分のコメントを外すと
hoge.cc: In function `int main()':
hoge.cc:8: request for member `reset' in `p', which is of non-aggregate
type `auto_ptr<D> ()(auto_ptr<B> (*)())'
とか言われるんだけど、これってバグだよね?
ちなみに
std::auto_ptr<D> bp6(std::auto_ptr<B>(0));
だと予想通りの挙動になる。

81 :デフォルトの名無しさん:03/04/15 01:22
std::string s("10");
int i = atoi(s.c_str());

文字列を数字に変換するのってこれでいいの?
とくにatoiとかをC++で使っていいのかYOとか思ってさ。

82 :デフォルトの名無しさん:03/04/15 01:25
boost::lexical_cast を使いましょう。
せめて std::stringstgream を使いましょう。
それもわからなければ、#include <cstdlib> として std::strtoul()
あたりをつかいましょう。

83 :デフォルトの名無しさん:03/04/15 01:29
Print(char *)
Print(int)
は普通にあるだろ。

84 :デフォルトの名無しさん:03/04/15 01:50
g++ってgccのフロントエンドなんでしょ?
以前は、shellで書いてあったとか何かの本で読んだ記憶がある。

いまのg++って実際にはどんな処理をしてるの?

85 :デフォルトの名無しさん:03/04/15 01:50
はつみみです。

86 :デフォルトの名無しさん:03/04/15 01:51
>>80
> std::auto_ptr<D> bp6(std::auto_ptr<B>());

そりゃ関数宣言だな。

87 :デフォルトの名無しさん:03/04/15 01:54
VC++4.0のシリアルください

88 :デフォルトの名無しさん:03/04/15 02:02
>>83
そんなときはchar*を捨ててstd::stringにしる。

89 :デフォルトの名無しさん:03/04/15 02:10
>>84
C++のコンパイル


90 :デフォルトの名無しさん:03/04/15 02:14
>>84
cpp0 cc1plus collect2 ld

91 :デフォルトの名無しさん:03/04/15 02:19
>>84
g++は最初からネイティブだったと思う。
ベル研の C++ (たぶん最古のC++処理系) は C++ -> C のトランスレータ。

92 :80:03/04/15 02:59
>>86
確かにエラーを見ても、関数宣言だと思われているみたいだけど、
どうしてそうなるわけ?引数部分はstd::auto_ptr<B>()だから、
型じゃなくコンストラクタの呼び出しでは?

93 :デフォルトの名無しさん:03/04/15 03:00
>>80
バグだな

94 :デフォルトの名無しさん:03/04/15 03:14
class std::auto_ptr<D> bp6(std::auto_ptr<B>());

95 :デフォルトの名無しさん:03/04/15 03:15
>>92
http://www.kuzbass.ru/docs/isocpp/stmt.html#stmt.ambig

96 :デフォルトの名無しさん:03/04/15 03:28
>>95
スマン、俺の見た限りでは見つけられなかったんだが引用してほしい。

97 :デフォルトの名無しさん:03/04/15 04:02
>>91
gpp という名の c++ -> c トランスレータを使った事があるが、これが
g++ の前身かと記憶してます。
10年以上前の話だが...

98 :デフォルトの名無しさん:03/04/15 04:04
int f(int x);
これは、「int型の引数を一つ受け取りint型の値を返す関数」の宣言。
int f(int);
これはさっきのと同じ意味の関数宣言。
つまり、仮引数リストでは、宣言子は必要ない。

int F(int g());
これは、「『引数を取らずint型の値を返す関数』型の引数を一つ受け取りint型の値を返す関数」の宣言。
で、仮引数リストでは、宣言子は必要ないので・・・。
int F(int());
これも実は、さっきのと同じ意味の関数宣言。

つまり、(つづく)

99 :デフォルトの名無しさん:03/04/15 04:05
Tが型名だとすると、
T a(T());
は、
「『引数を取らずT型の値を返す関数』型の引数を一つ受け取りT型の値を返す関数」の宣言と読める。
しかし同時に、「T()を初期化子とするT型の変数」の宣言にも見える。
これらは実際曖昧で、曖昧さを解決するための鍵は、T()を式とするか、宣言とするかである。

んで、[6.8 -1-]。
〜引用〜
An expression-statement with a function-style explicit type conversion
as its leftmost subexpression can be indistinguishable
from a declaration where the first declarator starts with a (.
In those cases the statement is a declaration.
〜引用おしまい〜
〜引用訳〜
関数スタイルの明示的型変換を最も左の式とする式文は、
最初の宣言子が「(」で始まる宣言と区別できない。
そのような場合、その文は宣言である。
〜引用訳おしまい〜

「式文」ってなってるからちょっと怪しいけど、上記の曖昧さは
このルールで解決される。

100 :デフォルトの名無しさん:03/04/15 04:06
ふぅ。
ついでに100でも取っとくか。

あー、Effective STLにも書いてあっただろ。

101 :デフォルトの名無しさん:03/04/15 04:08
おぉっと。
>>99
ちょっと誤訳だ。
s/区別できない/区別できない場合がある/


102 :デフォルトの名無しさん:03/04/15 04:26
>>99
ちがくないか?
その部分は
T(a)++; が式(aを引数にTのコンストラクタを呼び出し、それをインクリメント)
T(f) = { 1, 2 }; が宣言(T型のfを宣言し、初期値をセット)
を人間が目で見てよくわからないから区別する方法を解説してるんだろ?

それに
int F(int g());

int F(int());
と書けるってのは聞いたことが無いし、VC++ではこれはintの変数になったよ。
int F( int(*)() );
ならわかるんだが。

そのページの最後の
T(*g)(double(3));

In the last example above, g, which is a pointer to T, is initialized to double(3).
って書いてある。

103 :デフォルトの名無しさん:03/04/15 04:40
Cの話なんですが
動的構造体変数を宣言する時は
構造体を定義した際に、動的変数とは別に変数宣言をしなければならない
のでしょうか?

104 :あぼーん:03/04/15 04:42
あぼーん

105 :98-101:03/04/15 04:55
>>102
まずいところを誤訳したかな。
宣言と式の曖昧なところを宣言として解決するのは、
文全体をパースしてもなお曖昧さが解決できない場合の最後の手段。
T(a)++;
これは演算子が続いているので式とされる。
T(f) = { 1, 2 };
これは初期化リストが続いているので宣言とされる。
人間の目で見ても明らかだと思うが・・・。

> 聞いたことが無いし、VC++ではこれはintの変数になったよ。
聞いたことが無いのを理由にするつもり?
そうそう、これのせいでboost::functionのテンプレート引数が
ちょっとかっこ悪くなる。

いい引用元みつけた。
http://www.kuzbass.ru/docs/isocpp/decl.html#dcl.ambig.res
文の曖昧さ解決(>>99)が宣言についても同様に起こることが明記してあるし、
この話にぴったりの例も載ってる。

106 :デフォルトの名無しさん:03/04/15 05:10
>>103
いや、べつに。

107 :103:03/04/15 05:19
struct test
{ int n1;//アダプタに存在するモードの総数
int n2;
}c, *pc;
こう定義されている場合にこの動的構造体変数を宣言するには
pc = new test;
ですよね?
こう書けますか?
pc pc2 = new p;


108 :103:03/04/15 05:21
最後に一文間違えました・・
pc pc2 = new c; でした

109 :デフォルトの名無しさん:03/04/15 05:25
>>105
お、ホントだ
int a = 0;
S b( S( 0 ) ); // コンストラクタ
S c( S( a ) ); // 関数

面白いな。
それにしてもこれがあいまいになっちまうくらいなら別の表記があるんだからそっちだけ使ってれば良かったんじゃね?

110 :デフォルトの名無しさん:03/04/15 05:26
>>107
×pc pc2 = new c;
○test* pc2 = new test(c);

型名と変数名を区別しる。

111 :デフォルトの名無しさん:03/04/15 05:29
おそらく107は最初にtypedefを入れたかったんだと思われ

112 :デフォルトの名無しさん:03/04/15 05:32
>>111
typedefなら、
pc = new test;
が書けない。

113 :103:03/04/15 05:42
typedef struct tag_DisplayModeData
{
D3DDISPLAYMODE DisplayMode;//ディスプレイモードデータ構造体

tag_DisplayModeData* lpNext;//次構造体へのポインタ
tag_DisplayModeData* lpBack;//前構造体へのポインタ

}DISPLAYDAT,*LPDISPLAYDAT;

typedef struct tag_EnumDispChain
{
UINTModeCount;//アダプタに存在するモードの総数

intAdptPoint; //このアダプタの評価点数
D3DCAPS8AdptCaps; //このアダプタのハードウェア情報
DISPLAYDATDispDataTop;//ディスプレイデータ先端ポインタ
DISPLAYDATDispDataEnd;//ディスプレイデータ終端ポインタ
tag_EnumDispChain*lpNext;//次チェイン先端へのポインタ
tag_EnumDispChain*lpBack;//前チェイン先端へのポインタ
}ENUMDISP,*LPENUMDISP;

LPENUMDISP pEnumDispTop = new ENUMDISP;
サンプルプログラムでは、動的変数を宣言するのに型名を使わずに変数名で宣言しているのですが
ビルドできました。どういう書き方なんでしょうか?

114 :デフォルトの名無しさん:03/04/15 05:44
>>113
typedefを学べ。

115 :103:03/04/15 05:45
>>111
>>112
勉強し直します。有難うございました

116 :あぼーん:03/04/15 06:16
あぼーん

117 :デフォルトの名無しさん:03/04/15 11:08
>>97
最初はトランスレータが結構あったね。

118 :デフォルトの名無しさん:03/04/15 11:33
じゃぁ、トランスレータ使えば、
多態性やら、STL使ったプログラムなんかも、Cになっちまうって事ですかよ!
ワッショイ!

119 :デフォルトの名無しさん:03/04/15 12:58
>>118
アフォですか?
だれかトランスレータ使えっていってる香具師いたっけ?

120 :デフォルトの名無しさん:03/04/15 16:00
>>118
どのみち最後は機械語になるんだが。
つーことで、別になんの不思議もないが?

121 :デフォルトの名無しさん:03/04/15 19:00
>>118
ちなみに多態は構造体のメンバに関数ポインタを置くことであっさり実現できる。
テンプレートはプリプロセッサによるジェネリックなプログラミングと似てる。

だからなんだってわけではない。

122 :デフォルトの名無しさん:03/04/15 21:03
教えてください。初歩的なことですみません。
配列をスレッドで扱うときの処理です。
例えば
for(iterator・・・){
処理;
remove(0);
}
のように複数スレッドで同じ配列をみるようにしたとき、
タイミングによってはバグになると思います。
これを、便利ライブラリとかを使わずにテクニックで解決するには
どうしたらいいでしょうか。

123 :デフォルトの名無しさん:03/04/15 21:25
122:10: `便利ライブラリ' undeclared
122:10: `テクニック' undeclared


124 :デフォルトの名無しさん:03/04/15 21:31
122:2: `配列' declared but not used

125 :デフォルトの名無しさん:03/04/15 21:40
>>123 124
バカにしたい気持ちはわかるが初心者なので大目に見てください。
クリティカルセクションとかいうのを使いたいのですが、標準のライブラリ
のなかにあるのかどうか、なんていう名前なのかも分かりません。
それとも手作りでできるものでしょうか?

126 :デフォルトの名無しさん:03/04/15 21:47
125:2: warning: 2ch tech forbids such declaration

127 :デフォルトの名無しさん:03/04/15 21:49
>>125
・C++の規格はスレッドなるものを全く考慮に入れてないので、標準ライブラリにはない。
・準標準なら boost::thread
・余計なもんいれたくないなら、pthread なり Windows API なり、
 開発環境でさいしょっから使えるものを使え。「スレッドの作り方」
 がわかるんなら同じとこを探せばCriticalSectionでもMutexでもわかるはず。
・手作りしたいなら Petersonのアルゴリズム、とかでググれ。ネタだが。

128 :デフォルトの名無しさん:03/04/15 22:32
      ☆ チン     マチクタビレタ〜
                        マチクタビレタ〜
       ☆ チン  〃  ∧_∧   / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
        ヽ ___\(\・∀・) < >>32 マダー?
            \_/⊂ ⊂_ )   \_____________
          / ̄ ̄ ̄ ̄ ̄ ̄ /|
       | ̄ ̄ ̄ ̄ ̄ ̄ ̄|  |
       |  夕張メロン   |/


129 :デフォルトの名無しさん:03/04/15 22:33
>>128 EOFつっこめよ。

130 :128:03/04/15 22:38
>>129
いや、そうじゃなくて、プログラム側で

131 :デフォルトの名無しさん:03/04/15 22:40
>>130 ならcinに待たせてるのが間違いだろ。

132 :128:03/04/15 22:45
>>131
そうです。いつまでも待ってないで処理を取り返したいんですが。

133 :デフォルトの名無しさん:03/04/15 23:05
>>132 できねぇってこった。

134 :128:03/04/15 23:38
                 ┌─┐
                 |も.|
                 |う |
                 │来│
                 │ね│
                 │え .|
                 │よ .|
      ヌルポ   ゴルァ  │ !!.│
                 └─┤    プンプン
    ヽ(`Д´)ノ ヽ(`Д´)ノ  (`Д´)ノ    ( `Д)
    | ̄ ̄ ̄|─| ̄ ̄ ̄|─| ̄ ̄ ̄|─□( ヽ┐U
〜 〜  ̄◎ ̄  . ̄◎ ̄   ̄◎ ̄   ◎−>┘◎

135 :デフォルトの名無しさん:03/04/16 00:20
おまえ実はそのAA貼りたかっただけだろ!

136 :デフォルトの名無しさん:03/04/16 00:31
>>135
わろた


137 :125:03/04/16 06:32
>>127
ありがとうございます!
標準にはないんですね。
今あるやつを探してみます。

138 :デフォルトの名無しさん:03/04/16 06:59
>128
UNIXなら、alarmでもつかえば。

139 :デフォルトの名無しさん:03/04/16 13:06
他のスレで質問したのですが、答えが得られなかったので、このスレで質問します。
C++はGetMessageの内部ループで待つメッセージループ型と、PeekMessageと組み
合わせることでGetMessageのあるwhileでのループで待つメインループ型の2つが
ありますが、本や情報サイトに載ってるのは殆どがメッセージループ型ですよね。
メインループ型を使えば、時間の処理などを使いやすくなる利点が生まれるのですが
デメリット等があるのですか。

140 :デフォルトの名無しさん:03/04/16 13:13
- GetMessageの方がすっきりしてて綺麗。
- Windowsプログラミングの話題なのに、
 C++一般の話題として話してるのが馬鹿っぽい。
- "時間の処理などを使いやすくなる利点が生まれる"という記述が意味不明。


141 :139:03/04/16 13:27
>>140 お答えありがとうございました。

142 :デフォルトの名無しさん:03/04/16 15:58
CFront探してみたんだが行方不明みたいだな…

143 :デフォルトの名無しさん:03/04/16 16:24
標準コンテナは Copy on Write ですか?

144 :デフォルトの名無しさん:03/04/16 19:05
C++がカーネルとかシステムに近いところに向かない理由を
仮想関数関連以外で述べて。
お願い。

145 :デフォルトの名無しさん:03/04/16 19:13
>>144
べつに向かないこともないんでは?

146 :デフォルトの名無しさん:03/04/16 20:04
仮想関数がシステムに近いところで妙な挙動をするって事もないでしょ。



147 :デフォルトの名無しさん:03/04/17 00:40
>> 144
ターゲットによっては、C++ではあまり最適化されなくて遅いって事はある。

148 :デフォルトの名無しさん:03/04/17 00:43
>>144
COMみたいな仕組みを用意しとかないと、
バイナリ互換性がとりにくいとか、
compiler間のmangling schemeの違いを吸収できない。

149 :デフォルトの名無しさん:03/04/17 00:43
>>144
C++を良く知らない人が多い、とか・・・

150 :デフォルトの名無しさん:03/04/17 01:14
誰か cint の C++の規格準拠度を上げてくれないかニャー

151 :山崎渉:03/04/17 15:17
(^^)

152 :デフォルトの名無しさん:03/04/18 08:48
標準CはANSIのみ使ったコードですが、標準C++とは何ですか?

153 :デフォルトの名無しさん:03/04/18 08:50
C++にも標準規格があるんだが。

154 :デフォルトの名無しさん:03/04/18 10:07
BeOSはC++で標準APIがC++のインターフェースだったような。
システム自体どこまでC++で書かれているかは知らないけど。

155 :デフォルトの名無しさん:03/04/18 10:44
すいません、質問ですがC++でPerlのIO::SocketやHTTP::Liteモジュールの
ようなものはありますか?
C++に、という表現は変ですね、そのようなクラスライブラリみたいなものは
存在しますか?
例えばCIOSocketやCHttpのような。
C++の勉強がてらPerlのプログラムを移植してみようと思うのですが、あるな
らばそのリソースとか教えて頂けないでしょうか。



156 :デフォルトの名無しさん:03/04/18 10:52
OSとコンパイラをのべたまへ

157 :155:03/04/18 10:54
すいません、Win32環境下のコマンドラインでBC++もしくはGCCを想定しています。


158 :デフォルトの名無しさん:03/04/18 11:01
標準のソケットのクラスライブラリというものはないよ。
Windows標準だとWin32APIのWinSock/WinInetがある。
C++Builder/Visual C++にはそれぞれコンポーネント・クラスがある。

http://www.kt.rim.or.jp/~ksk/wskfaq-ja/

159 :155:03/04/18 11:16
レスありがとうございます。
ということはFreeな環境下、もしくはコンポーネントに頼らない場合は
Win32APIを直接操作してラッピングするようなクラスを自前で設計し
てやる以外に方法はないということでよろしいでしょうか?

と、レスを書いている間にACEというものを見つけたので少し見てみる
事にします。

以下引用(ttp://blue.sakura.ne.jp/~turugina/prog/ace_inst.htm)
そこで登場したのがACEである。 ACEは、Windows、MacOSX、UNIX等、
様々なプラットフォーム上で動作する主なC++コンパイラーで動作する、
ネットワークプログラム用のミドルウェアである。 ACEに含まれるクラス
群は各プラットフォーム間のネットワークコード上の差異を吸収し、さら
にネイティブよりも型安全なコーディング環境を提供してくれる。

http://www.cs.wustl.edu/~schmidt/ACE-overview.html


160 :デフォルトの名無しさん :03/04/18 11:24
質問です。
c++で、
標準の 演算子のオーバーロードは、できるのでしょうか?
(クラスの演算子では、ありません)
+ , - , * , / とかです。



161 :デフォルトの名無しさん:03/04/18 11:27
>>160
できません。できたらとしたら曖昧になってしまう。

162 :デフォルトの名無しさん:03/04/18 12:21
インターフェースというのは純粋仮想関数のみのクラスのこと
という理解であってますか?

163 :デフォルトの名無しさん:03/04/18 12:34
>>162
間違っています。

164 :デフォルトの名無しさん:03/04/18 12:35
boost::.net
でないかな・・・。

165 :デフォルトの名無しさん:03/04/18 12:58
>>160
ユーザー定義型を使えば、できる。
組み込み型はだめ。

enum E {};
E operator + ( E , E );
E operator - ( E , E );
E operator / ( E , E );
E operator * ( E , E );

E foo( E e1 , E e2 )
{
  return e1 + e2 * e1 - e2 / e1;
}


166 :155:03/04/18 13:20
>>164
boost::.netで検索かけてみたのですが発見できませんでした。
よろしければリソースへのリンク等お教え頂けないでしょうか?


167 :デフォルトの名無しさん:03/04/18 13:26
>>166
でないかなってのはただの希望かと

168 :デフォルトの名無しさん:03/04/18 14:49
ACEは国内情報がほとんどないよ。書籍は出てるけど。
C/C++やるならBSDソケットくらいはやっとけという気はする。

169 :164:03/04/18 18:36
>>166
すんません、単なる希望です。

boost::_3D
boost::window
とかもでないかな。
って、スレ違いだな。

170 :デフォルトの名無しさん:03/04/18 19:42
boost::socket っていうのは Boost の Wiki にあるよ
はやくでないかな

171 :155:03/04/19 01:09
ふむふむ、やっぱりsocketは手前で使えるほうが何かと便利ですよね。
boost::socketに期待しつつwinsockの勉強してみようと思います。
色々とありがとうございました。


172 :デフォルトの名無しさん:03/04/19 01:19
デフォルトコンストラクタの無い基底クラスの
コンストラクタを派生クラスのコンストラクタ
の初期化指定子でする書き方ってどうやるんでつか?

173 :デフォルトの名無しさん:03/04/19 01:37
>>172
class Super
{
public: Super(int){}
};

class Sub : public Super
{
public: Sub():Super(1){}
};

174 :デフォルトの名無しさん:03/04/19 01:57
class Super
{
public: Super(int){}
};

class Sub : public Super
{
public: Sub(){
Super(1);
};

これもあり?

175 :デフォルトの名無しさん:03/04/19 02:10
>>174
ない。Superクラスの一時オブジェクトが作成されて瞬時にデストラクトされるだけ。

176 :デフォルトの名無しさん:03/04/19 16:45
基底クラスですか?基本クラスですか?
どっちが一般的な呼び方?
それとも違うもの?
私が読んでいる本には基本クラスとかいてあります。
(決定版はじめてのC++技術評論社)

177 :デフォルトの名無しさん:03/04/19 16:58
>>176
どっちも英語にしたら base class。
俺は基底の方が好き。


178 :デフォルトの名無しさん:03/04/19 18:10
俺は「ベースクラス」だなw

179 : :03/04/19 19:23
vc7のSTLは安心して使えまつか?

180 :デフォルトの名無しさん:03/04/19 19:27
VC++.NET2003のANSI準拠度は98%。

181 :デフォルトの名無しさん:03/04/19 19:30
>>180
あとの2%はなんですの?

182 :デフォルトの名無しさん:03/04/19 19:31
>>181
MSに聞いてくれよ

183 :デフォルトの名無しさん:03/04/19 19:33
>>180
6.0は99%だぞ

184 :デフォルトの名無しさん:03/04/19 19:34
いつでるの? > 2003

185 :デフォルトの名無しさん:03/04/19 19:35
>>184
定番の6/30

186 :デフォルトの名無しさん:03/04/19 19:36
なんでたったの1年で新しいバージョンを出すの?
6.0からは4年もかかったのに

187 :x:03/04/19 19:37

char *buff;

buff = moji("文字列");

printf("buff=%s",buff);
------------------------------
buff=文字列


と言う風に、文字列を=で渡すことってできますか?


188 :デフォルトの名無しさん:03/04/19 19:38
>>183
6.0時点じゃまだ標準C++にすら準拠してねーよ(わらい

189 :デフォルトの名無しさん:03/04/19 19:38
>>187
そのmoji関数がstrdup(標準じゃないけど)関数みたいなものなら。
std::stringなら=でコピーできる。

190 :デフォルトの名無しさん:03/04/19 19:39
今のVS.NET買わなくてよかった

191 :デフォルトの名無しさん:03/04/19 19:41
>>187
C++のスレで聞かなくてもいい質問なんじゃないの?

192 :デフォルトの名無しさん:03/04/19 19:42
>>190
自分は期待して購入し裏切られました。

193 :デフォルトの名無しさん:03/04/19 19:42
>>192
自分はWin98SEを使っているという時点で断念しました。


194 :デフォルトの名無しさん:03/04/19 19:50
くそー、いつの間にか新スレがー!

195 :x:03/04/19 19:54
>>189
>moji関数がstrdup(標準じゃないけど)関数みたいなものなら。

どうすればいいんですか?


196 :デフォルトの名無しさん:03/04/19 19:55
>>195
だからさー、それはごく初歩のCの質問じゃないのか?

197 :デフォルトの名無しさん:03/04/19 19:56
>>195
<string>インクルードしてstd::stringを使おうよ。

198 :デフォルトの名無しさん:03/04/19 20:01
>>195
char*は文字列型ではありません!単なるポインタです!
組み込みではないものの、C++には文字列型stringがあります!これを使いましょう!

199 :デフォルトの名無しさん:03/04/19 20:01
つーか、.NETに間に合わなかった分が2003だと思ってるんだが。
当初は.NETの時点でそれなりに標準C++に準拠しようとしてたらしいし。

200 :x:03/04/19 20:09
>>197
Linuxで
#include <map>
#include <iostream>

used namespaced std

として、gcc -osample sample.cpp
とすると、インクルードだけでエラーがでる。なんでだろう?
>>198
char *operator=(moji a); ・・(略)

オペレータかなにかで実装は不可能ですか?



201 :デフォルトの名無しさん:03/04/19 20:11
used namespaced std

なんだこれ(;´Д`)

using namespace std
って書きたかったのか?

202 :x:03/04/19 20:11
>>201
多少の記述違いはきにしないで、すまそ。

203 :デフォルトの名無しさん:03/04/19 20:12
C言語はどこで作られたんですか?

204 :デフォルトの名無しさん:03/04/19 20:12
>>200
どんなエラーが出るのですか!

205 :デフォルトの名無しさん:03/04/19 20:13
>char *operator=(moji a); ・・(略)
>
>オペレータかなにかで実装は不可能ですか?

>>198の言ってる事が根本的にわかってないみたいなので、
まずC言語をちゃんと勉強した方がいいよ。

206 :デフォルトの名無しさん:03/04/19 20:14

まじめに恋愛を考える、真剣なあなたのためにこのサイトを作りました。
http://www.h5.dion.ne.jp/~psysys/index.html


207 :x:03/04/19 20:18
>>204
今Windowsから書きこしてるのでエラーメッセージは表示できまへん。

208 :x:03/04/19 20:20
>C++には文字列型stringがあります!これを使いましょう!

stringヘッダーと同等の機能を作りたい。


209 :デフォルトの名無しさん:03/04/19 21:05
>>208
なんで? お勉強か?

210 :デフォルトの名無しさん:03/04/19 21:07
もう、>>208は放置の方向で…

211 :デフォルトの名無しさん:03/04/19 22:20
>>x
g++

212 :デフォルトの名無しさん:03/04/20 01:10
コンテキスト? コンテクスト?

日本語に置き換えて読むとしたら?

213 :デフォルトの名無しさん:03/04/20 01:12
このスレと全然関係ないじゃん・・・

214 :デフォルトの名無しさん:03/04/20 01:22
>>212
ぬるぽ

215 :デフォルトの名無しさん:03/04/20 01:32
>>214
ガッ

216 :デフォルトの名無しさん:03/04/20 01:33

すまん。C++の洋書の訳版に出てきたからさ。
contextをそのままコンテキストって書いてあるんだもん。。。


217 :デフォルトの名無しさん:03/04/20 01:38
テキスト(text)をテクストと書くのは別に変なことじゃない。検索でもしてみりゃすぐ出てくる。

218 :デフォルトの名無しさん:03/04/20 01:40
>>212
関係ないが、分野によって標準的な表記が異なる外国語ってあるよな。
テキストは哲学なんかの分野だとテクストだし、
小説のジュヴナイルは競馬ではジュヴェナイルだし。

219 :デフォルトの名無しさん:03/04/20 01:42
>>216
文脈、事情、背景。

220 :デフォルトの名無しさん:03/04/20 01:43
device context: 道具事情。


221 :デフォルトの名無しさん:03/04/20 01:49
彼氏と彼女の事情。


222 :デフォルトの名無しさん:03/04/20 01:54
彼氏と彼女の旦那の事情。

223 :デフォルトの名無しさん:03/04/20 02:00
> 文脈、事情、背景。

寒いんだよ。
そんなの調べりゃわかることだろ?
ソフトウエア的に通じる比喩は無いかっていってんの。

224 :デフォルトの名無しさん:03/04/20 02:02
なんで比喩使わなきゃならないんだ

225 :デフォルトの名無しさん:03/04/20 02:05
>>212見たらコンテキストとコンテクストのどちらが日本語訳として正しいかを質問してるように見えるよ。

で、そんな単語だけ出されてもどんな"文脈"で使われてるかもわからないのに
どう答えればいいんだ。

226 :デフォルトの名無しさん:03/04/20 02:12
>>218
独語由来、仏語由来、英語由来つうのがあるのかもな

227 :デフォルトの名無しさん:03/04/20 02:44
じゃあ「デバイスコンテキスト」でもいいよ。
デバイスの何よ?

訳がjapaneseフレンドリーじゃないから
比喩つかって読まないと通じない。
原文ないからどうしようもないけど。

載ってたのはこれ。
「デザイン過程においてしばしば有益とされている
経験的知識や真理でも、個々のデザインにおいて、
そのコンテキストで評価が必要なものがある。」

ちなみに「デザイン過程」は「ソフトウエアの設計過程」と
脳内で置換えた。


228 :名無しさん:03/04/20 02:48
あちこちの板で山崎モナーのぬるぽが増殖しているが,
ここにはいないな。

229 :デフォルトの名無しさん:03/04/20 02:52
>>227
それなら直訳で事情、背景でも意味通るんじゃないか?「その状況で」とか。
まあ変な訳の本があることは珍しいことじゃないが、そもそもスレ違いだと思うのよ。
その文、全然C++の話じゃないじゃん。

230 :山崎渉:03/04/20 02:53
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

231 :デフォルトの名無しさん:03/04/20 02:57
デバイスコンテキストは無理に訳さなくてもいいと思うがなぁ

232 :デフォルトの名無しさん:03/04/20 03:03
たまたま文はすれ違いだけど
本はC++ベッタリなんだよ。

状況か。。いけるな。 thanx

233 :デフォルトの名無しさん:03/04/20 03:15
「昔から「役に立つよ」と言われていることでも、
今の状況に本当に役に立つのかどうか再確認すべきだよ」くらい。

234 :デフォルトの名無しさん:03/04/20 03:20
冷蔵庫に牛乳があたかもしれない。


235 :デフォルトの名無しさん:03/04/20 03:21
問1.「あたかも」を使って簡単な文章を作りなさい。

236 :デフォルトの名無しさん:03/04/20 03:26
今日食べた鯖にあたかもしれない(苦しい)

237 :山崎渉:03/04/20 03:32
   ∧_∧
  (  ^^ )< ぬるぽ(^^)

238 :デフォルトの名無しさん:03/04/20 03:41
>>235
「あたかも」とは(多く「似る」「如し」「よう」などの語をあとに伴って)
よく似ている物事にたとえる場合に用いる語です。

239 :デフォルトの名無しさん:03/04/20 04:02
class base;
class derived : public base;
base::base(){func();};
derived::derived() : base(){};

derivedはfunc()を継承時上書きしてるのですが、
derivedの生成時にbase::func()が呼ばれてしまいます。
derived::func()をよびだすにはどうしたらよいのでしょうか?

また、コンストラクタはなぜvirtualにできないのか教えてください。



240 :デフォルトの名無しさん:03/04/20 04:10
>>239
base::baseの時点ではまだderivedの初期化が完了していないので、
オブジェクトとして存在しない。つまり呼べない。
やりたいことを具体的に書いてくれれば、代替案は見いだせるかもしれないが。

もしコンストラクタがvirtualなクラスを書いた場合、
実際の型を誰がいつ決めるか、仮に決まったとして、
どうやってコンパイラにそれを伝えるか、考えてみな。

241 :デフォルトの名無しさん:03/04/20 04:57
メンバ関数の中で宣言したstatic変数って、同じクラスのオブジェクトの
間で共有されてしまいますよね?
これをオブジェクトの間で共有にならなくする事って出来ますか?

242 :デフォルトの名無しさん:03/04/20 05:04
>>241
メンバ変数にする。

243 :デフォルトの名無しさん:03/04/20 05:08
>>241
これまた阿呆な質問だ!

244 :bloom:03/04/20 05:08
http://www2.leverage.jp/start/

245 :デフォルトの名無しさん:03/04/20 11:22
>>227
糞訳の典型だね。

246 :デフォルトの名無しさん:03/04/20 11:45
まぁそういう時期だし。

247 :デフォルトの名無しさん:03/04/20 12:57
>>239
boost でそんなんあったよ。

<boost/utility.hpp>
boost::base_from_member
基底クラスより先にメンバ変数を初期化

うまくできるかどうかしらんけど。

248 :デフォルトの名無しさん:03/04/20 15:09
データの数によって配列の数を変えたいのですが、
string s2[n];
とすると、定数にしてくれってエラーがでます。
なにか方法はありますか?

249 :名無し:03/04/20 15:23
new

250 :248:03/04/20 15:27
>>249
ありがとうございました。

251 :デフォルトの名無しさん:03/04/20 16:04
>>249
なぜvectorを教えない!

252 :248:03/04/20 17:07
>>251
おお、ありがとう。みてみます。

253 :デフォルトの名無しさん:03/04/20 17:10
>>252
初心者はvectorなんか使ってはいけません

254 :デフォルトの名無しさん:03/04/20 17:12
>>253
newの方が初心者には危険だろ?

255 :248:03/04/20 18:02
vectorの
atメソッドがg++に無いということが書かれていました。
g++でも動くように、
v.at(3)=100;
を、
v[3]=100;
って書いていいということですか?
というかatメソッドは、意味無い?

256 :デフォルトの名無しさん:03/04/20 18:05
クラス定義の中で実装を書くと
明示的に inline って書かなくても
インラインになるの?

class hoge
{
public:
Hoge();
~Hoge();

void Method1(){ ... } //これインラインになる?
};

257 :デフォルトの名無しさん:03/04/20 18:17
いぇs

258 :デフォルトの名無しさん:03/04/20 18:18
>>255
意味はあるさ。オーバーインデックスした時、
atは例外を出すからデバッグしやすい。

>>256
普通はinline展開されない。VC++だと、コンパイルオプションで設定できた。

259 :tantei:03/04/20 18:18
★あなたのお悩み解決致します!!
●浮気素行調査
彼氏、彼女、妻、夫の浮気を調査致します!!
●別れさせ工作
あらゆる手段を使ってターゲットを別れさせます!!
●盗聴器盗撮機発見
あなたの部屋に誰かが仕掛けているかも!!
●行方調査
行方不明になっている家族の消息を調査致します!!
●電話番号から住所割り出し
一般電話、携帯から住所を割り出し致します!!
その他人生相談からどんなお悩みでも解決いたします!!
 直通  090−8505−3086
URL  http://www.h5.dion.ne.jp/~grobal/
メール  hentaimtt@k9.dion.ne.jp
   ■グローバル探偵事務所 



260 :248=255:03/04/20 18:27
>>258
わかりました。ありがとうございます。

261 :デフォルトの名無しさん:03/04/20 18:44
あるClassの中に、別のClass型変数を持つのって駄目?
継承して使うべきかな?

262 :デフォルトの名無しさん:03/04/20 18:52
>>258
>普通はinline展開されない。
え? 普通はされるだろ

263 :デフォルトの名無しさん:03/04/20 18:53
>>261
has-a を is-aに置き換えることは愚行

264 :デフォルトの名無しさん:03/04/20 18:56
>>261
effective-C++読んどけ。

265 :デフォルトの名無しさん:03/04/20 18:57
コンパイラは inline 化に積極的になってくれるが実際に inline 化
されるかどうかは Method の実装次第てとこだね

266 :デフォルトの名無しさん:03/04/20 18:59
>>258
でも、せっかくチェックしてくれるなら、例外なんか投げないで
abort()してくれればいいのに。
結局、STLportのデバッグモードとかの方が有難かったり。

267 :261:03/04/20 19:01
"has-a" "is-a" でぐぐってみたら

C++でプログラムを設計するということは、"is a”と"has a"の関係に分離し抽出することと考えることができる。
(ttp://toba.yanagi.gifu-u.ac.jp/lecture/prog2/11/)より

ということでした。
ありがとうございました。

でも置き換えるの意味がわかんないです。


268 :デフォルトの名無しさん:03/04/20 19:04
>>267

class Engine{};

class Car
{
Engine engine;
};

は正常。車はエンジンを持っている。

class Car : public Engine{};

は異常。車はエンジンではない。

269 :261:03/04/20 19:08
>>268
なるほど!かなりよく分かりました。
そのまんまのいみでしたね^^;

>>264
今度本屋で立ち読みしてきます。

ありがとうございました。



270 :デフォルトの名無しさん:03/04/20 19:31
class A;
.
.
.
class N;

A.m_classB.m_classC...m_classN.a = 1; (N回クラスが連結した先の変数aに代入している)
このような繋がりってあんまり多いと駄目ですよね。
最高どのぐらいが限界でしょうか?

271 :デフォルトの名無しさん:03/04/20 19:58
>>270
限界なんてものは無いが、クラスを使うということは、複雑な問題を分割・整理するのが目的なのに
外から内側が丸見えでは問題を複雑なままにしているので駄目だな。


272 :デフォルトの名無しさん:03/04/20 20:03
>>270
なるほど。そりゃそうですよね。
268の例みたいに
CarとEngineを"is-a"の関係で記述したときって
EngineをCarから操作できるようにするんですよね?
例えば、Car.GetEngineType(); とかのように。
Car.engine.GetType(); では駄目駄目だということですよね?


273 :デフォルトの名無しさん:03/04/20 20:36
>>272
まだよくわかってないんじゃない?
とりあえず、
Car.engine.GetType();
なんて、メンバ変数(この場合engine)が公開されてる
時点でおかしい


274 :デフォルトの名無しさん:03/04/20 20:56
悪い例がCar.engine.GetType(); で
Car.GetEngineType(); が良い例です。
これでも駄目ですか? engineは隠蔽されていると思うのですが・・

275 :デフォルトの名無しさん:03/04/20 21:02
Car.GetType(ENGINE);

276 :270:03/04/20 21:08
>>275
ENGINEは定数ですよね?
Carクラスの中で、定数ENGINEを定義して、それを公開するということですか。
GetEngineType(); と同じ気がするんですが・・・気のせいですか?
自分の無知さが恥ずかしいです。

277 :デフォルトの名無しさん:03/04/20 21:11
Carの定義もEngineの定義も見ずに良いとか悪いとか言ってる奴は信用できない。

278 :デフォルトの名無しさん:03/04/20 21:12
class Car{
public:
Engine &GetEngine(){ return engine; }
}

279 :デフォルトの名無しさん:03/04/20 21:20
まず、engine の型を外部から知る必要がある設計が駄目。
どうしても知る必要があるなら、>>274 の Car::GetEngineType() でいい。



280 :デフォルトの名無しさん:03/04/20 21:24
誤解を招いたかもしれませんが、
GetEngineType() とは型番とか、製造社とかを返すつもりで使いました。
例がとっさにうかばなかったもので・・・

281 :デフォルトの名無しさん:03/04/20 21:28
>まず、engine の型を外部から知る必要がある設計が駄目。
んなこたないよ。そんなの普通にあるだろ。

282 :デフォルトの名無しさん:03/04/20 21:28
>>280
その型番とか製造社を使って、
Carクラスの使用者は条件分岐したりするの?

283 :デフォルトの名無しさん:03/04/20 21:30
>>281
なにそれ。
if( car.GetEngineType() == HONDA ) {
car.アクセルを緩める();
} else {
car.アクセルは固定();
}
とか、こんなコード書くのか?

284 :270:03/04/20 21:35
>>282
そうですね。使うとしたら・・表示させたり、条件分岐とかですかね。
さきほど言いましたけど、
とっさに考えた例なので、使い道は考えていません^^;

285 :デフォルトの名無しさん:03/04/20 21:37
そもそもメンバ変数は公開/非公開どちらにすべき?って質問だよね。
"is-a"の話の流れで書いちゃってるけども、"is-a"の話とは関係ないよね。

286 :270:03/04/20 21:38
if(car.GetEngineType() == YAMAHA)
car.PointUp(1);
ヤマハのエンジンだったら評価を上げるっていう例です。
さっき思いつきましたが


287 :デフォルトの名無しさん:03/04/20 21:41
>>283
多態を使うべき場面っぽいですなー

288 :デフォルトの名無しさん:03/04/20 21:44
おまいらdynamic_cast知らんの?

289 :デフォルトの名無しさん:03/04/20 21:45
各々がいろんな場面想定して書いてるからまとまらないのな

290 :デフォルトの名無しさん:03/04/20 21:47
dynamic cast 知りません。
名前だけ知ってる・・・

291 :デフォルトの名無しさん:03/04/20 21:49
多態って?


292 :デフォルトの名無しさん:03/04/20 21:49
>>291
検索してくたたい。

293 :デフォルトの名無しさん:03/04/20 21:52
ごめん。多種・多様しかC++の特徴として覚えてなかった。
やっぱ一緒だった。タタイ?

294 :デフォルトの名無しさん:03/04/20 21:54
>>273 はおかしくない。


295 :デフォルトの名無しさん:03/04/20 22:05
ポインタを理解できないと
プログラムは組めないと言うよりアプリが作れない。
ポインタを理解するのに数年はかかると言われている。

本当のところ、どうなの?

296 :デフォルトの名無しさん:03/04/20 22:09
>>295
ポインタはすぐに理解できるよ。

297 :sage:03/04/20 22:11
アセンブラを習得したら完全に理解できるよ。
アセンブラ習得するのに、数年もかからんでしょ。

298 :デフォルトの名無しさん:03/04/20 22:12
>>295
たかがポインタに大げさだなあ

299 :デフォルトの名無しさん:03/04/20 22:20
>>298
関数ポインタはどんな場合に使うの?

300 :デフォルトの名無しさん:03/04/20 22:25
>>299
どの関数をコールするのかを、実行時に決める時に使う。
C++では、virtual関数やtemplateをうまく使えば使わなくてすむ。

つか、>>299よ、なぜ>>298に対して聞くんだ。


301 :デフォルトの名無しさん:03/04/20 22:26
"is-a"について質問ですが、
"手牌"と、"牌1つ"は"is-a"ですか?"has-a"ですか?(麻雀用語ですみません。)

class HAI{
private:
移動用クラス;
数値用クラス;
};
class TEHAI{
private:
HAI m_hai[14];
};

みたいにしたいんですが、
手牌の中には牌が14枚あるということから、"is-a"としたんですが・・
HAIクラスのメンバにTEHAIクラスからアクセスするのに長々と
TEHAI.GetHai(N番目).移動用クラス.ひっくりかえす(); みたいに書かないといけないですか?
まだよくわかってないみたいですか?
付け加えると、移動用クラスは、別のプログラムでも使えるようにと
汎用化したつもりなんですが。

長々とすみません。

302 :デフォルトの名無しさん:03/04/20 22:27
>>299
実装とインターフェイスの分離。多態(笑)
ってこれは概念も分からない人には少し早いんじゃないかな。

まずポインタの基本概念の理解の話なら、
自分の知識にあった説明さえ得られれば瞬時に理解できるんじゃないの。

C言語の複雑なポインタ式の知識は、あるに越したことないけどしっかり把握する
必要もあまりない(一般的に、複雑な式はバグの元なので避ける)

303 :デフォルトの名無しさん:03/04/20 22:28
>>299
>関数ポインタはどんな場合に使うの?
あれは、C++を使えない老人のオブジェクト指向ごっこ。
C++では使わない。その必要がない。

304 :デフォルトの名無しさん:03/04/20 22:30
>>300
298はポインタを理解してるとみた。
300は298ではないね。
信頼して聞いたんだよ。信頼と信用は違うけど。

305 :デフォルトの名無しさん:03/04/20 22:32
>>301
手牌は、特定のプレーヤーの管理下の牌の集合を保持したものである。

牌は、山に積むことができる。順番にツモって捨てられることができる。
鳴かれることができる。ドラ表示に使われることがある。

「手牌」は、「牌」の一種といえますか?
手牌は、「牌」の集合を所持するだけとしか思えませんが。

306 :デフォルトの名無しさん:03/04/20 22:36
>>303
必要がないわけじゃないよ。
関数メンバポインタがないからイベント通知にとても苦労してるよ。
overrideさせると切り替えが面倒だしそれ以外の解決法もぴったりのものはないからね。

307 :デフォルトの名無しさん:03/04/20 22:36
>関数ポインタ
WindowsならDLLからGetProcAddressするときに

308 :デフォルトの名無しさん:03/04/20 22:38
>>301
お前のコード、
「手牌 is a 牌」って表現してないだろ。
お前のコードは
「手配 has a 牌」っていうのを、14個分用意している。

自然言語に対する感覚をどうにかしろ。
そして is-a、has-aについて調べろ。

TEHAIクラスのpublicなメンバ関数は
”全部を引っくり返す”とか、
"手牌全部をみて、点数計算をする"とか、
"手配全部を見て、待ち牌をさがす"とか、

そういう、手配全部に対してアクセスする物と、

AddPai( class HAI* p ) // ツモ
removePai( int i ) // 牌を捨てる
とか、こんな感じで、手配の中の一牌をを
どうにかするメンバ関数の2種類を作れ。


あと、"移動用クラス"が何なのか知らねーが、
それは"引っくり返す関数"のなかでこっそり呼べ。

最後に、ストラテジーパターンについて学んでおけ。

309 :デフォルトの名無しさん:03/04/20 22:38
Templateがあるからvoid*は使わないって本当?

310 :デフォルトの名無しさん:03/04/20 22:38
ですよね!
でも長々と鎖をたどっていくのはいやなんですけど・・・スマートな
記述方法ってありませんか?


311 :デフォルトの名無しさん:03/04/20 22:39
>>309
ウソ。


312 :デフォルトの名無しさん:03/04/20 22:41
WNDCLASS 構造体に WndProc のポインタを設定したり
Enum〜 系の API にも関数ポインタ必要

313 :デフォルトの名無しさん:03/04/20 22:41
>>309
ホント。

314 :デフォルトの名無しさん:03/04/20 22:42
>>306
virtual関数使やいいだろ。
C++は多重継承を許す言語だぜ。


315 :デフォルトの名無しさん:03/04/20 22:42
>>309
ウソ。
template があってもなくても、void * は使わない。
template があってもなくても、マシンを直接アクセスしなきゃならないときは
void * を使わざるを得ないこともあるから、その場合だけ使う。


316 :デフォルトの名無しさん:03/04/20 22:45
>>308
ありがとうございます。
もう一度調べてみます。

317 :デフォルトの名無しさん:03/04/20 22:46
>>314
通知イベントが数十あって必要なものだけイベントハンドラ書いて
実行時にイベントハンドラ切り替えたりイベントハンドラ複数登録したり
とかはどうやってやる?

318 :デフォルトの名無しさん:03/04/20 22:46
>>310
std::for_each() 使えば?


319 :デフォルトの名無しさん:03/04/20 22:47
もともと、void *っていつ使われるんだろう。
mallocとかの返り値が void * だけど、
他にvoid *って使う価値がないような気がする。

"指しているオブジェクトが何か解らないポインタ"の使い道...
ん-...

>>315
マシンを直接アクセスするとき?void *がどう役に立つの?

320 :デフォルトの名無しさん:03/04/20 22:47
>>317
std::map<Event,Handler>じゃないの?

321 :デフォルトの名無しさん:03/04/20 22:49
>>319
memcpy使ったこと無いのか?

322 :デフォルトの名無しさん:03/04/20 22:53
>>321
ああ、そうか、memなんとか系のライブラリ関数では使われることがあるのか。
mallocもそうだけど、c++じゃあんまり使う機会がなさそうだな。void *


323 :デフォルトの名無しさん:03/04/20 22:54
>>322
うん。ほとんど使う機会がない。ガンガン使っているとしたら設計に問題があるかも。


324 :デフォルトの名無しさん:03/04/20 22:55
>>322
templateがあるからな。

325 :デフォルトの名無しさん:03/04/20 22:55
>>324
template は関係ない。


326 :デフォルトの名無しさん:03/04/20 22:58
>>320
やってみればわかるけど死ぬほど面倒だよそれ。

327 :デフォルトの名無しさん:03/04/20 23:00
>>317
Event - Listener モデル使えば?


328 :デフォルトの名無しさん:03/04/20 23:00
>>325
memcpyじゃなくてstd::copyを使うってことだと思うが、関係ないのか?

329 :デフォルトの名無しさん:03/04/20 23:02
>>317
たとえばイベントがn個あるなら、
class EventListener {
  virtual handleE_0() = 0;
  virtual handleE_n() = 0;
};
みたいなクラスを作って、イベントの影響を受けるクラスで、
これを実装しておけばいいだろ。


330 :320:03/04/20 23:02
>>326
どの辺が?

331 :デフォルトの名無しさん:03/04/20 23:03
>>319
知らず知らずのうちに使っているはず。
抽象化や隠蔽化する際にはとても重要だ。

たとえば、もしキミがGetModuleHandleを直接または間接に呼び出したとする。
ハイ、使いましたね。 → typedef void * HMODULE
でもGetModuleHandleを呼ぶとき、モジュール構造体がどうなっているかなんて
考えないでしょ?


たとえば、もしキミがCreateProcessを直接または間接に呼び出したとする。
ハイ、使いましたね。 → typedef void * HANDLE
でもCreateProcessを呼ぶとき、オブジェクト構造体がどうなっているかなんて
考えないでしょ?

たとえば、もしキミが...(以下省略)

いっぱいあるよ。


332 :デフォルトの名無しさん:03/04/20 23:04
#define STRICT

333 :デフォルトの名無しさん:03/04/20 23:08
memcpy??mem??????????
????????????????????????????????
???memcpy()?????????????
?????????????????????????????
memset()????"????????????????"????????????
???????

334 :デフォルトの名無しさん:03/04/20 23:08
>>328
std::copy を使っても、シーケンスの operator=() で memcpy が使われているかも
知れないし、std::copy を使わなくても、unsigned char * としてバイナリ・イメージを
コピーすることはできる。
ようは、void * と template とは関係がない。


335 :デフォルトの名無しさん:03/04/20 23:08
>>333
なんで?になってるの?

336 :デフォルトの名無しさん:03/04/20 23:09
>>331
Windowsに偏ってるのがイマイチだ。

337 :デフォルトの名無しさん:03/04/20 23:10
HMODULE や HANDLE がどう typedef されていても、関係のない話だね。


338 :333:03/04/20 23:11
うがー

339 :デフォルトの名無しさん:03/04/20 23:12
>>330
>329のようなクラスの定義・登録・呼び出し・スコープの制御もろもろ全部。
イベント通知・受信のメカニズムが全部むき出しだからとても煩雑になる。

340 :デフォルトの名無しさん:03/04/20 23:12
>>334
そうか?漏れがmemcpyを使わなくなった理由はstd::copyがあるからなんだが。
だいたい、「operator=() で memcpy が使われているかも知れない」からって、
void*を使ってることにはならんだろ。

341 :デフォルトの名無しさん:03/04/20 23:13
Cで使われるって前提なのもイマイチだ

342 :デフォルトの名無しさん:03/04/20 23:14
どうやら老人が紛れ込んだようだな。老人 == >>317

343 :デフォルトの名無しさん:03/04/20 23:15
C++使いにとって、Cで書かされることほど屈辱的なことはない。


344 :デフォルトの名無しさん:03/04/20 23:15
>>340
std::copy() が使えるってことは、= 演算子が使えるってことだよね。
なら、memcpy() なんて使わずに、ループでコピーしておけばいいんじゃない?
std::copy() が使えない C でもそれでいけるよ。


345 :301:03/04/20 23:15
>>308
"is-a" と "has-a"を間違って書いてました。

>「手配 has a 牌」っていうのを、14個分用意している。
これって駄目ですか?

>ストラテジーパターンについて学んでおけ。
なかなかインターネットで見つかりません^^;
googleで検索しても数件しかヒットしませんでした。
本屋で、デザインパターンについて調べたら見つかりそうですか?

移動用クラスってのは、行列をたくさん集めたやつです。
・回転用行列
・移動用行列
・拡大用行列
ってかんじです。
別に「牌クラス」に記述する必要はあまりないですね・・・
クラスの外に宣言してやってみます。


346 :デフォルトの名無しさん:03/04/20 23:17
>>331
CreateProcess() で得られたものと GetModuleHandle() で得られたものって、
同じようにアクセスしていいの?

つか、"抽象化"って言葉の意味や"隠蔽"の概念は知っているの?

347 :デフォルトの名無しさん:03/04/20 23:18
>>339はヴァカという結論で、よろしいか?

348 :デフォルトの名無しさん:03/04/20 23:20
>>347
MFCの解説でも読んで、自分が実装してる気になってんだろ。春だしな。

349 :デフォルトの名無しさん:03/04/20 23:20
Delphiならこんな議論は起こらないのに(ぼそっ)

350 :デフォルトの名無しさん:03/04/20 23:20
C++ではvoid*ってあまり使わないね、って話の時にWin32APIの話出されてもあまり説得力が・・・

351 :デフォルトの名無しさん:03/04/20 23:20
C#ならこんな議論は起こらないのに(ぼそっ)


352 :デフォルトの名無しさん:03/04/20 23:20
MFCなんて使う気にならないんですが、病気ですか?

353 :320:03/04/20 23:22
>>339
そういう話なら、mapを実装に使うクラスでラップすればいいだろ。

もとの話し見たら、「仮想関数あるから関数ポインタいらね」って話だったのね。
確かに、仮想関数だけじゃHandler型の実装には役不足だなぁ。
しかし、実装に使うにしても「関数ポインタ」が
表に現れないように実装するのがマナーだろうな。


354 :デフォルトの名無しさん:03/04/20 23:22
>>345
has-aで表現することは正しい。


355 :デフォルトの名無しさん:03/04/20 23:23
C++使いの皆さんに質問です。
MFCは"なんちゃってC++"なのはともかく、WTLはどう思いますか?
MFCよりもマシなC++の使い方してると思いますか?

356 :デフォルトの名無しさん:03/04/20 23:24
Win32 API は、非 OOPL からでも使えるように、クラスになっていないから void *
が出てきちゃったりするんだね。
C とかから API アクセスできなくてもいいんなら、Win32 API を OO で設計することが
できるから、void * なんて出てきやしないよ。

357 :デフォルトの名無しさん:03/04/20 23:27
OO で設計するときに、非 OO なライブラリとリンクしなきゃならないときに、
void * が出てくる可能性は高くなる。だって OO じゃないから。


358 :デフォルトの名無しさん:03/04/20 23:28
マシでもクソでもATL/WTLはCOM扱う時に楽だ


359 :デフォルトの名無しさん:03/04/20 23:29
COM 扱うなら、BCB の COM の取り込みで VCL コンポーネントにラップしちゃうのが
もっと楽だ。


360 :デフォルトの名無しさん:03/04/20 23:31
いや、COMは扱わなくて良いです。ただのWinアプリを作るライブラリとしてのATL/WTLで。

361 :デフォルトの名無しさん:03/04/20 23:31
データ構造を隠蔽化して機能をエクスポートするようなDLLを
作ったことがない達人気取りの厨房は、ママのおっぱいでも飲んで早く寝なさい。

...全く信じられんな、こいつらは。
どうせVBやDelphiで作っても大して変わらないようなGUIアプリしか
作ったことないんだろうな。...可哀想に。



合掌。



362 :デフォルトの名無しさん:03/04/20 23:31
もうGUIまわりはなんでもいいと思うのはまちがですか?

363 :デフォルトの名無しさん:03/04/20 23:33
>>361が何逝ってるかわからないのでつが。

364 :デフォルトの名無しさん:03/04/20 23:33
>>363
やっぱり厨房だな


合掌。

365 :340:03/04/20 23:33
>>344 なるほど、そうだな。

366 :デフォルトの名無しさん:03/04/20 23:34
DLLを作ったことがないのが達人?
DLLを作ったことがあるのが達人?

DLLを作るのって、そんなにすごいの?

367 :デフォルトの名無しさん:03/04/20 23:36
>>361
>> ...全く信じられんな、こいつらは。
>> どうせVBやDelphiで作っても大して変わらないようなGUIアプリしか
>> 作ったことないんだろうな。...可哀想に。

開発環境に強く依存するようなGUIアプリを開発すると幸せになれるんですか?




368 :デフォルトの名無しさん:03/04/20 23:36
DLLを作るのがすごいことだと思っている厨房です。

369 :デフォルトの名無しさん:03/04/20 23:36
>>366
全然すごくないが、少なくとも>>361の言うようなDLLを作るときには、
void*や関数ポインタがよく出てくる。

370 :デフォルトの名無しさん:03/04/20 23:37
>>366
単にDLLを作るだけならマニュアルを読む能力があるかどうかぐらい

371 :デフォルトの名無しさん:03/04/20 23:38
もひとつ言うと、たとえば、
>データ構造を隠蔽化して機能をエクスポートするようなDLL
なんだか覚えたての言葉を無理に使ってるようで、微妙に変だが、
「データ構造を隠蔽して機能をエクスポート」してないDLLってあるの?

ちょっといじめすぎちゃったかな、俺?

372 :デフォルトの名無しさん:03/04/20 23:38
大漁だ(藁

373 :デフォルトの名無しさん:03/04/20 23:38
>>371
変数dllexportしまくりなDLLとか(藁

374 :デフォルトの名無しさん:03/04/20 23:39
あ、>>363==>>366==>>371です。

375 :デフォルトの名無しさん:03/04/20 23:41
>>355の話題と混同したのかな?

376 :デフォルトの名無しさん:03/04/20 23:48
「C++は便利」という結論でよろしいか?

377 :デフォルトの名無しさん:03/04/20 23:51
「propertyとdelegateとdynamic class loadingがないので糞。
その不便さに気づいてない奴も糞。」という結論でよろしいか?

378 :デフォルトの名無しさん:03/04/20 23:52
君が去ってくれるなら、それでいいよ。

379 :デフォルトの名無しさん:03/04/20 23:53
もともとのDLLって、C++じゃなくてCを基準に作られてるだろ。
まずいのはDLLの仕様であってC++ではないと思う。
ぼろが出るといやなんであんまり具体的には書かんが。

380 :デフォルトの名無しさん:03/04/20 23:55
>>301
http://member.nifty.ne.jp/yamazaki/doc/cpp_design_pattern.html#Strategy

381 :デフォルトの名無しさん:03/04/20 23:55
>>379
じゃあ俺がぼろを出す覚悟で代わりに書いてやるよ。

382 :デフォルトの名無しさん:03/04/20 23:56
>>353
Qtのsignal/slotなんてのは、関数ポインタへの回帰だと
思うが。クラス単位でなく、オブジェクト単位での関係
を表したい時は、やっぱり関数ポインタの方が直観的
だし、既存の継承階層をいじらずに済むだけ柔軟性も
高いと思う。

383 :デフォルトの名無しさん:03/04/21 00:02
仮にDLLをクラスをexportできるような仕様に変えられるとしても、
言語やコンパイラによる縛りが関数単体でexportしている現在より強く出てしまうのではないかなあ。
関数だけだと、呼びだし規約程度しか迷うところが無いけど、
クラスだと、VMTのレイアウトやnew/deleteの挙動を揃えないといけないから。

384 :デフォルトの名無しさん:03/04/21 00:04
>>383
COM はそうなっている。


385 :デフォルトの名無しさん:03/04/21 00:04
「VC++.NETに移行すれば万事解決」という結論でよろしいか?

386 :デフォルトの名無しさん:03/04/21 00:04
>>383
その new や delete の、クラスごとに異なる部分って言うのは、
どこに揃えられると期待してますか?

387 :デフォルトの名無しさん:03/04/21 00:08
>>383
エクスポートされたクラスのユーザが、そのクラスのVMTのレイアウトまで
知る必要があるの?
COMを使うのってそんなに大変?

388 :デフォルトの名無しさん:03/04/21 00:09
最後の1文は>>384へ。

389 :デフォルトの名無しさん:03/04/21 00:10
>>386
Windows ならこれで OK。

template<class T>
class myallocator<T> {
IMalloc *pMalloc;
public:
myallocator() { CoGetMalloc(&pMalloc); }
~myallocator() { pMalloc->Release(); }

allocate(...) { return pMalloc->Alloc(...); }
deaclloacte(...) { pMalloc->Free(...); }
};


390 :デフォルトの名無しさん:03/04/21 00:11
>>387
大丈夫です。Windows 上の VTABLE は事実上 COM 規格で統一されています。

391 :デフォルトの名無しさん:03/04/21 00:17
>>390
GNAT(gccのAda)のVTABLEは、少しずれる(先頭に8バイトのメタクラス情報が入る)ので、
直接COMを使えませんでした…。
(C++と関係無い話でごめん)

392 :デフォルトの名無しさん:03/04/21 00:18
>>391
こんな感じですかね。
http://www.tietew.jp/cppll/archive/1907


393 :デフォルトの名無しさん:03/04/21 00:22
>>386
Xerces-C の XMLString::release() の実装を見ればわかりますよ。


394 :デフォルトの名無しさん:03/04/21 00:22
>>389
コピーしたらあぼーん。

395 :デフォルトの名無しさん:03/04/21 00:22
>>392
そうそう。(探してた情報が…サンクス)
あれ?ということは、Adaに限らずgccを使った場合はC++もダメ?

396 :デフォルトの名無しさん:03/04/21 00:22
おまえら、Tietewタソのコピペを、あたかも自分で考えたかのように語るのは勘弁してくだちい。

そんくらいにしとかないとぶっ殺しますよ。




つか、最低限、引用しろやコピペ野郎。その上、わざわざageで? 馬鹿じゃねえの?

397 :デフォルトの名無しさん:03/04/21 00:30
>>395
だめですね。

398 :デフォルトの名無しさん:03/04/21 00:30
>>396
名無しに名無しで何言ってんだ。
「おまえら」ってことはコピペが複数あんのか?どれがコピペ?
自分で考えたかのように語って誰かが得したり損したりするほどの内容は見当たらないが。

本人が「見て見て〜」ってageで書いてたりしたら面白いな。

399 :デフォルトの名無しさん:03/04/21 00:32
>>398
ネタにネタレスカコワルイ!

400 :デフォルトの名無しさん:03/04/21 00:36
誰かがMINGW32でDirectXを使っていたような…
lpDirectDraw->lpVtbl->Release(lpDirectDraw);とかやっていたのだろうか




401 :◆TJ9qoWuqvA :03/04/21 05:27
.

402 :デフォルトの名無しさん:03/04/21 08:41



      このスレは終了しました。





403 :デフォルトの名無しさん:03/04/22 14:01
C++が非手続型言語といわれる意味がわからない。
Cが手続型言語といわれる意味はなんとなくわかる。
だけど俺にはC++ってのはCにクラス機能が付いた程度にしか
思えないので、どうしてそれが非手続型なのかがわからない。

どなたかわかりやすく教えてくれろ。

404 :デフォルトの名無しさん:03/04/22 15:26
>>403
> C++が非手続型言語といわれる意味がわからない。
どこに書いてあるのでしょか

405 :デフォルトの名無しさん:03/04/22 16:12
>>403
とりあえず、憂鬱本でも読んどけ

406 :デフォルトの名無しさん:03/04/22 16:14
templateは関数型っぽいけど、基本的に手続き型じゃないの?
"非手続型"ってじゃあ何型なんだ

407 :デフォルトの名無しさん:03/04/22 16:23
>>400

IDirectDraw_Release(lpDirectDraw) みたいにマクロが用意されてる。


408 :デフォルトの名無しさん:03/04/22 16:42
>>403
それがわかったところでなにかうれしいことがあるかい?
漏れにはどうでもいいことだとしか思えないが

409 :デフォルトの名無しさん:03/04/22 17:01
>>408
死ね

410 :デフォルトの名無しさん:03/04/22 17:46
>>409
つうほうしといたよw
あーあww
死ねとか逝っちゃたねwww
ひろしにIP提出されてタイーホwwww
みじめだねーwwwww

411 :デフォルトの名無しさん:03/04/22 18:17
ひろし、って誰だよ。
さくらももこの父親か?

412 :デフォルトの名無しさん:03/04/22 19:18
ひろしかよ

413 :デフォルトの名無しさん:03/04/22 19:28
管理人っていうか、IPを見れる権限がある人の一人だよ。

414 :デフォルトの名無しさん:03/04/22 19:38
スーパーハカーキターーーーーーーーーーーーーーーーーーーー!!!!

415 :デフォルトの名無しさん:03/04/22 19:40
ハッシュテーブルは標準化されてないってホントですか?

416 :デフォルトの名無しさん:03/04/22 20:03
ぬるぽも標準化してください

417 :デフォルトの名無しさん:03/04/22 20:38
namespace std{

typedef NullPointerExeption Nullpo;

class ( ´∀`){
public:
 Nullpo* ぬるぽ(){
   return hammer_cast<Nullpo*>( ガッ );
 }
}

418 :デフォルトの名無しさん:03/04/22 22:14
唐突で申し訳無いけど、ちょっと質問。
今VC++でWin32のアプリを作っているんですが、その自身の中で、
「自分のファイルネーム」って、どうやって取得したらええんでしょうか。


419 :デフォルトの名無しさん:03/04/22 22:21
一番目のパラメータにNULLをセットし、モジュールの名前をゲットします。

420 :デフォルトの名無しさん:03/04/22 22:36
(´-`).。oO(というかVCスレかWin32APIスレで聞けよ‥‥
       ちなみにBCBだとApplication->ExeNameに入ってたり‥‥)

421 :418:03/04/22 22:41
>>419-420
そスね。失礼。

422 :デフォルトの名無しさん:03/04/23 19:52
変数から、その変数の型を取得することって出来ますか?

423 :デフォルトの名無しさん:03/04/23 19:58
>>422
typeidでgoogle


424 :422:03/04/23 20:37
>>423
ありがとうございます

425 :デフォルトの名無しさん:03/04/23 21:22
VisualC++6.0は-GXオプションをつけないと例外処理が有効にならないみたいなんですけど、
デフォルトで例外処理機構を有効にすると、なにか不都合なことがあるんでしょうか。
最適化の妨げになるとか・・・

426 :デフォルトの名無しさん:03/04/23 22:45
>>425
心配するな、お前が考えている「例外処理」は常に有効だ。

(なんでヘルプを読まんのか...。)

427 :デフォルトの名無しさん:03/04/23 22:56
>>426
cl /?とやっても-GXに関するヘルプは表示されないけど。

428 :デフォルトの名無しさん:03/04/23 22:57
/GXならでるけど、「enable C++ EH (same as /EHsc)」って何よ!? ExceptionHanler?

429 :デフォルトの名無しさん:03/04/23 23:02
しかたないからごみの山からMSDNライブラリを出してきて見てみた。

このオプションは、extern C 関数が例外をスローしないと想定して、同期例外処理を有効にします。これは、/EHsc と同じです。

はぁ・・・よくわかんね。

430 :デフォルトの名無しさん:03/04/23 23:09
>>427-428
-GXと/GXは同じだ馬鹿

431 :デフォルトの名無しさん:03/04/23 23:37
>>429
よくわからないなら、まだお前には関係ないということだ。
そのままにしておくのが吉。

432 :デフォルトの名無しさん:03/04/23 23:38
-GXはうざい警告を消すためのものと覚えておけばいいね。


433 :デフォルトの名無しさん:03/04/24 00:41
/GundamX

434 :デフォルトの名無しさん:03/04/24 00:57
http://210.153.114.238/img-box/img20030423224051.jpg

435 :デフォルトの名無しさん:03/04/24 10:05
>>418
argv[0]


436 :デフォルトの名無しさん:03/04/24 10:47
http://210.153.114.238/img-box/img20030424082109.jpg
どうやって組めば良いですか??

437 :デフォルトの名無しさん:03/04/24 10:52
>>436
それで合ってる。問題ない。

438 :デフォルトの名無しさん:03/04/24 11:03
>>436は見てないけどあちこちにあるからきっとブラクラ

439 :デフォルトの名無しさん:03/04/24 11:09
>>438は押す事もできないヘタレの癖にあちこちで同じコメントしてる腰抜けインポ野郎

440 :デフォルトの名無しさん:03/04/24 11:10
>>436
むしろこっちが聞きたい
強いて点をつけるなら満点だよ 自信持て

441 :デフォルトの名無しさん:03/04/24 11:12
マルチのくせに偉そうだな(w

442 :デフォルトの名無しさん:03/04/24 11:19
>>441=マルチポスト

443 :デフォルトの名無しさん:03/04/24 11:29
>>436がマルチなんだからレスもマルチになるよ。当然。

444 :デフォルトの名無しさん:03/04/24 13:02
書き込み違反の例外ウィンドウが出てしまいます。
string s1="abcdefg123456789";
char *c1;
s1.copy(c1,6,0);
どうしてでしょう。
どうかよろしくお願いします。

445 :デフォルトの名無しさん:03/04/24 13:19
c1が何もさしてないじゃん

446 :444:03/04/24 13:54
>>445
レスありがとうございました。動くようになりました。

447 :デフォルトの名無しさん:03/04/24 18:18
質問ばかりですみません。
string s1="";
string s2="";
string vs1="abcdefg123456789";
char *c1;
c1 = (char *)s1.c_str();
vs1.copy(c1,6,0);
s2=s1;
s1のなかには"abcdef"が入っているのに、s2の中身は""です。
なぜなのでしょうか?

448 :デフォルトの名無しさん:03/04/24 18:24
>>447
なんでc_strがconst char*を返すのか考えろ。
s1.c_str()が返すポインタの先にたまたまメモリが確保されてただけの話。

449 :デフォルトの名無しさん:03/04/24 19:22
>>447
俺も前それやったが、
vs1.copyの行で、そういう風にコピーすると s1の領域(size)が変更されない
(しかも、s1文字列がNULLで終わるかどうかわからない)
ので、
s2=s1の行で最初に指定されたsizeの分しかコピーしない。
この場合だとNULL文字1文字分か、0文字しかコピーされないので
s2は""になる。


450 :447:03/04/24 19:45
>>448
レスありがとうございます。
亀レスすみません。長考してます。
>>449
なるほど。

451 :447:03/04/24 19:54
string s1="";
string s2="";
string vs1="abcdefg123456789";
int n=6;
char *c1=new char[n];
vs1.copy( c1,n,0);
s2=s1=c1;
これでできたみたい。これでいいのでしょうか。
ご迷惑をおかけいたしました。

452 :デフォルトの名無しさん:03/04/24 20:01
>>451
良いと言えば良いけど、何でそんなことする必要があるの?
substr使えばいいじゃん。

453 :447:03/04/24 20:02
そこまでいう理由はないだろ?

454 :デフォルトの名無しさん:03/04/24 20:05
別に言えとは言ってないがな。まぁ、がんがれ。

455 :447:03/04/24 20:08
>>452
うわ、そういうのあったのですね。しりませんでした。
>>453は、
私じゃないですよ。

456 :デフォルトの名無しさん:03/04/24 21:51
このスレにも粘着のなりすまし荒らしがいるな……

質問する人はトリップ付けた方がいいと思うよ
捨てトリップでかまわないので

457 :デフォルトの名無しさん:03/04/24 22:51
>>447
なぜ、char*を使う必要があるのか疑問なのだが?

458 :デフォルトの名無しさん:03/04/24 23:07
せっかくstring使ってるのにねえ

459 :447:03/04/25 11:41
レスありがとうございます。
>>457
copyメソッドの引数の型がchar*だったのでって単純な理由なのですが。
>>458
その文の意味はつまり、substrを使えばいいのにってことで理解すればいいですか?

460 :デフォルトの名無しさん:03/04/25 12:25
>>459
基本的に同種のコンテナなら、それをそのままコピーするメソッドがあるから
stringの場合char*を使う必要はないと思われ。

substr使わなくても
string vs1="abcdefg123456789";
string s1( vs1, 0, 6);


string s1= "";
string vs1="abcdefg123456789";
s1.assign( vs1, 0, 6);

でいいんじゃない?


ところで、char* を引数にとるAPIにstring入れる場合て
int size = 10;
string str(size);
hoge_API( const_cast<char*>(str.data()), str.size() );
とかって、やったりしてるんだけど、やっぱテンポラリな配列なりなんなり作成して
ポインタ代入したほうがよろしいのでしょうか?

461 :デフォルトの名無しさん:03/04/25 17:37
ぼくはいつもnoge_API((char*)s.c_str(),s.c_str())ですが、コンストポインタのキャスト後の動作に保障はないんっでしたっけ?

462 :デフォルトの名無しさん:03/04/25 20:55
有馬線

463 :デフォルトの名無しさん:03/04/25 22:32
class AAA {
private:
int m_a;

public:
Set(int a){ m_a = a; }
};

class BBB {
private:
AAA m_aaa;

public:
AAA GetAAA(){ return m_aaa; }
};

class CCC {
private:
BBB m_bbb[100];

public:
Insert(int i){ m_bbb[i].GetAAA().Set(100); }
};

464 :つづき:03/04/25 22:33
クラスCCCのInsert()関数を実行してもクラスCCCのメンバのm_bbb.m_aaa.m_a
の値が変わりません。なぜでしょう・・・
テストにクラス中のprivate:をpublic:に変えて、
直接代入してみましたところ、ちゃんと値が変わりました。
どこかが致命的に間違っていると思うのですが、グーグルでは調べきれなかったので
皆様の力を貸していただきたいです。お願いします。
(かなり簡単化したので、このプログラム自体にあまり意味はありません。)

465 :デフォルトの名無しさん:03/04/25 22:38
> AAA GetAAA(){ return m_aaa; }
コピーを返しているから。参照返せ。

466 :464:03/04/25 22:40
あ、なるほど・・・
ありがとうございました^^

467 :デフォルトの名無しさん:03/04/25 22:52
>>464
クラスのメンバにクラスのインスタンスは持たせないほうがいいと思うが・・・。
比較的小さいのならともかく、 operator= の実装がめんどくさそうな位
でかいクラスなら、ポインタもたしたほうがよくないか?


468 :464:03/04/25 23:00
>467
あまりわかりませんが、
class CCC {
private:
BBB *m_bbb;
};
こういう風にするんですか?
よろしくお願いします。



469 :467:03/04/25 23:46
実際の実装は
BBB *m_bbb;
としてコンストラクタで
CCC::CCC(int n)
{
m_bbb = new BBB[n];
}
としていますが。

470 :464:03/04/25 23:47
464でした。

471 :デフォルトの名無しさん:03/04/26 02:58
467とは別人だけど…

>>470
ちゃんとメモリリークの対策してればそれでよいと思う。
データを共有しても問題ないのなら、
参照回数計測を実装したポンタのラッパークラスのテンプレートを使うとベターかな。
場合にもよるけど。

472 :471:03/04/26 02:59
ポンタってなんだよ…
ポインタですた。

473 :デフォルトの名無しさん:03/04/26 03:00
ああ、突っ込もうと思ったのに

474 :デフォルトの名無しさん:03/04/26 03:07
ポンタって良い感じだな。

475 :デフォルトの名無しさん:03/04/26 07:59
「インターフェースの継承」はいいけど「実装の継承」はだめって、
C++ではどういうことなんでしょう。
それとも、これって、Javaマンセー厨のごたく?

476 :デフォルトの名無しさん:03/04/26 08:33
>>475
言語は関係ない話だろ。

477 :デフォルトの名無しさん:03/04/26 09:05
>>476
で、どーゆー話?

478 :デフォルトの名無しさん:03/04/26 09:27
こんなはなし。
http://www.microsoft.com/japan/msdn/library/ja/vbcn7/html/vaconWhenUseInheritance.asp
http://www.microsoft.com/japan/msdn/library/ja/vbcn7/html/vaconWhenToUseInterfaces.asp

479 :デフォルトの名無しさん:03/04/26 09:30
>>475
「実装の継承」はダメって云われたら
private 継承の立つ瀬が無いような気がする。

480 :470:03/04/26 11:14
>>471
もちろんデストラクタで、delete [] m_BBB; で開放しています。
>参照回数計測を実装したポインタのラッパークラスのテンプレートを使うとベターかな。
どんな利点がありますか?

481 :デフォルトの名無しさん:03/04/26 11:22
>>480
デストラクタで、delete [] m_BBB; で開放する必要が無くなる
コピーコンストラクタを特に書く必要が無くなる
代入演算子を特に書く必要が無くなる

他いろいろ

482 :デフォルトの名無しさん:03/04/26 11:33
>>480
具体的な例は「プログラミング言語C++第3版」のP347以降を読むといいよ。


483 :デフォルトの名無しさん:03/04/26 11:34
BCB6で
PNGの解凍をしてGraphics::TBitmapで利用できる形にしたいのですが
GLDPNGは使用条件の関連でアウトなんで
何か簡単な方法ってないでしょうか?
読み込みだけでいいんで・・・

SUSIEも考えたんですが別途SUSIEプラグイン用意しろっていうのも
なんなんで・・・

よろしくおねがいします

484 :デフォルトの名無しさん:03/04/26 11:48
ここはBCBスレじゃない。

485 :デフォルトの名無しさん:03/04/26 11:52
>>484
スマソ・・該当スレが見つかったんでそちらに移動します

486 :デフォルトの名無しさん:03/04/26 13:35
>>478
つーか、それVBだからじゃねーの?


487 :デフォルトの名無しさん:03/04/26 18:18
「実装の継承」がどうのって言ってるのは、Java廚かブビ廚だけ。
C++の言葉にはない。


と言っておこう。

488 :480:03/04/26 18:22
>>481,482
え、そんな便利なクラスがあるんですか・・・
作り方なんて載ってるHPなんてないですよね。
やっぱ本を買うしかないんですか。
親切にありがとうございました。

489 :デフォルトの名無しさん:03/04/26 18:28
>>488
boostを使うべし
ttp://www.boost.org
解説
ttp://www.kmonos.net/alang/boost/

490 :488:03/04/26 18:50
>>488
ありがとうございます。
やっぱり便利なものは世界の誰かが作ってるもんですね。
こういうライブラリって皆さん使ってるんですか?
ラッパークラスっていうぐらいだから、自分が作ったスーパークラスから
派生させたクラスだと思いました。

491 :デフォルトの名無しさん:03/04/26 19:18
C++最強のCSVライブラリって、プログラミング作法に
載ってる香具師でいいんですか?

492 :デフォルトの名無しさん:03/04/26 20:23
C++でC#のデリゲートに相当する機能って実現可ですか?

493 :デフォルトの名無しさん:03/04/26 20:27
可です。

494 :デフォルトの名無しさん:03/04/26 20:49
>>490
便利といえば便利だが、仕様をしらないで使ってるとはまるので気をつけるべし。

とりあえず、template、参照、継承あたりをきちんと理解してから使ったほうがいいと思われ。
あとは、キャストかな?
dynamic_cast,const_cast,static_cast,reintrupt_castとか大丈夫?

あと、stlが使えることが前提条件かな?

495 :デフォルトの名無しさん:03/04/26 20:54
> reintrupt_castとか大丈夫?
...大丈夫?

496 :デフォルトの名無しさん:03/04/26 20:59
>>495
再割り込みキャスト?

497 :494:03/04/26 21:02
reinterpret_castだね。
あんまつかわんから、大丈夫じゃねーや。
回線きって(略

498 :デフォルトの名無しさん:03/04/26 21:06
すいません。どなたかちょこっとおしえてください。
.NET Microsoft Framework SDK で、C言語のソースを
コンパイルする方法を教えてください。


499 :492:03/04/26 21:14
>>493
どうやればいいのかわかりませんがやってみます

ありがとうございます

500 :デフォルトの名無しさん:03/04/26 21:50
>>498
てきとーにパス通してDOS窓から
cl aiueo.c

>>499
boost::bind とか、あるいは std::mem_fun + std::bind1st とか。

501 :デフォルトの名無しさん:03/04/26 21:58
ボランドC++パソナルってコンパイラも入ってるんですか??

502 :デフォルトの名無しさん:03/04/26 22:02
>>501
何だい、それは?
フリーの Borland C++ Compiler のこと?


503 :デフォルトの名無しさん:03/04/26 22:05
コンパイラのない開発環境ってなんだ?
インタプリタ?
フロントエンド?

504 :デフォルトの名無しさん:03/04/26 22:05
C++Builder 6 Personalですた

505 :デフォルトの名無しさん:03/04/26 22:07
>>503
RPGツクール

506 :デフォルトの名無しさん:03/04/26 22:08
>>504
そのものがコンパイラ。


507 :デフォルトの名無しさん:03/04/26 22:39
>>479
アホな質問で悪いが、private継承ってどんなときに使えばいい?


508 :490:03/04/26 23:00
>>494
わかりました。ちゃんと理解してから使いますね。
今作ってるゲームが、C++をちゃんと勉強した後に再度作ると
どれだけちゃんとしたゲームになるかが楽しみです。

509 :デフォルトの名無しさん:03/04/26 23:10
>>507
親の顔を絶対に人に知られたくないとき。

510 :デフォルトの名無しさん:03/04/27 00:15
>>492
似たような機能は関数ポインタ使えば出来る。
ただ、インスタンスメソッドに対してデリゲートと同じようなことしようと思うとかなり面倒。
一応、関数オブジェクトを作れば可能だけど。


511 :デフォルトの名無しさん:03/04/27 00:29
boost::functionがあるから大丈夫。

512 :デフォルトの名無しさん:03/04/27 00:35
なぜ素直に「できませんごめんなさい」の一言が言えないんだ?

513 :デフォルトの名無しさん:03/04/27 00:46
>>512 何の話?

514 :名無し:03/04/27 01:05
C#厨がいるな

515 : :03/04/27 01:18
delegate 委譲ってよく分からんな。Factory????

516 :デフォルトの名無しさん:03/04/27 01:20
class B
{
protected:
 int n;
};
class D : public B
{
public:
 D( B const& rhs )
 {
  n = 1;// ok
  n = rhs.n;// error
 }
};
↑のようなアクセスがエラーになります。
自分のn(this->n)にはアクセスできるのに、
他のインスタンスのn(rhs.n)にはアクセスできないということでしょうか?

ちなみに、cygwinのgcc3.2で、エラーメッセージは
: In constructor `D::D(const B&)':
:4: `int B::n' is protected
:12: within this context
となります。

517 :デフォルトの名無しさん:03/04/27 01:21
>>515
C#ではシグネチャの一致するメソッドを変数のように扱える仕組み?
じゃなかったか


518 :デフォルトの名無しさん:03/04/27 01:25
C#のdelegateは
C++BuilderとかVC7のpropertyと何か違うの?

519 :よねちん。:03/04/27 01:30
クラス配列の初期亜k子について

class Slave{
public:
Slave(int in);
};

class Master{
private:
class Slave salve[10];
public:
Master() : ???? {};
// ↑ここでslaveクラス配列のコンストラクタに引数を渡したい
};

initializeでSLAVEクラスを初期化したいときは、
どのように記述したらいいんでつか??


520 :よねちん。:03/04/27 01:31
↑初期化子ね。
initilizerでつ。


521 :デフォルトの名無しさん:03/04/27 01:31
>>519
できない。

コピーできるクラスなら、vector使えばいいかもしれない。

522 :デフォルトの名無しさん:03/04/27 01:33
>>519
ポインタの配列にしてひとつづつ初期化するしか

523 :デフォルトの名無しさん:03/04/27 01:36
>>519
ttp://www.parashift.com/c++-faq-lite/ctors.html#faq-10.5

524 :よねちん。:03/04/27 01:40
>>521-523サンクス
見てみまつ。


525 :デフォルトの名無しさん:03/04/27 01:54
>>516
Bのnはprotectedだから。
仮にDと共通の先祖を持つ
class Z ; public B
{
}
があって
DのコンストラクタにZを渡すとき、DがZのnにアクセスできちゃマズーでしょ?

526 :516:03/04/27 02:02
んー?
うーん、そうかぁ。そうだなぁ。

やっぱ中途半端はよくないな。
protectedイラネ。

527 :デフォルトの名無しさん:03/04/27 02:04
なんでアクセスレベルを指定するキーワードはみなpから始まる単語ばかりなの?

528 :( ´Д`)/< 先生!!こんなのが有りますた。:03/04/27 02:04
http://www.yamazaki.90.kg/hankaku/hankaku07.html
http://www.yamazaki.90.kg/zenkaku/index.html
http://www.yamazaki.90.kg/hankaku/hankaku08.html
http://yamazaki.90.kg/hankaku/hankaku10.html
http://www.yamazaki.90.kg/hankaku/hankaku01.html
http://yamazaki.90.kg/hankaku/hankaku03.html
http://www.yamazaki.90.kg/hankaku/hankaku02.html
http://yamazaki.90.kg/hankaku/hankaku09.html
http://www.yamazaki.90.kg/hankaku/hankaku06.html
http://yamazaki.90.kg/hankaku/hankaku04.html
http://www.yamazaki.90.kg/zenkaku/index.html
http://www.yamazaki.90.kg/hankaku/hankaku05.html

529 :デフォルトの名無しさん:03/04/27 02:48
publicファンクションの一部だけしか見えて欲しくないと思って以下のようにしてみました。

class A {
public:
 void func1();
 void func2();
}

class AExcuter {
private:
 A* a;
public:
 AExcuter( A* _a ) : a(_a) {}
 void func1() { a->func1(); }
}

Aの所有者以外は AExcuter を渡してスッキリとしたいのですが,なんか鬱陶しいんです。
こういうことしますか?


530 :デフォルトの名無しさん:03/04/27 02:53
「publicファンクションの一部だけ」をインターフェースにわけるのはダメか?

531 :529:03/04/27 03:07
>>530
class A1 {
 virtual void func1() = 0
}
class A : public A1 {
public:
 void func1();
 void func2();
}

A a;
A1* pa = a;
ってことかな。このキャストはどうなんだろう。
とりあえず実行は出来ました。
勉強してきます。どうも。

532 :デフォルトの名無しさん:03/04/27 03:12
カンマ演算子のオーバーロードって何に使うんですか

533 :デフォルトの名無しさん:03/04/27 03:14
何に使うのかは自分で決める。それが演算子の多重定義。

534 :529:03/04/27 03:20
アップキャストと言うそうで。dynamic_castもいらないとのこと。<基本でつね・・・
多重継承とインターフェースっていろいろ組み合わせられて便利でしょ
くらいにしか思ってなかったので感激です。

535 :デフォルトの名無しさん:03/04/27 03:20
そして一見C++には見えない変態的なソースが出来上がると。


536 :デフォルトの名無しさん:03/04/27 04:13
>>535 例きぼんぬ。

537 :デフォルトの名無しさん:03/04/27 04:19
演算子の定義によっては

cout << boost::format("%1% %2%") % "hello" % 100 << endl;
こんなのとか

std::list<int> hoge;
enum_start(hoge), 1, 2, 3, 4, 5, enum_end();

こんな書き方までできちゃうということかなぁ?



538 : :03/04/27 07:36
>>537
やっぱ演算子の多重定義って嬉々として使うもんじゃないのでは
ないかと。

複素数の四則演算やデバッグ用の << とか以外だとどんな使い方
が定番なのかな。まず業務系ではお目にかからないもので。

539 :デフォルトの名無しさん:03/04/27 08:22
きっき、きっき、地球の危機!


540 :デフォルトの名無しさん:03/04/27 08:48
>enum_start(hoge), 1, 2, 3, 4, 5, enum_end();
代入するより楽なとこがイイ。

541 :r:03/04/27 09:33
こんなのは?
class ExceptionThrower {
    int r_,s_;
public:
    ExceptionThrower(int r) : r_(r) {}
    operator =(int r) {
        if( ( s_ = r ) != r_ )
            throw std::exception();
    }
};

// intを返すAPIとかを多用する時に使う。
void foo() {
    ExceptionThrower ret( 0 );
    ret = int_return_API();
}
// 代入演算子は、結構優先順位が低いから。

542 :デフォルトの名無しさん:03/04/27 09:34
>enum_start(hoge), 1, 2, 3, 4, 5, enum_end();

便利そうじゃねーか
boostに入ってるの?

543 :デフォルトの名無しさん:03/04/27 09:34
>>538
配列っぽいオブジェクトの [] とか関数っぽいオブジェクトの () とか
ポインタっぽいオブジェクトの *, -> も定番だろう。

>>536
for_each( v.begin(), v.end(), cout << _1 << '\n' );
とか?

544 :デフォルトの名無しさん:03/04/27 09:36
newも欧婆老怒できるよ。

545 :デフォルトの名無しさん:03/04/27 09:41
>>542
http://www.tietew.jp/cppll/archive/364
http://www.cs.auc.dk/%7Enesotto/init/
http://www.kmonos.net/alang/klx/
らへん。boostのMLで話題になったこともあるけど結局流れてたような。

546 :デフォルトの名無しさん:03/04/27 13:20
どなたかちょこっと教えてください。
.NET Frawork Microsoft SDK で、C++を
コンパイル・実行したいのですが、
拡張子とコンパイルコマンドを教えてください。

547 :デフォルトの名無しさん:03/04/27 13:23
>>546
もしもVS6.0と同じなら、.cpp cl.exe

548 :デフォルトの名無しさん:03/04/27 13:54
>>546
(´-`).。oO(どーでもいいが、.NET SDKのやつはiostreamとかついてないぞ‥‥)
(´-`).。oO(stdioとかはあるけどね‥‥)

549 :デフォルトの名無しさん:03/04/27 14:02
>>548
C++というよりC?

550 :デフォルトの名無しさん:03/04/27 14:04
stlportでも拾ってきて入れればOK。多分。

551 :デフォルトの名無しさん:03/04/27 15:13
どなたかちょこっと教えてください。
.NET Frawork Microsoft SDK で、C++を
コンパイル・実行したいのですが、
拡張子とコンパイルコマンドを教えてください。

552 :デフォルトの名無しさん:03/04/27 15:41
荒らすな死者布厨

553 :デフォルトの名無しさん:03/04/27 17:46
struct X { int a,b,c; float d,e,f; std::vector<int> g,h,i,j; };
こんな(いろんな型が並んでいる)構造体について、
bool operator < ( X const& lhs , X const& rhs );
をa,b,c,d,...の順で辞書順として定義したいのですが、
return lhs.a < rhs.b || ( !( lhs.a < rhs.a ) && ( lhs.b < rhs.b || ( ! ....
となって、括弧がどんどん深くなってしまいます。

現状は、この書き方でものすごいソースになってしまっているのですが、
もっと綺麗な書き方はないでしょうか?

554 :デフォルトの名無しさん:03/04/27 18:19
>>553
普通に...
if(lhs.a != rhs.a) return lhs.a < rhs.a;
if(lhs.b != rhs.b) return lhs.b < rhs.b;
if(lhs.c != rhs.c) return lhs.c < rhs.c;
...
じゃダメなのか ?

555 : :03/04/27 21:47
>>541
うーん、俺の周りではあまり使わないですね。そもそも例外処理
自体を理解している人がいない (俺も含めて) ので、普通に
int にステータス割り当てて値を返すコーディングがほとんどです。

>>543
そうか! 確かに [] は使いますね。漏れはこういうのを定義する側
というより、すでに定義されているクラスライブラリを使う側ですけ
ど。

556 :553:03/04/28 00:44
>>554
operator < だけ使う、ということにしたいのです。

書き方とは別件だけど、operator != 使ったほうが効率はいいのかな?
おしえて、えろい人。

557 :デフォルトの名無しさん:03/04/28 01:08
>>556
> operator < だけ使う、ということにしたいのです。

それ無理じゃん。

struct X { int a, b; };

の場合でいいから、あんたの書き方で書いてみなよ。

558 :553:03/04/28 01:18
>>557
bool operator < ( X const& lhs , X const& rhs )
{
 return lhs.a < rhs.a || ( !( rhs.a < lhs.a ) && lhs.b < rhs.b );
}


559 :デフォルトの名無しさん:03/04/28 01:45
>>553
http://cvs.sourceforge.net/cgi-bin/viewcvs.cgi/boost-sandbox/boost-sandbox/boost/utility/lexicographic.hpp?rev=HEAD&content-type=text/vnd.viewcvs-markup

return lexicographic( lhs.a, rhs.a )( lhs.b, rhs.b )( lhs.c, rhs.c )( lhs.d, rhs.d ) ...;

当然ショートサーキット評価はされないので注意が必要なこともある。

560 :559:03/04/28 01:47
いや、return lexicographic::minus == lexi...()()()().result(); か。

561 :553:03/04/28 02:12
>>559
ふーむ。そんなものが作られてるってことは、
道具無しで綺麗に書くのはどうやらできないみたいですねぇ。

結構最近できた奴みたいですな。
リリースされてたら使うところだけども、
今回は気合のソースとコメントで見送っとこう。

ありがとうございました。

562 :559:03/04/28 02:30
>>561
あるいはマクロが嫌いでなけりゃ
#define COMPARE_BY(X) if(lhs.X<rhs.X) return true; if(rhs.X<lhs.X) return false
 COMPARE_BY( a );
 COMPARE_BY( b );
 COMPARE_BY( c );
 ...
 COMPARE_BY( z );
 return false;
#undef COMPARE_BY
とかどーよ。

563 :553:03/04/28 02:42
>>562
マクロは嫌いだけど、便利に使って#undefするなら問題なし。
そっか、operator < の定義なら途中でreturnも問題ないし、それがいーな。
重ね重ね、ありがとうです。

564 :デフォルトの名無しさん:03/04/28 03:02
UnWindResume ってなに?

565 :デフォルトの名無しさん:03/04/28 08:14
>>553
三項演算子は?

566 :553:03/04/28 13:22
>>565
ん?どうつかったらいいの?

567 :デフォルトの名無しさん:03/04/28 23:39
下記のような状況でvalue_==target_valueの要素のiteratorを得たいのですが、
どうするのがよいですか?

typedef boost::shared_ptr<hoge> HogeSharedPtr;

class hoge
{
 int value_;
public:
 int GetValue() const { return value_; }
 void SetValue(int value) { value_ = value; } 
}

void main()
{
 vector<HogeSharedPtr> hoges;
 for(int i=0; i<50; i++)
 {
  HogeSharedPtr p = HogeSharedPtr(new hoge());
  foo->SetValue(i);
  hoges.push_back(p);
 }
 
 int target_value = 27;

 
 vector<HogeSharedPtr>::iterator it = ????????????????????????
}



568 :567:03/04/28 23:39
下記のような方法は分かるのですが、
値1個取り出すのにファンクタ作るのも面倒だし汚い気がするので、
ファンクタクラスを作らずにできるだけboost無しでも出来る方法を教えて下さい。

class HogeValueCompare
{
 int value_;
public:
 inline HogeValueCompare(int value) { value_ = value; }
 inline bool operator() (boost::shared_ptr<hoge> a)
 {
  return a->GetValue() == value_;
 }
};

vector<HogeSharedPtr>::iterator it = std::find_if(
  hoges.begin(), hoges.end(), HogeValueCompare(target_value));


569 :デフォルトの名無しさん:03/04/28 23:49
vector<HogeSharedPtr>::iterator it = hoges.begin();
while( it != hoges.end() && (*it)->GetValue() != target_value ) ++it;

570 :デフォルトの名無しさん:03/04/28 23:52
>>569
ループ回すのは良くないとかEffectiveSTLに書いてあるので…
bind1st,bind2nd,equal_to,mem_funあたりでなんとか出来ない物でしょうか?

571 :デフォルトの名無しさん:03/04/28 23:55
具体的には、
vector<HogeSharedPtr>::iterator it = std::find_if(
  hoges.begin(), hoges.end(), equal_to(mem_fun(&hoge::GetValue), target_value)
みたいな感じでできないか知りたいのです。これはコンパイル通りませんが。

572 :569:03/04/28 23:57
>>570
> ループ回すのは良くないとかEffectiveSTLに書いてある

書いてあるのを理由にしてるのか?本質を見るのを忘れるなよ。

> bind1st,bind2nd,equal_to,mem_funあたりでなんとか出来ない物でしょうか?

望みの動作には関数の合成が必要。標準には無い。
shared_ptr使っといてboost無しってのもおかしな話だな。

573 :デフォルトの名無しさん:03/04/29 00:02
>>572
ありがとうございます。
boostのcomposeあたりを使うのですよね。
shared_ptrは使ってる人が多いイメージがあるんですが、
composeはほとんど使っている人がいないし、
使うだけでノーマルなC++から離れていくイメージがあったので…
やはりcompose無しでは無理ですか。分かりました。

574 :デフォルトの名無しさん:03/04/29 03:01
Visual C++.NETで下の定義がどっちも通らないんですけど、

class Hoge {
public:
  static const void* NURUPO = 0;
  static const double PI = 3.141592653589793238462;
};

これは言語自体の制限なんでしょうか? それともVC++の制限?

マクロで定数を定義するのは非推奨らしいので、
普通にこれがヘッダで通ってマクロ同様に展開してくれないと不便だと思うんですが。

575 :デフォルトの名無しさん:03/04/29 03:05
>>574
VC++のバグだから安心して良いよ。

576 :デフォルトの名無しさん:03/04/29 03:18
>>574
まあ
class Hoge {
public:
  static const void* NURUPO;
  static const double PI;
};
const void* Hoge::NURUPO = 0;
const double Hoge::PI = 3.141592653589793238462;
なら通ると思うけど、不便だあね

577 :デフォルトの名無しさん:03/04/29 05:14
静的メンバの初期化が可能なのは
static const int だけじゃなかった?

578 :577:03/04/29 05:16
>静的メンバの初期化
ブロック内での静的メンバの初期化

579 :デフォルトの名無しさん:03/04/29 05:27
>>577
bool
char
wchar_t
符号有り無しの整数型
enum型

なので、>>575は間違い。

580 :577:03/04/29 05:42
>>579
さんくす。規格の 'const integral' を int と脳内補正して読んでいた。

581 :575:03/04/30 03:58
>>579
そうだったのか。しらなんだ。thx。

582 :デフォルトの名無しさん:03/04/30 12:39
newで確保した領域は、その関数が終わったら自動的に開放されるのでしょうか?
それとも、deleteするまで開放されないのでしょうか?
よろしくお願いします。

583 :デフォルトの名無しさん:03/04/30 12:43
関数を抜けたら消えてしまうのであれば使い物にならない。

584 :582:03/04/30 13:15
>>583
つまり、確保した領域を指すポインタを受け取れば、
newがあった関数がなくなってもその領域を利用できるというわけですね。
そのポインタを使って、他の関数からdeleteもできるのですね。
ありがとうございました。

585 :デフォルトの名無しさん:03/04/30 13:20
>>582
(´-`);y=~~ .。oO(mallocとfree考えりゃ当然そうなるだろ‥‥)

586 :デフォルトの名無しさん:03/04/30 13:23
>>585
そのセミコロンは何?

587 :585:03/04/30 13:29
カチャ ;y=-(゚д゚) ・: ターン

588 :デフォルトの名無しさん:03/04/30 13:34
MSVC++6.0使用中なのですが、DLしたソースをコンパイルしようとしても、
「インクルードファイル「stdafx.h」がありません」エラーが出ます。
で、こいつについて調べ、プリコンパイル済ヘッダってコトまではわかったのですが、
どの資料を見ても、「自動で生成される」と、書いてありました。

で、VC++の設定いじってみて、「プリコンパイル済ヘッダを使用」にチェックも入れてみたのですが、コンパイルできません…
どなたか、対処法を教授ください…

589 :デフォルトの名無しさん:03/04/30 13:44
>>588
http://pc2.2ch.net/test/read.cgi/tech/1048698321/

590 :588:03/04/30 13:48
>>589
スレ違いだったんですね…ごめんなさい。
さっそく逝ってきます…

591 :デフォルトの名無しさん:03/04/30 22:02
すでにあるファイルを上書きしたくないとき、そのファイルがあるかどうか、
どうやって調べるんでしょう。

592 :デフォルトの名無しさん:03/04/30 22:09
>>591
ふつーに

if(fopen("hoge.txt","r")){
 puts("ファイルが存在しますYO!");
}

じゃいかんのか?

593 :デフォルトの名無しさん:03/04/30 22:13
>>591
Win32なら
GetFileAttributesの戻り血を調べるとかね

594 :デフォルトの名無しさん:03/04/30 22:16
template<typename X, typename Y> class A{
public:
void func(void);
};
template<typename X, typename Y> void A<X,Y>::func(void){}
template<typename X> void A<X,char>::func(void){}
template<typename X> void A<X,double>::func(void){}
の様な部分特殊化って出来ないの?

595 :デフォルトの名無しさん:03/04/30 22:39
できないな


596 :デフォルトの名無しさん:03/04/30 23:00
テンプレート使えねー。ププププ

597 :594:03/04/30 23:20
・゚・(ノД`)・゚・

598 :LogWindow:03/04/30 23:56
C++の関数テンプレートの部分特殊化不可の攻撃!
594はC++の前でしくしくと泣き出した!

599 :デフォルトの名無しさん:03/04/30 23:57
僕にもC言語できるかな

600 :デフォルトの名無しさん:03/05/01 00:03
>>596
かわいそうに。使いこなせないのか

601 :594:03/05/01 00:11
Modern C++ Design p.30に書かれていることですね?

602 :デフォルトの名無しさん:03/05/01 03:15
これからCで何かちょっとしたもの作りたいんですが
どの開発環境使うと良いですか?
あんま金ないのでBorland の1万のヤツ買おうかと思ってますが、、

603 :デフォルトの名無しさん:03/05/01 04:34
>>602
おまえはハゲだ

604 :デフォルトの名無しさん:03/05/01 15:44
クラススコープ内で有効な定数(int以外)を定義したいんだけど
なんかいい方法ある?

605 :デフォルトの名無しさん:03/05/01 15:51
class aaaa{
#define CONSTANT 1.2345
....
#undef CONSTANT
};


606 :604:03/05/01 15:56
>>605
それじゃクラス宣言中しか使えないじゃないですか。

607 :デフォルトの名無しさん:03/05/01 15:57
>>602
Cもいいけど最強の開発環境Delphiはいかが。
ただなのでお金が無くても問題ありません。

http://www.borland.co.jp/delphi/personal/

608 :デフォルトの名無しさん:03/05/01 16:02
>>604
「constは定数か否か論争」をやりたい、ってことでつか?

609 :デフォルトの名無しさん:03/05/01 16:03
class aaaa{
static const double bbbb;
};

610 :604:03/05/01 16:09
>>608
論争はどうでもいいです。
定数っぽく認識できて書き換え不可でデバッガで読めれば何でもいいです。
constで出来るかなと思ってやってみたらうまくいかなかったんで。

611 :デフォルトの名無しさん:03/05/01 16:11
enum { concon = 0.1 };

612 :デフォルトの名無しさん:03/05/01 16:12
これじゃだめなのか?
class Hoge {
 const double PI_;
public:
 Hoge() : PI_(3.14) {}
};

613 :604:03/05/01 16:13
あー、
class aaaa{
static const double bbbb;
};
const double aaaa::bbbb = 100.0;

で出来た。定義部の方でstaticつけてたらエラー出たんでダメだと思ってた。
みんなスマソ。

614 :デフォルトの名無しさん:03/05/01 23:32
cat > hoge.cpp ; g++ -O2 hoge.cpp ; du -b a.exe
#include <iostream>
int main() { std::cout << "hello, world." << std::endl; return 0; }
448506 a.exe

cat > hoge.cpp ; g++ -O2 hoge.cpp ; du -b a.exe
#include <stdio.h>
int main() { ::printf("hello, world.\n"); return 0; }
19221 a.exe

なんで iostream 使うとサイズが数十倍になりますか?

615 :デフォルトの名無しさん:03/05/01 23:41
>>614
Localeとかゴニョゴニョあって大変なのよiostreamの中の人は。

616 :デフォルトの名無しさん:03/05/02 00:24
>>614
はぁ? おまえは逆転の発想もできないのか?

iostreamを使うだけで量が数十倍も増えるなんて、なんてお得!!

617 :デフォルトの名無しさん:03/05/02 00:49
g++-3.2.1 on Linux だと

-rwxr-xr-x 1 user user 13742 May 2 00:47 cstdio
-rwxr-xr-x 1 user user 15827 May 2 00:48 iostream

だった。あんま変わらんね。cygwinはなんでそんな膨張すんだろか?

618 :デフォルトの名無しさん:03/05/02 01:18
vc++6.0sp5 (release build)
40960 cstdio.exe
65536 iostream.exe


619 :デフォルトの名無しさん:03/05/02 01:24
bcc32 5.5.1
52224 cstdiob.exe
113152 iostreamb.exe


620 :デフォルトの名無しさん:03/05/02 01:34
dmc 8.29n (stlport)
37404 cstdiod.exe
364060 iostreamd.exe

dmc 8.29n (default)
37404 cstdiod2.exe
49180 iostreamd2.exe


621 :デフォルトの名無しさん:03/05/02 03:08
MetrowerksCodeWarrior8で両方とも
32768byteになってしまいますた
(;´д`)

622 :デフォルトの名無しさん:03/05/02 03:10
きりのいい数字だな。

623 :デフォルトの名無しさん:03/05/02 03:13
iostream系ほど実装に差がでるライブラリは無いね
サイズをとるか実行速度をとるか

624 :デフォルトの名無しさん:03/05/02 11:45
vc5.0sp0
iostream 64512
stdio 30208

625 :デフォルトの名無しさん:03/05/02 12:28
静的リンク・動的リンクくらい理解してくれよ


626 :デフォルトの名無しさん:03/05/02 17:28
すみません、質問があります。
クラス(構造体)の宣言内でのみ using を使う方法はないものでしょうか?

>cat t96.cpp
#include <string>
#include <iostream>

struct T
{
using namespace std;

string s; // std::stringと記述する手間を省きたい
};

int main()
{
using namespace std;

T t;
t.s = "test";

cout << t.s << endl;

return 0;
}


627 :626:03/05/02 17:28
>g++ t96.cpp
t96.cpp:6: parse error before `namespace'
t96.cpp:8: 'string' is used as a type, but is not defined as a type.
t96.cpp: In function `int main()':
t96.cpp:16: `struct T' has no member named `s'
t96.cpp:18: `struct T' has no member named `s'

>bcc32 t96.cpp
Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland
t96.cpp:
エラー E2070 t96.cpp 6: 名前空間 'using' が不正に使われた
*** 1 errors in Compile ***


628 :デフォルトの名無しさん:03/05/02 18:20
namespace hoge{
    using namespace std;
    struct T
    {
        string s;
    };
}
using hoge::T;

629 :デフォルトの名無しさん:03/05/02 19:36
>>626
private: typedef std::string string;
とかで我慢しとくとか。

630 :デフォルトの名無しさん:03/05/02 21:21
一通りCの勉強しまして(ポインタ、構造体あたりまで)そろそろC++に移行しようと思ってるんですが
Cの標準関数を完全に使いこなせるようになってから移行すべきでしょうか?
将来はC++のプログラマになりたいんですが、時にはCを使う場面も出てきそうなんで迷ってます。

同じような経験を持つ方、ぜひ感想をお聞かせください。

631 :デフォルトの名無しさん:03/05/02 21:22
Cの標準関数なんかあんま関係ないよ。

632 :デフォルトの名無しさん:03/05/02 21:35
正直言って標準関数を使いこなせない奴は失格。
処理系依存のものまで覚えろとはいわんが、
ANSI関数ぐらい暗記できなきゃ先は無い。
基礎が大事だから、CをもっとじっくりやってからC++をやれ。

633 :デフォルトの名無しさん:03/05/02 21:38
しょっちゅうmanで調べている・・・・失格だな。

634 :続き:03/05/02 21:38
ただし、頑固な爺にはなるなよ。

635 :632:03/05/02 21:43
念のため。>>634は俺じゃないよ。

636 :デフォルトの名無しさん:03/05/02 21:46
関数を暗記する事ほど不毛な事は無いと思うが……
うーん、まあ、これは人それぞれかも。

637 :630:03/05/02 21:48
そうなんですか・・・Cの仕様や標準関数を完全に暗記することは無理っぽいんで
わからないことがあればその都度リファレンスブックなんかを見たらいいと思ってましたが

うーん 正直めちゃくちゃC++やりたいんですよね 
コンソールアプリでシコシコやるのは平気なんですがちょっとCで次やることが見えなくなってきてるので・・・



638 :デフォルトの名無しさん:03/05/02 21:49
>>630
Cがある程度わかるなら、どんどん先へ進んだ方がいいと思うぞ。

639 :デフォルトの名無しさん:03/05/02 21:54
>>637
よ う こ そ
チャンチャランチャン チャンチャンチャンチャン♪

640 :デフォルトの名無しさん:03/05/02 21:58
>>638に禿同。
基礎的なことがわかっていればとっととC++に移行すべき。

641 :デフォルトの名無しさん:03/05/02 22:03
>>640にはげどう
どっぷりCに浸かる前にC++に移行すべき。

642 :630:03/05/02 22:07
じゃあ行きます(w
ほんとは行きたかったんですよね  でもちょっと不安でした みんなサンクス!

643 :デフォルトの名無しさん:03/05/02 22:16
C++を飛ばしてC#に逝くというのはどうだろう?

644 :デフォルトの名無しさん:03/05/02 22:24
>>643
飛ばす必要はない

630がんがれ

645 :デフォルトの名無しさん:03/05/02 22:24
>>636
かと言って、毎回 malloc() で確保した奴を解放するにはどうしたらいいんだっけ ? とか悩んでいたら、仕事にならんだろ。
詳細は、man/help 見るとして、やりたいことと関数名の対応ぐらいは覚えておいた方がいいと思うけど。

646 :630:03/05/02 22:41
そうですね 一応今はCによるアルゴリズムの勉強してまして
malloc()とかfree()とかはなんとなく覚え始めてます。

GW明けぐらいに本を買ってC++はじめます。 この本を選ぶ瞬間がなんとも言えませんなっ!
一応EffectiveC++でも買おうと思ってます。  ほんと楽しみ

647 :デフォルトの名無しさん:03/05/02 22:44
中腹越えた辺りから絶壁になってるから気をつけてね。

648 :デフォルトの名無しさん:03/05/02 22:49
>>646
必読書スレ(と過去ログ)も参考にすると良い。

649 :デフォルトの名無しさん:03/05/02 23:06
そもそもmallocなんか使わねーし

650 :デフォルトの名無しさん:03/05/02 23:16
>>649
やっぱりでてきたか...。
そう思って >>645 のメル欄に書いといたんだけど、勝手に釣れちゃうもんなんだな。

651 :デフォルトの名無しさん:03/05/02 23:32
そもそもmallocなんか使わねーし

652 :デフォルトの名無しさん:03/05/02 23:41
>>650
C++スレだからなあ
俺もC++ではmalloc使わねーし

653 :デフォルトの名無しさん:03/05/02 23:57
C#って普及するのかなぁ。
C++で十分なような気がする。


654 :デフォルトの名無しさん:03/05/03 00:04
これからどんな言語をやるにしても、C++の知識は無駄にならないと思うぞ。

655 :デフォルトの名無しさん:03/05/03 00:08
そう、C++こそが次世代言語のインフラストラクチャーとなるのだ!

656 :デフォルトの名無しさん:03/05/03 00:54
boost::poolのmallocメソッドも使わないの?

657 :デフォルトの名無しさん:03/05/03 01:00
真っ当な意見と見せかけ、実は詭弁で論点をはぐらかす輩が多々おります。


 その6:一見関係ありそうで関係ない話を始める
 「boost::poolのmallocメソッドも使わないの?」

658 :デフォルトの名無しさん:03/05/03 01:01
>>653
一度やってみ。
むっちゃらくだから。
文字列操作とかファイルシステム関係なんて特に。


659 :デフォルトの名無しさん:03/05/03 01:08
>>658
monoがモノになれば考えてもいいが

660 :デフォルトの名無しさん:03/05/03 05:14
>>659 座布団1枚

661 :デフォルトの名無しさん:03/05/03 11:18
>>653
c#は使うのは楽だけど(C++にboost,STL,Loki入れればそうでもないが)、
高性能コンテナを作るのだったらテンプレートのある
C++の方がイイと思うんだけど
ベンチマークとってるヤシいる?


662 :デフォルトの名無しさん:03/05/03 12:39
もうC++なんてつかわねーよ!
ごちゃごちゃしすぎてワケわかんね!

これからはC#かJavaだよな、ほんと

663 :デフォルトの名無しさん:03/05/03 12:42
JavaならメモリリークもCほど気にしなくていいし
領域外への書き込みによるメモリ破壊もないし
意味不明な例外も発生しないし、いいことずくめだよ


664 :デフォルトの名無しさん:03/05/03 12:48
ぜったいいやだ。全部がポインタなんてふざけてる。俺からいわせればそれがバグのもと。でぃぷこぴーとか作るの面倒。
それにくらべてC++は実態とポインタがきちんと区別できるからいい。

665 :デフォルトの名無しさん:03/05/03 12:49
静的な型付けが強い言語でテンプレートが無い言語は使う気がしねぇ

666 :デフォルトの名無しさん:03/05/03 12:56
無効な領域に書き込んでもエラーにならないで素通りしちゃう言語は駄目でしょ。

667 :662-663:03/05/03 13:17
>>664
実体とポインタの区別をしなきゃいけないのがバグの元。
そもそもオブジェクト(配列やクラス)の複製なんてのは
するべきではない。


668 :デフォルトの名無しさん:03/05/03 13:22
>>667
わかったから他のスレでやれヴォケ

669 :デフォルトの名無しさん:03/05/03 13:23
>>663
Javaは起動時から死ぬほどメモリ消費するから
メモリリークなんて気にしなくていいね。

670 :デフォルトの名無しさん:03/05/03 13:24
>>669
java コマンドのオプションを見たことないんだ。

671 :デフォルトの名無しさん:03/05/03 13:25
>>670
ユーザーはjavaコマンドのオプションなんてわざわざ見ないよね。
開発者じゃないんだし。

672 :662-663:03/05/03 13:26
>>666
静的言語??ププッ
あと、JavaにはSTLの代用品がほぼ揃ってる
テンプレート?めんどくせえ…

673 :デフォルトの名無しさん:03/05/03 13:26
Javaの話はよそでやれ

●●JAVAって死滅しちゃうの???? PART6●●
http://pc2.2ch.net/test/read.cgi/tech/1047748598/


674 :662-663:03/05/03 13:27
テンプレート?わかんねえ…

675 :デフォルトの名無しさん:03/05/03 13:28
最近VB.NETとかJavaとか死滅しそうな言語を他の言語スレに薦めに来る
必死な人が多いね。

676 :デフォルトの名無しさん:03/05/03 13:29
>>675
それだけ必死なんだろw
頭がかわいそうな奴は無視に限る

677 :デフォルトの名無しさん:03/05/03 13:29
ポインタのポインタみたいな真似ができない言語は嫌だ…

C++が嫌なら、AdaやDをお薦めする。
GCあるし、配列の境界チェックもしてくれるよ。
ともかく一度template(Adaだとgenericだけど)を使ってみるがよろし。

678 :デフォルトの名無しさん:03/05/03 13:31
>>677
厨には何言っても無駄だよ
ハナから使う気がないんだし

679 :デフォルトの名無しさん:03/05/03 13:33
vector<string> strs;
for(int i=0;i<4;i++)
{
strs.push_back("test");
}

cout << strs.at(5) << endl;

これは境界チェックとは言わないの?

680 :デフォルトの名無しさん:03/05/03 13:35
>>677
俺なら素直にJavaかC#をお勧めするよ。
もちろんGCもあるし、配列の境界チェックもしてくれる。
あと少しでGenericも搭載されるしさ。

681 :662-663:03/05/03 13:36
>>677
>ポインタのポインタみたいな真似ができない言語は嫌だ…

プッ

682 :デフォルトの名無しさん:03/05/03 13:36
>>679
そんなことより、無効エリアへのアクセスが問題だと思われ。

683 :デフォルトの名無しさん:03/05/03 13:36
[]ではなく、わざわざatを使っていると言う点で、
それは境界チェックと言えるかもしれない、
が、
要らぬ輩を召還するような話題はしばらく控えて欲しいもんだな。

684 :677:03/05/03 13:39
>>680
いやその…俺は別にC++でいいから…

templateイラネ厨に対して、「template使ってみろ」と言う時に、
まさか「サポートされるまで待て」と言うわけにいかんでしょ…
だから現時点で使える言語を挙げたのだが…

はいはい、俺が悪かった。

685 :デフォルトの名無しさん:03/05/03 13:41
もう使えるよ。正式に取り入れられていないだけ。

686 :デフォルトの名無しさん:03/05/03 13:41
テンプレートが無いC++は使う価値が無い

687 :デフォルトの名無しさん:03/05/03 13:42
へー

688 :デフォルトの名無しさん:03/05/03 13:42
>>686
逆にテンプテートがあるから使う価値があるね

689 :デフォルトの名無しさん:03/05/03 13:43
ほー

690 :デフォルトの名無しさん:03/05/03 13:43
そういや昔のC++にはテンプレート無かったな。

691 :デフォルトの名無しさん:03/05/03 13:43
テンプテーション

692 :デフォルトの名無しさん:03/05/03 13:47
お前ら、文字列扱うときになに使ってますか?
char配列とかstringとかAnsiStringとかCStringとかワケワカです。
他にも文字列型ありますか?
どう違って何がいいんですか?
UNICODE使うときはどーしたらいいですか?

693 :デフォルトの名無しさん:03/05/03 13:49
string…標準である。標準コンテナとの親和性(iterator)
AnsiString…VCLを使うとき
CString…ATL,WTL,MF(ryを使う時
UNICODE使うときは
basic_string<wchar_t>

694 :デフォルトの名無しさん:03/05/03 13:50
つーかwstringな

695 :デフォルトの名無しさん:03/05/03 13:50
全部併用してc_str()で受け渡し合えばOK

696 :デフォルトの名無しさん:03/05/03 13:51
プッ

697 :デフォルトの名無しさん:03/05/03 13:58
一番汎用性があるのはstring、UNICODEの場合wstring。
これだけ使ってればどこでも動くってことでおけ?
あとは用なしですね?

698 :デフォルトの名無しさん:03/05/03 13:58
基本的にstd::stringを使おう。
でもIntToStrはboost::lexical_castよりもタイプ数が少なくて便利なので、
std::string("No.:") + IntToStr(number_).c_str()のように使おう。
これをVCLオブジェクトにAnsiStringで渡さなければならなくなったら、
AnsiString((std::string("No.:") + IntToStr(number_).c_str()).c_str())のようにして渡そう。

699 :デフォルトの名無しさん:03/05/03 13:58
あと、string、wstringの問題点でもあったら教えてくれ。

700 :デフォルトの名無しさん:03/05/03 14:00
>>698
処理系依存。イヤ。

701 :デフォルトの名無しさん:03/05/03 14:01
>>700
char*とsprintfで頑張って下さい。

702 :デフォルトの名無しさん:03/05/03 14:04
>>701
退化しちゃってんじゃん

703 :デフォルトの名無しさん:03/05/03 14:05
うんこどもがlinnyなんつーもんをつくろうとしてるぞ(wwwwwww
http://pc.2ch.net/test/read.cgi/linux/1051890709/l50
http://sourceforge.jp/projects/linny/
http://linny.sourceforge.jp/

Janeなみの2chブラウザすらつくれないやつらにつくれるわけねーだろ(ゲラゲラg


704 :デフォルトの名無しさん:03/05/03 14:05
>>701
おい! char*以外は処理系依存なのかよ!?

string、wstringってバグ大丈夫〜?

705 :デフォルトの名無しさん:03/05/03 14:23
>>704
698のVCLのことを言ってるのだと思われ

boost::format("%1%%2%") % "No.:" % number;
でいいじゃん。

CString::FormatのようなCの可変引数の実装はC++では歓迎されない。


706 :デフォルトの名無しさん:03/05/03 16:11
newで確保した領域は、違う大きさでもう一度newしたら、その大きさになるのでしょうか?
char *p;
p=new char[100];
...
p=new char[200];
それとも、newの一回目の分は確保されっぱなしでdeleteするまで無駄な領域として放置されるのですか?
deleteしないでnewがある関数を何回も呼び続けたら、メモリが無くなってしまうのでしょうか?

このあたりのことが、調べても見つかりません。どうかよろしくお願いします。

707 :デフォルトの名無しさん:03/05/03 16:24
>>706
それを「メモリリーク」といいます。


708 :デフォルトの名無しさん:03/05/03 16:27
その通り。

709 :706:03/05/03 16:35
>>707-708
ありがとうございました。HPいっぱいありました。>メモリリーク

710 :デフォルトの名無しさん:03/05/03 17:34
> HPいっぱい
ってなぁに?

711 :デフォルトの名無しさん:03/05/03 17:36
メモリリークについて解説してるページがいっぱいってことでしょ

712 :デフォルトの名無しさん:03/05/03 17:37
長時間動かすソフトでなければメモリリークなんて考えなくていいよ。

713 :710:03/05/03 17:45
>>711
あ、そっかぁ。

>>712
志ね

714 :デフォルトの名無しさん:03/05/03 17:47
newで作ったクラスを開放しないでいると、
終了時にデストラクタは呼ばれないの?

715 :デフォルトの名無しさん:03/05/03 17:48
クラスじゃなくてオブジェクトでは。

716 :デフォルトの名無しさん:03/05/03 17:49
呼ばれません。

717 :デフォルトの名無しさん:03/05/03 17:51
静的な変数の場合も呼ばれるとは限らないんだっけ?

718 :デフォルトの名無しさん:03/05/03 17:53
呼ばれます。(静的なポインタにnewで突っ込むんじゃねぇだろうな?)

719 :デフォルトの名無しさん:03/05/03 17:55
>>718
> 静的なポインタにnewで突っ込むんじゃねぇだろうな?
違う違う。

そうか。呼ばれるのか。サンキュ。


720 :719:03/05/03 17:55
呼ばれるタイミングがきちんと決められていないということだったかも・・・

721 :デフォルトの名無しさん:03/05/03 18:02
生成の完了と逆順となっております。
でも生成順がきちんと決められてないのなー。

722 :デフォルトの名無しさん:03/05/03 18:05
>>675
C++も死滅寸前だけどな

723 :デフォルトの名無しさん:03/05/03 18:12
>>722
ま た お 前 か !

いい加減まきらめろ(プ

724 :デフォルトの名無しさん:03/05/03 18:17
GWだしね

725 :デフォルトの名無しさん:03/05/03 18:27
コンテナをメモリの消費量順に並べてくれませんか?
一番メモリ消費が少ないのはvectorとlistどちらですか?

726 :デフォルトの名無しさん:03/05/03 18:28
実相依存な気もするけどvector

727 :デフォルトの名無しさん:03/05/03 18:31
どうも。setやmapは他に比べてかなりメモリ消費が多いと考えていいのですか?

728 :デフォルトの名無しさん:03/05/03 18:32
オブジェクト本体以外の追加のメモリなら、
map>set>list>deque>vector
と予想できる。
もちろん規格で定まってるわけではない。

729 :デフォルトの名無しさん:03/05/03 18:33
vector<deque<list<set<map

多分こうだと思う。 用途が違うのでメモリ使用量を比べてもしょうがない気もするけど

730 :デフォルトの名無しさん:03/05/03 18:34
おまえら・・・

731 :デフォルトの名無しさん:03/05/03 18:36
>>728-729
ありがとうございました。

732 :デフォルトの名無しさん:03/05/03 18:36
>>728>>729は微妙に相性が悪い、に512ビット。

733 :デフォルトの名無しさん:03/05/03 18:37
きっと腹違いの兄弟。

734 :デフォルトの名無しさん:03/05/03 18:38
>>732
俺もそう思った(笑)

735 :デフォルトの名無しさん:03/05/03 21:11
初歩的な質問で申し訳ないですが、WINDOWSのMegProcは静的に宣言しないといけないのですか?
もし動的に宣言できるならば、それをクラスのメゾットとして宣言するにはどうすればいいのでしょうか?


LRESULT WINAPI MsgProc( HWND hWnd, UINT msg, WPARAM wParam, LPARAM lParam )




736 :デフォルトの名無しさん:03/05/03 21:40
> 動的に宣言
ってなぁに?

737 :デフォルトの名無しさん:03/05/03 21:53
>>735
恐らくスレ違い。

738 :デフォルトの名無しさん:03/05/03 21:57
>>735
SetWindowLongかSetPropでthisポインタを保持して
メッセージループでGetして使う。

739 :デフォルトの名無しさん:03/05/03 21:57
thisとhwndを関連付けよ

740 :デフォルトの名無しさん:03/05/04 01:23
>>735
できないの?
3.1のときの本でwinのクラスライブラリ作ろうってやつは普通に性的でないメソッドを渡してたがなあ。

741 :デフォルトの名無しさん:03/05/04 05:23
>>647
wstringはUnicode系とは限らないし、ましてやUTF-16
なんかになるのはWindowsだけだし、国際化の遅れた
OS、あるいはC/C++ localeを見捨てたOSでは、wchar_tが
飾りで実際には使えないこともある。
というわけで、間違っても「w*を使えばUnicodeで国際化で
みんな幸せ」なんて思わないように。

742 :デフォルトの名無しさん:03/05/04 05:24
おっと、>>697だった。

743 :デフォルトの名無しさん:03/05/04 06:50
Shift-JISやJISの文字列から正しく検索ができる
文字列クラスってあったっけ?
Shift-JISはVC++のCStringがやってくれそうだけど。

744 :デフォルトの名無しさん:03/05/04 13:40
AnsiString

745 :743:03/05/05 07:40
>744
ども。結局VC依存、BC依存になるってことか。

746 :デフォルトの名無しさん:03/05/05 13:46
名前なし名前空間てどういうふうに使うものなんでしょうか・・・。


747 :デフォルトの名無しさん:03/05/05 13:51
2ちゃんのこと?

748 :デフォルトの名無しさん:03/05/05 13:53
グローバル変数を外部ファイルに見せたくないとき

749 :746:03/05/05 14:04
>>748
なるへそ・・・。
ところで名前がないだけに
namespaceのブロックの外で

void ???::func(){ /*...*/ }

というような関数の定義はできないということ?

750 :デフォルトの名無しさん:03/05/05 14:11
void ???::func は出来ないだろうけど、宣言と同じファイル内であれば
void func で問題ないのではなかろうか(未確認)。

751 :750:03/05/05 14:15
できないな。

752 :デフォルトの名無しさん:03/05/05 16:46
>>749
要するに、ファイルに直接
static int a;
とか書くとそのファイル内でしか a にアクセスできないという
ファイルスコープ変数/関数を実現する手段として提供されたのだ。
ファイルごとに違った名前空間名が自動的に与えられるけど、
その名前は実際には使えないような内部名になっている。
だから、namespace { } で囲んだ内部でしか使えないし、
別のファイルからは決して参照できない。

static int a; と書くのは今のC++では非推奨で、
namespace { int a; } などと書くのが推奨されている。

753 :デフォルトの名無しさん:03/05/05 17:34
無名の名前空間
http://www.microsoft.com/japan/msdn/library/default.asp?url=/japan/msdn/library/ja/jpdndeepc/htm/deep04062000.asp

754 :746:03/05/05 22:47
そうですか。
じゃあ無名の名前空間では関数の定義は中にいれないとだめなんですね・・。


755 :752:03/05/05 23:50
スマン。間違えてた。

> namespace { } で囲んだ内部でしか使えないし、

# namespace { } のあるファイルでしか使えず、
だったね。

756 :デフォルトの名無しさん:03/05/05 23:51
>だから、namespace { } で囲んだ内部でしか使えないし、
嘘を教えちゃ駄目だろ

namespace
{
int a;
}

void foo()
{
a=0;
}

こうできる。

757 :デフォルトの名無しさん:03/05/05 23:51
む。

758 :752:03/05/05 23:57
>>756-757
ごめんちゃい。

759 :デフォルトの名無しさん:03/05/06 01:22
case文の下を
case 0:
{

}
break;
でかこむのは常識ですか?

760 :デフォルトの名無しさん:03/05/06 01:25
非常識
聞くまでもなかろう。

761 :デフォルトの名無しさん:03/05/06 01:25
>>759
必要になるまでやらない。
囲む場合のインデントによく迷う。
迷った結果、
  {
  case 0:
   {
    int n = ...
   }
    break;
とかに落ち着いたりする。

762 :デフォルトの名無しさん:03/05/06 01:45
>>461
確かにインデントにはよく迷うな。

共通して使う変数なら
switch(a)
{
 int n;
case 0:
 ...
}
とかできるんだが、初期化忘れとかちょっと恐いので
それぞれのブロックで宣言した方がいい。

763 :デフォルトの名無しさん:03/05/06 01:47
俺は
case 0:{}break;
と書いてから中身を書く

764 :デフォルトの名無しさん:03/05/06 10:12
荒しのように見えるかもしれませんが、真剣な質問です。
Borland C++で、ドラクエみたいなゲームは作れるでしょうか?

765 :デフォルトの名無しさん:03/05/06 10:15
>>764
煽りのように見えるかもしれませんが、真剣な回答です。
作れます。

766 :764:03/05/06 10:19
>>765
レス、どうも有り難うございましたm(__)m
現在本を買って勉強中ですが、どうも不安になってしまったのでお尋ねしました。
これで安心して勉強できます(^o^)

767 :デフォルトの名無しさん:03/05/06 10:19
>>764
BCCでDirectXやWinAPI(GDI)を駆使して
プログラミングするならドラクエもどきは作れる。
けど、結構な努力とそれなりのプログラミング技術が必要。
貴方が作れるかどうかは知らない。

768 :764:03/05/06 10:22
>>767
勉強になります!
あんまり気負わずに、のんびり楽しみながら取り組もうと思ってます。

769 :デフォルトの名無しさん:03/05/06 11:58
柏原さんの標準C++の基礎知識を読んでいるんですが、
仮想関数を用いた実行時ポリモーフィズム(10章)の説明で、
基本クラス:Base
派生クラス:Derived
として、
Base *pbase = new Base;
....
pbase = new Derived;

とやっているのですが、これは、Base型のオブジェクトに Derive型のオブジェクトを
代入していることになって、成り立つ訳が分かりません。
どういうことでしょう?

また、
Base pbase = new Derive;
のような記述もありました。

770 :デフォルトの名無しさん:03/05/06 12:03
>>764
「RPGツクール」では、ダ・メ・な・の・か?


771 :デフォルトの名無しさん:03/05/06 12:11
10000円くらいするじゃねーか

772 :デフォルトの名無しさん:03/05/06 12:26
>>769
継承の意味を勉強しなおせとしか言いようがない。


773 :デフォルトの名無しさん:03/05/06 12:43
>>772
ポインタもね。

774 :デフォルトの名無しさん:03/05/06 13:05
>>773
あとコンストラクタもかな。

775 :デフォルトの名無しさん:03/05/06 13:38
>>769
「 Base pbase = new Derive; 」
って記述が本当にあったなら、著者があほ。

776 :デフォルトの名無しさん:03/05/06 13:53
継承クラスのポインタは基底クラスのポインタに代入できる決まりになっているから
代入できる。

777 :デフォルトの名無しさん:03/05/06 14:03
>>774
メモリリークもね。

778 : :03/05/06 20:44
>>776
それだけじゃ答えになってないと思う。

>>772
オブジェクト指向の多態性について勉強しる。

779 :デフォルトの名無しさん:03/05/06 21:50
>>778
アフォか?
ポリモーフィズムを実現する手段の話をしてるんだろ。
>>769の「仮想関数を用いた実行時ポリモーフィズム(10章)の説明で」が読めないか?


780 :デフォルトの名無しさん:03/05/06 23:44
決まりとして受け止めて
何故そんなことするか?
何故そんなことするとイイかを考えよ

781 :デフォルトの名無しさん:03/05/07 04:22
はじめて書きこむ初心者です〜
ファイルオープンできずにセグってしまいあたふたしてます(泣

ifstream inst1;
system("awk '{print $1\" \"$2\" \"$3}' inputfile.dat > hoge.dat");
inst1.open("hoge.dat",ios::in);
とかやろうとしてるんですが
fstreambase::open() from /usr/lib/libstdc++.so.3
でセグったとか言われてしまいます。
なんでだか見当もつかないのですがどうしてだかわかる人いませんか〜ToT

782 :デフォルトの名無しさん:03/05/07 04:50
セグった
ってどういう意味なんですか?

783 :デフォルトの名無しさん:03/05/07 04:54
質問で自分語使う奴って嫌だよね

784 :デフォルトの名無しさん:03/05/07 06:54
ったく、「セグる」って言葉も知らない素人が紛れ込んでいるとは。
レスの質が落ちるわけだ。

785 :デフォルトの名無しさん:03/05/07 07:55
セグる
  ∧_∧   
 ( ´∀`)< ぬるぽ せぐった

786 :デフォルトの名無しさん:03/05/07 08:25
セグる(笑)
Segmentation Faultかな?
だとしても、そんな妙な省略はしないなあ。

787 :デフォルトの名無しさん:03/05/07 08:45
業界10年いるけどセグったなんて用語は聞いた事無いなぁ。
インテル系の用語?

788 :デフォルトの名無しさん:03/05/07 09:01
きょうもみんなでセグりんこ!
みんなでなかよくセグりんこ!
目・肩・腰にセグりんこ!


789 :デフォルトの名無しさん:03/05/07 09:23
聞いたことないやつは一回実際にセグってみようぜ

790 :デフォルトの名無しさん:03/05/07 09:26
  ∧_∧   
 ( ´∀`)< せぐふぉ

791 :781:03/05/07 09:57
う〜ん書き込み増えてるから期待して読んでみたらネタになってるだけでしたね〜

セグって来ます…


792 :デフォルトの名無しさん:03/05/07 11:05
>>775
Base *pbase = new Derive;
でした。
標準C++の基礎知識には継承クラスのポインタは基底クラスのポインタに代入できる決まりになっている趣旨の内容がどこにも取り扱われていませんでした。
ダメだなこの本。。。大体読んだのに。。。
だれか良い本紹介して〜。

793 :781:03/05/07 11:24
ついネタに走りましたが
せぐるじゃなくてSegmentation Faultになるということで
教えてください〜よろしくおねがいします〜

794 :デフォルトの名無しさん:03/05/07 11:43
>>793
まずはsystemの呼び出しをコメントアウトしてみて動くかどうか・・・。
openを使わずにコンストラクタで開くようにしてみるとか・・・。

795 :デフォルトの名無しさん:03/05/07 12:50
>>792
「詳説C++」でも読んどけ

796 :デフォルトの名無しさん:03/05/07 13:05
セグルッテナンダ
  ( ・∀・)   | | ガッ
 と    )    | |
   Y /ノ    人
    / )    <  >__Λ∩
  _/し' //. V`Д´)/
 (_フ彡        /  ←>>785



797 :デフォルトの名無しさん:03/05/07 14:35
プログラミング言語C++とARM

何で読まないの?

入門本で要領つかんだらすぐに捨ててこっち読めよ

798 :デフォルトの名無しさん:03/05/07 14:58
class CA{};

CA* pca=new CA;
delete pa;

とされた時に、このpaが開放されているか否かを確かめる方法は何か
ありますか?

799 :デフォルトの名無しさん:03/05/07 15:00
解放されているじゃん。

800 :デフォルトの名無しさん:03/05/07 15:06
開放してるけど、あるオブジェクトが開放されているか、否かの判定方法を知りたいんです。

if(pca==何かの値){開放されていない}
else{開放されている}

みたいな。

801 :デフォルトの名無しさん:03/05/07 15:09
言っている意味がよくわからない。
本当にシステムに返されているかどうか知りたいわけ?

802 :デフォルトの名無しさん:03/05/07 15:11
そうです。何かよい方法ありませんか?

803 :デフォルトの名無しさん:03/05/07 15:13
>>802
それって激しく環境依存なのでは?
環境を書くか、その環境専用のスレにゆかなければ答えは得られないのでは。


804 :デフォルトの名無しさん:03/05/07 15:24
>>797
ARM
こんな化石本読むんですか?

805 :デフォルトの名無しさん:03/05/07 15:33
機種依存しちゃうと話がややこしくなりますので、それでは、

void func(void){
CA* pca=new CA;
}

void main(void){
func();
}
とやると、このpcaはリークしますが、これが既に何者にも参照されていない
ことを知るにはどのような方法があるのでしょうか?
お願いします。

806 :デフォルトの名無しさん:03/05/07 15:58
>>805
どんな処理系でも通用する汎用的な方法は無い。
boost::shared_ptr とか使って、そもそもリークしないように汁。


807 :デフォルトの名無しさん:03/05/07 16:05
>>798
ポインタの指す先が何なのかは一般的に不明。
参照先が有効かどうかは、雰囲気で察するしかない。

次のルールで、無効なオブジェクトへのアクセスはなんとなく回避できる。
1. オブジェクトを変更できるポインタは、インスタンスごとに一つしか作らない。
2. deleteしたら、すぐにnullを代入する。
3. オブジェクトを変更しないポインタは、自動変数にする。

スマートポインタについては次の人が説明してくれる。
よろしく↓

808 :↑漏れにはムリ:03/05/07 16:23
επιστημηタソによるauto_ptrの説明
http://www005.upp.so-net.ne.jp/episteme/html/stlprog/_03.html#ref_auto_ptr

某アーカイバ作者K.INABAによるsmart_ptrの説明
http://www.kmonos.net/alang/boost/smartptr.html

809 :デフォルトの名無しさん:03/05/07 18:11
VCなら _CRT なんちゃらで 検索すれば、メモリリーク検出できる関数があったりするが・・・。

810 :デフォルトの名無しさん:03/05/07 20:38
class object;
vector<object *> objects;

class object
{
object(){ objects.push_back(this);}
~object(){ objects.erase(find(objects.begin(),objects.end(),this)); }
};

ほれ、全てのクラスをこれから継承しろ。 これでできるだろ。


・・・できますか?

811 :デフォルトの名無しさん:03/05/07 20:39
>>810
それじゃあ参照されてるかどうか分からないよ?

812 :デフォルトの名無しさん:03/05/07 22:04
>>811
むほっ >>800の質問に答えてた。 後のレスをあんま読んでなかった。



813 :デフォルトの名無しさん:03/05/07 23:02
>>809
あれはデバッグウインドウに出るだけでは?

というかauto_ptrとか使わずにそういうのを作るっていうのは
つまりはガベージコレクタを作るっていうのと同じなんじゃぁ・・

814 :デフォルトの名無しさん:03/05/07 23:22
>>809
_CrtSetDbgFlag(_CRTDBG_ALLOC_MEM_DF | _CRTDBG_LEAK_CHECK_DF);
これですね。

>>813
どの new でリークしたかと、サイズと、内容も出ます。
でも、デフォルトのまま使うと
crtdbg.h の中でリークしたと出てきます(笑
VC6 のでしか確かめてませんけど、
これはどうしようもないはずなので多分 .NET でもそうなってるはず。
こうして NEW を使うようにするのがいいです。

#include <crtdbg.h>
#define _CRTDBG_MAP_ALLOC
#if defined(_DEBUG) && !defined(NEW)
#define NEW ::new(_NORMAL_BLOCK, __FILE__, __LINE__)
#else
#define NEW new
#endif

815 :813:03/05/07 23:30
>>814
なるほど、勉強になります。
やっぱり810のやり方が一番妥当でしょうね。

デストラクタをvirtualにした方がいい気もしますが

816 :デフォルトの名無しさん:03/05/07 23:41
>>815
別に delete するわけじゃないんで
仮想デストラクタにする必要もないかと。
全部のクラスに仮想関数テーブルがくっつくのもいやだし。
CPoint とか CRect とか...。

あとは、仮想継承しないと鬱陶しい事になるのと、
どこで確保した奴がリークしたのか分からないことかな...。
そして、標準ライブラリなどのクラスには対応できないのと。

817 :デフォルトの名無しさん:03/05/07 23:47
bcc32を利用した、簡易な開発環境を作ってみたいと思っています。
そのため、ボタンを押すとコマンドプロンプトの窓が開いて中で(別の場所で)指定した
プログラムをbcc32でコンパイルし、その結果がその窓に残るようにしたいと思います。

ですが、うまくいきません。

CreateProcess( NULL, "bcc32 c:\\hoge.cpp", NULL, NULL, TRUE, CREATE_NEW_CONSOLE, NULL, "c:\\", &si, &pi )

みたいなかんじでbcc32 c:\hoge.cppを実行すると、確かにコンパイルされますが、窓がすぐ閉じてしまいます。
かわりにcmd.exeを実行すると窓は開いたままですが、どうやってbcc32を起動するかがわかりません。

どなたかお願いします。

818 :817:03/05/07 23:48
すみません。スレを間違えました。
C++Builder相談室に逝きます。

819 :デフォルトの名無しさん:03/05/07 23:49
cmd /c bcc32 c:\\hoge.cpp

820 :デフォルトの名無しさん:03/05/07 23:49
>>816
なるほど。
そういう実装する時は大概最後にリスト辿って解放漏れをdeleteするためだと思ってたもので(汗
確かに継承しないとややこしいことになりますね。
納得です

821 :デフォルトの名無しさん:03/05/07 23:50
>>817
スレ違いだよ

822 :デフォルトの名無しさん:03/05/07 23:51
>>821
すれ違いだよ

823 :817:03/05/07 23:56
>>821 すみません。
あとちょっとだけ。

>>819さん、ありがとうございます。
あまりの即レスに感激です。
ただ、残念ながら、ためしたところ、やはりコマンド窓はすぐに閉じてしまいました。
もし、対策がありましたら、お願いします。

824 :デフォルトの名無しさん:03/05/08 00:03
内容をリダイレクトして、
自分のプログラムのウィンドウに内容を表示した方がカッコよくない?

825 :817:03/05/08 00:10
>>824
ありがとうございます。
リダイレクトしようと、
bcc32 c:\\hoge.cpp > c:\\log
とすると、なんだか不調になります。

826 :デフォルトの名無しさん:03/05/08 00:18
不調...。
何なんだろ。
あと、調べてみたら、Windows98 とかでは
エラー出力をそのままではリダイレクトできないみたいね。

827 :817:03/05/08 01:06
>>826
すみません。
やってみると、一瞬で窓が閉じるのでよくわからない(自分が情けない)のですが、
コンパイラの起動後、リンカまでいっていない感じです。
リダイレクトでできるはずのファイルもできません。

すみません。とりあえず、あきらめます。

828 :デフォルトの名無しさん:03/05/08 11:47
MFCのCWinApp::InitInstance()のオーバーライドのソースに
#include <iostream>を入れると、

>error LNK2005: "void __cdecl operator delete(void *)" はすでに
>libcpmtd.lib(delop.obj) で定義されています
>fatal error LNK1169: 1 つ以上の複数回定義されているシンボルが見つかりました
>link.exe の実行エラー

というエラーがでまつ。
MSDNでは、マルチスレッド対応してないライブラリが混ざってると。

runtime_errorをキャッチしたいだけなのですが、どうすれば宜しいですか?

829 :デフォルトの名無しさん:03/05/08 12:09
なんでMFCスレの話をこっちに持ってくる?

830 :デフォルトの名無しさん:03/05/08 16:45
標準のC++にfinallyはありませんか?

831 :デフォルトの名無しさん:03/05/08 16:46
無いです

832 :デフォルトの名無しさん:03/05/08 17:16
すみません、C初心者の者ですが↓のプログラムでエラーがでます。あってると思うのですが・・・。コンパイラはvisualCです。
#include <stdio.h>
#include <math.h>
#include <igraph.h>
int main(void)
{
int i,r;
float th;
double x[5],y[5];
r=100;
th=2*3.1415926535/20;
for(i=0;i<=4;i++){
x[i]=300+r*cos(th);
y[i]=300-r*sin(th);
th=th+(2*3.1415926535)/5;
}


833 :デフォルトの名無しさん:03/05/08 17:17
SetLineColor(CL_BLUE);
SetLineStyle(PS_SOLID,1);
Line(x[0],y[0],x[2],y[2]);

SetLineColor(CL_BLUE);
SetLineStyle(PS_SOLID,1);
Line(x[0],y[0],x[3],y[3]);

SetLineColor(CL_BLUE);
SetLineStyle(PS_SOLID,1);
Line(x[1],y[1],x[3],y[3]);

SetLineColor(CL_BLUE);
SetLineStyle(PS_SOLID,1);
Line(x[1],y[1],x[4],y[4]);

SetLineColor(CL_BLUE);
SetLineStyle(PS_SOLID,1);
Line(x[2],y[2],x[4],y[4]);
}
間違ってるとこありましたら、ご指摘お願いします。

834 :デフォルトの名無しさん:03/05/08 17:18
エラーメッセージ読め

835 :デフォルトの名無しさん:03/05/08 17:24
>>834
エラーメッセージがでないんです。
前はでていたんですが、1回アンインストールして最近もっかいインストールしたら
でなくなってました。


836 :デフォルトの名無しさん:03/05/08 17:24
エラーメッセージが出ないのになんでエラーだって分かるの?

837 :デフォルトの名無しさん:03/05/08 17:28
エラー 1
とはでるからです・・。

838 :デフォルトの名無しさん:03/05/08 17:41
>>837
もう一度インストール
もちろんフルインストールで

839 :デフォルトの名無しさん:03/05/08 17:43
>>838
了解っす!


840 :デフォルトの名無しさん:03/05/08 18:11
こっこはー! C++ っのー! 相談室だー!
C はスレ違い。

まぁ一応反応しておくと、
int と float と double を混合させて計算するのはどうかと。
精度が違う云々で警告が出ると思う。
i 以外は全部 double に汁。
まぁ、それ以外特に変なとこないと思う。
igraph.h の関数の仕様は分からんが。

前は igraph.h 用のライブラリがないとか、
そういう変な事やっとたんやないかな?

>>838
エラー出なくなったのに、なぜもう一度インストールする必要があるよ。
どうせ前足りなかったものが今回のインストールで入った、ってだけやろ?
まぁ、フルインストールにするに越した事はないけどさ。

841 :840:03/05/08 18:13
>>838
あ、間違えた。
出なくなったのはエラーじゃなくて
エラーメッセージだったのね。
そら再インストやわ。
すまん。

842 :デフォルトの名無しさん:03/05/08 18:56
>>840-841
スレ違いすみません。どのスレに書けばいいか分からなかったので^^;

再インストしたんですが、JINT35.DLL、VBAR332.DLL、MSXBSE35.DLLというファイルが開くことができませんでしたとでました。
無視するとそのままインストールできるんですが、最後にシンボルファイルをセットアップするようにとでてきます。
それをセットアップしないとデバッカは呼び出し関数のコンテキストを決定できませんと・・。
セットアップするアイコンをクリックしてセットアップしようと思ったんですが
このマシン上の対応するdllファイルとマッチしませんとでて、
最後にすべてのシンボルファイルはシステム上へ正しくインストールされませんとでます・・。

スレ違いな上に長文でもうしわけないですが、どうすればいいでしょうか。

843 :デフォルトの名無しさん:03/05/08 19:17
>>842
VCなんだからVCのスレ行ったら

844 :デフォルトの名無しさん:03/05/08 19:32
>>843
すみませんそうします^^;
みなさんありがとうございました。

845 :デフォルトの名無しさん:03/05/08 20:00
C++でファイルロックなんかのいい資料ない?

846 :デフオルトの名無しさん :03/05/08 23:42
>>845
http://www.google.com/search?hl=ja&lr=lang_ja&q=%83%8D%83b%83N%83%7D%83%93

847 :デフオルトの名無しさん:03/05/08 23:51
>>832
     *  *  *
  *         *
 *   Λ_Λ    *
 *   ( ´ρ` )    *
 *  } ガタリナイヨ  *
  *         *
    *  *  *

848 :デフォルトの名無しさん:03/05/08 23:56
>>847
>>832-833

849 :デフォルトの名無しさん:03/05/09 00:32
>>847
プ

850 :デフォルトの名無しさん:03/05/09 01:07
生まれて初めてプログラム書きましたが、エラーがでました・・。
どこが悪いのでしょうか??


#include <iostream>
#include <string>
using namespace std;


int main()
{

string sei;

cout << " 貴方は男性ですか、女性ですか?: 男性ならM、女性ならFと押してください:" ;
cin >> sei;

if(sei == M)
{
cout << " 貴方は男性ですね:" ;
}

else if(sei == F)
{
cout << " 貴方は女性ですね:" ;
}

}

851 :デフォルトの名無しさん:03/05/09 01:08
>>850
MとFはどこで定義しているのでしょうか。


852 :デフォルトの名無しさん:03/05/09 01:10
"M"と"F"に

853 :デフォルトの名無しさん:03/05/09 01:14
どんなエラーだったの?

854 :デフォルトの名無しさん:03/05/09 01:16
あ、
string M;
string F;
と入れれば良いんですかね・・
やってみます

855 :850:03/05/09 01:17
>>853
たぶん、定義ができてなかったみたいです。

856 :デフォルトの名無しさん:03/05/09 01:17
>>854
#define M "M"
#define F "F"

857 :デフォルトの名無しさん:03/05/09 01:18
>>855
ずいぶんアバウトなコンパイラだな。

858 :名無し:03/05/09 01:21
>>857
wara

859 :デフォルトの名無しさん:03/05/09 01:22
>>837のような状態になっているんだと思われ。

860 :850:03/05/09 01:26
>>856
有り難うございます!お陰様で思うような動作をしてくれました(TOT)!!
初めてのプログラムなので、感激です・・

みなさん、どうもでした!

861 :デフォルトの名無しさん:03/05/09 01:27
初めてのプログラムはHello worldだろ!
本気で怒るよ?

862 :デフォルトの名無しさん:03/05/09 01:28
リナックスのgccだと
main()
だけでもエラーメッセージが出ないのに
ウィンドウズのbccだと
main()
じゃエラーが出ます。
void main(void)
って書けばエラーが一応出ないのですが
リナックスのソースにも一応
void main(void)
って書いた方が良いのですか?

863 :850:03/05/09 01:29
>>861
ど、どうしてですか(^^; ?

実は自分、>>764ですが、まだまだ先ははてしなく長いです(笑)

864 :デフォルトの名無しさん:03/05/09 01:30
>>862
エラーじゃなくて警告では。
最後にreturn 0;

うーん・・C++ならreturn 0は省略できるはずだけど。


865 :デフォルトの名無しさん:03/05/09 01:30
>>860
C++ なら、マクロ使うよりは
const char Male[] = "M";
const char Female[] = "F";
もしくは
const string Male("M");
const string Female("F");
にして Male, Female を使う事を推奨。

M, F じゃ訳分からんのでついでに名前も変えた。

866 :デフォルトの名無しさん:03/05/09 01:31
>>863
本気でやっているなら、>>856は参考にしちゃいけません。

867 :デフォルトの名無しさん:03/05/09 01:33
>>862
main() は void main() ではなく int main() の略でフ。

>>864
VC6 でもエラーが出た気がする。
うろ覚え。
.NET でやっと main(), return 0 省略が通るようになった。

868 :850:03/05/09 01:34
>>865
なるほど、勉強になりますm(__)m

>>866
どうしてなのですか?

869 :デフォルトの名無しさん:03/05/09 01:35
>>864
あっ、そうです。警告でした。
一応どっちでも
main()
でコンパイルは出来てますが、警告されると気分が悪いのです。
bccでは最後に return 0;
と入れれば警告は出ないのか試してみます。
ありがとうございまいた。

870 :デフォルトの名無しさん:03/05/09 01:37
>>869
関数の戻り値の型を省略するとint型と見なされる。


871 :デフォルトの名無しさん:03/05/09 01:39
>>868
ttp://www.parashift.com/c++-faq-lite/newbie.html#faq-29.8

872 :デフォルトの名無しさん:03/05/09 01:40
>>870
それは C 。
C++ は main とコンストラクタ、デストラクタ、
キャスト演算子以外は戻り値の型を書かなければならない。

873 :デフォルトの名無しさん:03/05/09 01:41
>>872
そうだったの?

874 :850:03/05/09 01:42
>>871
もしかしてC++って英語必須なのですか(^^;;; ?

875 :デフォルトの名無しさん:03/05/09 01:43
むしろプログラミングは英語必須。

876 :デフォルトの名無しさん:03/05/09 01:45
プログラムに限らず英語必須

877 :デフォルトの名無しさん:03/05/09 01:45
でも条件付きコンパイルには必須だから、#defineは悪ってほどでもないよね。

878 :850:03/05/09 01:45
>>875
マジッスカ!!
これは思っていたよりハードル高いみたいで・・(;;

879 :g++ -ansi -pedantic -Wall:03/05/09 01:46
>>872:2: warning: ISO C++ forbids declaration of `main' with no type

880 :デフォルトの名無しさん:03/05/09 01:47
> main() must return int. Not void, not bool, not float. int. Just int, nothing but int, only int.
ワロタ。
くどすぎ。

881 :デフォルトの名無しさん:03/05/09 01:47
条件付コンパイル以外の用途は悪

882 :デフォルトの名無しさん:03/05/09 01:47
>>862ですが

main()

 return 0;
}

でbccでは警告が出なくなりました。
気分が良くなりました。
だからもう寝ます。ありがとう。

883 :デフォルトの名無しさん:03/05/09 01:47
>>880
ワラタ

884 :デフォルトの名無しさん:03/05/09 01:47
>>880
ワラタ

885 :デフォルトの名無しさん:03/05/09 01:48
>>882
intつけようぜ。たったの四文字(空白いれて)だぜ。

886 :デフォルトの名無しさん:03/05/09 01:53
意表を付いて

float main()

 return 0.0;
}

とかじゃ駄目?

887 :デフォルトの名無しさん:03/05/09 01:55
>>880って日本語で書いてあってもおもしろいのかなぁ。

888 :デフォルトの名無しさん:03/05/09 01:58
やっと>>880の英語読めました。

とにかく
int main()
じゃなきゃ駄目なんですね。

889 :デフォルトの名無しさん:03/05/09 01:58
mainの返り値はintなんだよvoidじゃねぇーんだよboolでもねぇんだよ
もちろんfloatでもねぇッ!intだよint以外ありえねーんだよぅ

890 :デフォルトの名無しさん:03/05/09 02:01
main の返り値は int です。
void でも bool でも float でもなく、int です。
絶対 int です。int 以外だめです。int しかだめです。

891 :デフォルトの名無しさん:03/05/09 02:01
そういうことですな

892 :デフォルトの名無しさん:03/05/09 02:03
いや、日本語訳はわかるんだけど、それを面白く感じられるのかなぁと思って。

893 :デフォルトの名無しさん:03/05/09 02:04
面白い、あげるよ

894 :デフォルトの名無しさん:03/05/09 02:09
/*
  この関数は、とにかくint型を返すんや!
  キャストして他の型で受ける事もできるんやけど、
  そんな事したらあかん!
  そんな事するヤツはヘタレや!ヨゴレや!
  男やったら、意地でもintで受けんかい!
*/
http://pc2.2ch.net/test/read.cgi/tech/1030169922/23

895 :デフォルトの名無しさん:03/05/09 02:12
なんかこう、jojo風に訳せないものか
「山吹色のオーヴァードライブintッ!!」とか

896 :デフォルトの名無しさん:03/05/09 02:14
int int int int int int int int int int int int int int int
int int int int int int int int int int int int int int int
int int int int int int int int int int int int int int int
int int int int int int int int int int int int int int int
int int int int int int int int int int int int int int int
int int int int int int int int int int int int int int int
int main!!!

やれやれだぜ......。

897 :デフォルトの名無しさん:03/05/09 02:23
void main()で問題が出た事は無い。
しかし、アフォな後輩がウザイのでしかたなくint main()にしている。
趣味のプログラムは全部void main()
この前それをもっていったらウザイ後輩が口出してきたが。

898 :デフォルトの名無しさん:03/05/09 02:24
unix でプログラミングしたことないの?

899 :デフォルトの名無しさん:03/05/09 02:25
ttp://msdn.microsoft.com/library/default.asp?url=/library/en-us/dllproc/base/creating_a_child_process_with_redirected_input_and_output.asp
M$ は main 変えるの好きだな。

DWORD main(int argc, char *argv[])
VOID main(VOID)


900 :デフォルトの名無しさん:03/05/09 02:25
C++だもん

901 :デフォルトの名無しさん:03/05/09 02:29
http://www.catnet.ne.jp/kouno/c_faq/c11.html
11.14に目を通しておきなよ

902 :デフォルトの名無しさん:03/05/09 03:17
得意げな顔をして何が「void main()」だ。void といいたいだけちゃうんか。


903 :Kusakabe Youichi:03/05/09 10:07
呼びました? : )

904 :デフォルトの名無しさん:03/05/09 15:15
template の質問ですが

template <class T> class CC
template <typename T> class CC

class と typenameの違い教えてください。




905 :デフォルトの名無しさん:03/05/09 15:59
>>904
テンプレートの宣言での意味は同じ、というかどっちでもいいかと。
typenameはむしろ、テンプレートの中で明示的に型名だと指示するために使う方が多いと思うけど。

906 :デフォルトの名無しさん:03/05/09 19:44
>>904
どっちでも同じだけど、
ここにはクラス以外の型も入れることがあるので
class よりは typename の方が意味的に好み。
class って書いてても int とか入れれはするんやけど、
何か気持ち悪い。

907 :デフォルトの名無しさん:03/05/09 19:50
古い規格のころからつかってたから classをつかってたけど、
あるときtypenameってのがあるんだって気がついてからtypename
だけにスタイルを変えた。

でも、明示的に使い分けるのが、一番よさそうだね。

908 :デフォルトの名無しさん:03/05/09 20:28
>>880
声出してワラタ

909 :デフォルトの名無しさん:03/05/09 20:30
>>897
そいつはウザイ奴かもしれないが
アフォなのは確実にお前だ。

910 :デフォルトの名無しさん:03/05/09 20:37
mainの戻り値の問題は、以前かなり荒れたような気がするが。

911 :デフォルトの名無しさん:03/05/09 20:45
return 0; って C++ から正式に略せるようになったんだっけ?
ならもう void main の価値は完全に無くなったね。
だって、int main よりも 1 文字も多いんだよ!

912 :デフォルトの名無しさん:03/05/09 23:04
>>897
g++はvoid main()だと怒られてコンパイル通らないよ。

913 :デフォルトの名無しさん:03/05/10 07:49
C++で参照カウントを用いるタイプのスマートポインタを使いたいと思っています。
で、自作してもいいんでしょうが、もしパブリックドメインなライブラリがあれば
それを使いたいと思ってます。
Windowsに依存しないものがいいんですが、デファクトスタンダードになっている
ような有名なライブラリってあるのでしょうか。。。

914 :デフォルトの名無しさん:03/05/10 08:06
>>913
ttp://www.google.co.jp/search?sourceid=navclient&hl=ja&ie=UTF-8&oe=UTF-8&q=%22C%2B%2B%22+%E5%8F%82%E7%85%A7%E3%82%AB%E3%82%A6%E3%83%B3%E3%83%88+%E3%82%B9%E3%83%9E%E3%83%BC%E3%83%88%E3%83%9D%E3%82%A4%E3%83%B3%E3%82%BF

915 :デフォルトの名無しさん:03/05/10 08:25
昔のプログラムをコンパイルして実行したら、止まるべきところで止まらなくなっていました。
よく見ると、<iostream>では、バッファに何か残っていると、getch()で止まらないようです。
考えてみると、それもそうなのですが、みなさんどうしてるのでしょうか?
つまり、プログラム途中で「進めるにはキーを押してください」として止めるには
どうすればよいのでしょうか。

916 :大黒学:03/05/10 08:55
C++課外授業のアルファテストのお願い

新北野一丁目の大黒と申します。現在、「C++課外授業」と題する、
プログラミング言語としてC++を使用してプログラムの書き方につい
て解説する文章のアルファ版をHTTPで公開しております(データの形
式はLaTeXのソースです)。この文章を、間違った記述がなくてしか
も理解しやすいものにするために、できるだけ多くの人に読んでいた
だいて、ご意見、ご感想、誤りの指摘などを頂戴したいと思っており
ます。なにとぞよろしくお願い申し上げます。

C++課外授業version alpha39
http://www.gin.or.jp/users/daikoku/cpp/cjugyou.tex

前バージョンからのおもな変更点
* 第16章「配列」に、第16.1節「配列の基礎」を追加しました。


917 :デフォルトの名無しさん:03/05/10 09:26
読みたいけど、TeX 入れてないからパス...、っていう奴は多いと思う。

918 :デフォルトの名無しさん:03/05/10 09:42
dviかpsかpdfにしてくれれば読むよ。
TeXのソースは人に見せるもんじゃないってことをわかってください。


919 :デフォルトの名無しさん:03/05/10 09:48
>>917



920 :デフォルトの名無しさん:03/05/10 10:32
>>916
PDF版はこれ?
http://www.gin.or.jp/users/daikoku/cpp/cjugyou.pdf

921 :デフォルトの名無しさん:03/05/10 11:16
C++標準文字列は何を使えば良いでしょう?

組み込みコンパイラ、VC++、BCBの全てで使えるヤシ。

922 :デフォルトの名無しさん:03/05/10 11:20
>>921
std::string と言いたいところだが

>組み込みコンパイラ

char* でも使っとけ

923 :921:03/05/10 11:24
thanx!>>922
実はBCBでふつーにstring使ってたのに、
MFCで使えないからstringって標準じゃないと勘違いしちゃった。
試しにMFCでstd::string使ってみるYO!

924 :デフォルトの名無しさん:03/05/10 11:58
C++を使うにしても、継承とか多態性とか使わなくても、
単純にデータや手続きのカプセル化とか、
コーディングをすっきりまとめやすいっていう安易な考えで
C++使うのはありでしょうか?

925 :デフォルトの名無しさん:03/05/10 12:00
アンチパターンに陥らないように気をつけな。

926 :デフォルトの名無しさん:03/05/10 12:47
ttp://www.gin.or.jp/users/daikoku/cpp/
にあるpdfでいいの?
よくわからんけど。

927 :デフォルトの名無しさん:03/05/10 12:49
ありだよ

928 :デフォルトの名無しさん:03/05/10 12:58
順子、修作、桐絵、光雅って、誰ってのはおいといて切り口は悪くないと思う。

各章のはじめに、ここで何を説明しようとしてるのか、どのような目標があるのかを
書いておくと、読みやすくなるよ。
そこらの教科書と同じね。

内容の正確性は、まだ読んでないからわからない。
でもちょっと怪しい気もする。

929 :921:03/05/10 13:04
引数の省略とかしたくて、

func(std::string sout1, std::string sout2, std::string sout3) {
if (sout1 != NULL) sout1 = ""; //代入
if (sout2 != NULL) sout2 = ""; //代入
if (sout3 != NULL) sout3 = ""; //代入
}
って、やりたいんですが、エラーです。
C++の演算子のオーバーロードの弊害でつか。どうしよう。

930 :デフォルトの名無しさん:03/05/10 13:09
>>929
引数の省略がやりたいんなら、素直に↓ってやっとけ。
func(std::string sout1="", std::string sout2="", std::string sout3="");

931 :デフォルトの名無しさん:03/05/10 13:11
何でNULLと比較してるの?
何でNULLと比較してるの?
何でNULLと比較してるの?

少なくとも300ページ以上の本を探して索引で「デフォルト引数」のとこを
探して読んでみなさい。


932 :921:03/05/10 13:19
>>930-931

>func(std::string sout1="", std::string sout2="", std::string sout3="");
この場合って、関数内で、sout1に代入してもメモリ破壊されませんか?

933 :デフォルトの名無しさん:03/05/10 13:23
func(char *sout = "", ...)

みたいな引数だったら、かなりの確率で問題が発生する。
君の心配しているように未定義の動作になる。

std::string sout = "" なら平気。
stringは代入演算子で渡された文字列のポインタを保存するわけじゃなくて、
そのつど専用の領域を必要なサイズで確保して、そのコピーをもつ
仕組みになってるから。

soutって名前からして、結果を格納するつもりなんだろうけど
それなら
std::string &sout で受け取るべきじゃないのか?

934 :921:03/05/10 13:46
>std::string &sout で受け取るべきじゃないのか?
うわ、その通りでした。

今まで、AnsiStringばかりを使ってたつけが...

intを文字列にしてstringに渡す方法が分からないでつ。

935 :デフォルトの名無しさん:03/05/10 13:54
string hoge(IntToString(value).c_str);

936 :デフォルトの名無しさん:03/05/10 14:40
int n;
std::stringstream ss;
std::string s;

ss << n;
s = ss.str();

もしくは

int n;
char buf[100];
std::string s;
sprintf(buf, "%d", n);
s = buf;

もしくは

int n;
std::vector<char> buf(100);
std::string s;
sprintf(&buf[0], "%d", n);
s = &buf[0];

いんすこ大変だけどboostを使えば簡単
ttp://www.kmonos.net/alang/boost/classes/lexical_cast.html


937 :921:03/05/10 16:20
int n;
>std::stringstream ss;
>std::string s;
>ss << n;
>s = ss.str();

こちらがC++っぽいんですが、何か行数多いですね。
atoiの逆のitoaが無い問題がC++でも解決してないような...

938 :デフォルトの名無しさん:03/05/10 16:49
>>937
あほか。 行数が多くて嫌なら関数にでもしろよ。

>atoiの逆のitoaが無い問題がC++でも解決してないような...
この行は訳がわからん。 解決してるだろ?

939 :デフォルトの名無しさん:03/05/10 17:36
#include <xxx>
xxxのところに、string.hを指定すると、string.hファイルが挿入されますよね。
では、stringを指定すると、string名前空間の定義が挿入されるのでしょうか?
どなたか教えてくださいませ。

940 :デフォルトの名無しさん:03/05/10 17:41
>>939
#include <string>するとC++のstringヘッダが読み込まれます。
#include <cstring>するとstd名前空間内にstring.hが読み込まれます。

941 :デフォルトの名無しさん:03/05/10 17:49
xxxstreamは想像以上に遅いので、
何度も呼び出すようなら素直にsprintfを使え

942 :デフォルトの名無しさん:03/05/10 17:51
>>941
実装次第です。あなたの環境が全ての人の環境というわけではありません。

943 :デフォルトの名無しさん:03/05/10 17:55
うへへ、そうだね。
sprintfの方がより遅い実装になってるとも限らないからね。
見たことないけどね。
iosの実装が甘いサブセットなstlならそうかもね。


944 :939:03/05/10 18:06
>>940
即レスサンクスです。
よく分かりました。ありがとうございました。

945 :デフォルトの名無しさん:03/05/10 18:08
STLが使いたいから、と言う理由で
CではなくてC++を選択するのはありでしょうか?


946 :デフォルトの名無しさん:03/05/10 18:09
それくらい自分で考えて下さい

947 :デフォルトの名無しさん:03/05/10 18:17
意見ぐらい聞かせてくれたってよさげ。


948 :デフォルトの名無しさん:03/05/10 18:20
C++に変えることで発生するリスクもあるから、よーく考えてからやれ

949 :デフォルトの名無しさん:03/05/10 18:21
>>945
ありです。
あと、より安全な C としても使えます。
たとえば、char * を使わずに std::string を使うとか。


950 :デフォルトの名無しさん:03/05/10 18:23
個人でやるなら全然問題ないけど
仕事でやる場合、手直ししないと使えない旧来のコードがあったり
C++やSTLがわからないかわいそうな人がいたりするからよーく考えてからやれ。


951 :デフォルトの名無しさん:03/05/10 18:54
みなさんどうもです。C++よさそうですね。
あくまでも開発ツールですから、いいものは積極的に
取り込んでいこうと思います。
かわいそうな人たちは、かわいそうですが、
向上心が無いということでおいていきます。
それが会社の方針なので(w

952 :デフォルトの名無しさん:03/05/10 22:03
実数型 float で符号ありのときの最小の絶対値は幾らでしょうか?
環境はリナックスです。
助けて下さい。

953 :デフォルトの名無しさん:03/05/10 22:06
0?

954 :デフォルトの名無しさん:03/05/10 22:06
リナックスしらんが、サイズを調べりゃいいんでないの?

955 :デフォルトの名無しさん:03/05/10 22:07
最大の間違えじゃないかな・・・

956 :デフォルトの名無しさん:03/05/10 22:17
>>952
> 実数型 float で符号ありのときの

float が実数型でないとか、符号なしの処理系があるのか ?

それはさておき、0 以外のってことだろうな。

#include <float.h> して、FLT_MIN じゃないかな。

957 :952:03/05/10 22:38
意味が分からない事言っててすみません。
0以外で御願いします。

int zero,mainasu;
float a,b,c;
zero=0,mainasu=(-1);
a=0.01,b=0.0001;
c=(a-b)/a;
if(c<zero){
c=c*mainasu;
}

aもbも更には,cも思い切り小さくしたいのです。
論理的に考えてc<aとc<bのような...

ソースには
#include <stdio.h>
以外入れたくありません。

958 :デフォルトの名無しさん:03/05/10 22:40
>>952
絶対値の定義。

|A| = ( A > 0 ) ? A : -A;

よって最小の絶対値は0。
終了

959 :958:03/05/10 22:42
|A| = ( A >= 0 ) ? A : -A;

こうだな。

960 :デフォルトの名無しさん:03/05/10 22:48
>>957
> 意味が分からない事言っててすみません。

というより、

> #include <stdio.h>
> 以外入れたくありません。

の方が意味不明。

961 :デフォルトの名無しさん:03/05/10 22:50
中卒の予感スレの予感。

962 :デフォルトの名無しさん:03/05/10 22:52
>>961
日本語変だYO!

次スレまだ〜???

963 :デフォルトの名無しさん:03/05/10 23:04
あと3日でちょうど1ヶ月。

964 :952:03/05/10 23:23
C言語の書き方しか知らないです。
C++の書き方知らないです。
でも使っているのはC++のはずです。

>>957では
aとbの具体的な値を書いてるけどほんとは式で出ます。
a>bにもa<bにもなりえる。そのうちaとbの値が収束する。
aとbの相対誤差を求めてる。相対誤差は絶対値
cは相対誤差でそれを収束の条件にする。
相対誤差をとにかく小さくしたい。

while(c<0,0)

なんて書いたらいつまで経っても計算が終わらないので困っているのです。
#include <stdio.h> 以外は使ったことないのです。

助けて下さい。

965 :952:03/05/10 23:25
>>964
>while(c<0,0) は

while(c<0.0)

の書き間違いです。すみません



966 :デフォルトの名無しさん:03/05/10 23:27
while(c<0,0)
while(c<0.0)

0.1bit位間違ってたのかな…

967 :デフォルトの名無しさん:03/05/10 23:27
どれだけの相対誤差にしたいかの問題だと思うんだが

968 :デフォルトの名無しさん:03/05/10 23:27
>>965
while(c<=0.0)じゃないの?

969 :デフォルトの名無しさん:03/05/10 23:32
収束の条件は予め決めとくものだと思うんだけど。
機械の精度ギリギリまでやりたいなら、それでもいいけど
だったら<stdio.h>だけじゃ無理。

970 :952:03/05/10 23:49
>>968
そうでした。ごめんなさい。

定数係数の2階線形微分方程式を解こうとしてます。
俺はアホです。逝ってきます。

971 :デフォルトの名無しさん:03/05/10 23:56
じゃあこの話題はおしまいと・・・


972 :952:03/05/11 00:12
本当に申し訳ありませんでした

今確認したところ

while(c<=0.0)

って書いてませんでした。"<="の"="を抜かしてました。
ちゃんと書き直したら収束しました。本当にすみませんでした。

973 :デフォルトの名無しさん:03/05/11 00:17
おつかれさま

974 :デフォルトの名無しさん:03/05/11 00:18
ポインタをリストで扱って最後にdeleteをかけたいのですが
最後の--iがとても変な感じがしてしまいます。
何かもっと綺麗な上手い書き方はないでしょうか?

for( std::list<CPoint*>::iterator i = m_List.begin(); i != m_List.end(); ++i )
{
 delete (*i);
 i = m_TaskList.erase( i );//この時点で削除したiteratorは無効
 --i;//既に次のiteratorを指しているためforループの++iの為に一つ戻しておく
}

975 :デフォルトの名無しさん:03/05/11 00:23
1. 高精度で計算したければ float ではなく double を使う。
2. a が 0 の場合を考慮しなくてはならない。
  収束値が 0 から離れてると予想される場合でも
  収束するまでに運悪く 0 にならないとも限らない。
3. 絶対値は #include <math.h> して fabs を使う。

976 :デフォルトの名無しさん:03/05/11 00:23
while(!m_List.empty()){
delete m_List.back();
m_List.pop_back();
}

977 :デフォルトの名無しさん:03/05/11 00:26
1:
for( std::list<CPoint*>::iterator i = m_List.begin(); i != m_List.end(); ++i )
 delete (*i);
m_List.clear();

2:
for( std::list<CPoint*>::iterator i = m_List.begin(); i != m_List.end(); i = m_TaskList.erase( i )
)
 delete (*i);

3:
while( !m_List.empty() ) {
 delete (*m_List.begin());
 m_List.pop_front();
}

978 :デフォルトの名無しさん:03/05/11 00:27
>>974
++i
しなきゃいいだろ?

979 :デフォルトの名無しさん:03/05/11 00:28
>>976
eraseに拘りすぎていました。ありがとうございました。

980 :デフォルトの名無しさん:03/05/11 00:30
>>977-978
書き込んでいる間にレスが
こんなに色々な解決方法があるんですね。
++iとかほとんど決まり文句みたいに覚えていたので
とても参考になりました。ありがとうございました。

981 :デフォルトの名無しさん:03/05/11 00:31
>>978
センスなし

982 :デフォルトの名無しさん:03/05/11 01:42
>>915だけど。
みんななんで答えてくれないんだ。
わからないのか?ガカーリだよ。

983 :デフォルトの名無しさん:03/05/11 01:48
std::cin

984 :デフォルトの名無しさん:03/05/11 02:49
>>982
DOS なら
while(kbhit()) getch();
とかしてた気がする。
細かいとこ違うかもしれんけど、気にするな。

985 :デフォルトの名無しさん:03/05/11 02:51
> みんななんで答えてくれないんだ。
環境依存だから。ってことでよろしいいか?


986 :デフォルトの名無しさん:03/05/11 06:14
>>915>>982 scanfやcin等の標準入力とgetch等の直接コンソール入力は相性が
悪いです。>>915のはたぶん標準入力をした後すぐにgetchで止めようとしたと思う。
そうすると、標準入力したものがバッファから消える前にgetchのところに行って
しまう時がある。使うバッファは同じなので。逆にgetchで分岐入力見たいのを
した後、すぐに標準入力があると、getchで入力した文字が入力されている事がある。
止めるならgetcharを使って改行を押してください見たいにやればよいと思います。

987 :デフォルトの名無しさん:03/05/11 10:50
delete this;
ってやっていいの?

988 :デフォルトの名無しさん:03/05/11 11:05
その後メンバ変数を使ったりしなければ大丈夫。

989 :デフォルトの名無しさん:03/05/11 11:07
vc6で以下のコードがコンパイルできません(山のようにエラー)
vectorやstringなんかは使えるのでmapが原因のような気がするけど、
標準で入ってるSTLに付属してますよね?
だれかわかる方いますか
あとgccでは普通にコンパイルできます

#include <iostream>
#include <string>
#include <map>
using namespace std;
int main(void){
map <string,string> ma;
ma.insert(pair<string,string>("mona","giko"));
cout << ma["mona"] << endl;
return 0;
}


990 :デフォルトの名無しさん:03/05/11 11:12
>>989
エラーメッセージぐらい自分で嫁。

991 :デフォルトの名無しさん:03/05/11 11:22
>>987
インスタンスをnew以外で作成するのを禁止できないので、あぶない。

992 :989:03/05/11 11:23
>>990
#pragma warning(disable:4786)
エラーメッセージの識別子が'255'文字・・っていうので検索すると解決しました
すいませんでした



993 :デフオルトの名無しさん:03/05/11 11:29
    \∧_ヘ     / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
,,、,、,,,  / \〇ノゝ∩ < 1000とり合戦いくぞゴルァ!!       ,,、,、,,,
    /三√ ゚Д゚) /   \____________  ,,、,、,,,
    /三/ | ゚U゚|\      ,,、,、,,,                       ,,、,、,,,
 ,,、,、,,, U (:::::::::::)  ,,、,、,,,         \ ぶーぶーぶー /
      //三/|三|\              タリー
      ∪  ∪    (\_/)タリー    タリー   次スレまだ〜?
               (  ´Д)    タリー  タリー
               /   つ  (\_/)   (\_/)ノ⌒ヽ、
              (_(__つ⊂(´Д`⊂⌒`つ(´Д` )_人__) ))

994 :デフォルトの名無しさん:03/05/11 11:34
>>992
おいおい、それはエラーじゃないだろ

995 :デフォルトの名無しさん:03/05/11 11:45
>>991
禁止できるし

996 :デフォルトの名無しさん:03/05/11 11:50
#include <boost/mpl.hpp>

997 :デフォルトの名無しさん:03/05/11 11:50
#include <this>

998 :デフォルトの名無しさん:03/05/11 11:50


999 :デフォルトの名無しさん:03/05/11 11:51
umee

1000 :デフォルトの名無しさん:03/05/11 11:51
D言語に乗り換えます

1001 :1001:Over 1000 Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。

217 KB
★スマホ版★ 掲示板に戻る 全部 前100 次100 最新50

read.cgi ver 05.02.02 2014/06/23 Mango Mangüé ★
FOX ★ DSO(Dynamic Shared Object)