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


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

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

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

2 名前:デフォルトの名無しさん :03/06/09 21:38
よくやった感動した

3 名前:v(^・^)v :03/06/09 21:38
■基本■
[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++日本語リンク集があります。

4 名前:デフォルトの名無しさん :03/06/09 21:39
>>1
おつ

5 名前:デフォルトの名無しさん :03/06/09 21:39
>>1


6 名前:v(^・^)v :03/06/09 21:39
■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/~s31552/wp/boost/
news news:gmare.comp.lib.boost.devel

7 名前:デフォルトの名無しさん :03/06/09 21:39
>>1
z

8 名前:v(^・^)v :03/06/09 21:39
■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/

9 名前:v(^・^)v :03/06/09 21:40
■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/library/default.asp?url=/downloads/list/netdevframework.asp
[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/
[OpenWatcom]
http://www.openwatcom.org/
[Comeau]
http://www.comeaucomputing.com/
[intel C++ Compiler]
http://www.intel.com/software/products/compilers/
[metrowerks]
http://www.metrowerks.com/mw/default.htm

10 名前:v(^・^)v :03/06/09 21:41
■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/
数値計算ライブラリとして人気がある、らしい
antlr http://www.antlr.org/
flex++ Bison++ http://www.idiom.com/free-compilers/TOOL/BNF-15.html
パーサジェネレータ

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

11 名前:v(^・^)v :03/06/09 21:41
■過去スレ■
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/tech/kako/1041/10413/1041328679.html
part15 http://pc2.2ch.net/tech/kako/1043/10436/1043605481.html
part16 http://pc2.2ch.net/tech/kako/1045/10457/1045746245.html
part17 http://pc2.2ch.net/tech/kako/1047/10475/1047560042.html
part18 http://pc2.2ch.net/tech/kako/1050/10501/1050177746.html
part19 http://pc2.2ch.net/test/read.cgi/tech/1052625846/

12 名前:v(^・^)v :03/06/09 21:42
■関連スレ(テンプレートを用いたライブラリ中心)■
【C++】template 統合スレ -- STL/Boost/Loki, etc.
part1 http://pc2.2ch.net/tech/kako/1037/10377/1037795348.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
【C++】Boost使い集まれ!
http://pc2.2ch.net/test/read.cgi/tech/1033830935/l50

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

13 名前:Java! :03/06/09 21:42
Java!

14 名前:v(^・^)v :03/06/09 21:43
■関連スレ(環境依存の話題)■
[GCC]
GCCについて
part1 http://pc2.2ch.net/tech/kako/1007/10077/1007731543.html
part2 http://pc2.2ch.net/test/read.cgi/tech/1046179115/l50
祝・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/tech/kako/1045/10455/1045542179.html
part6 http://pc2.2ch.net/test/read.cgi/tech/1054280736/l50
タダで使えるBorland C++!
part1 http://pc3.2ch.net/tech/kako/1002/10023/1002377328.html
part2 http://pc2.2ch.net/tech/kako/1030/10304/1030493157.html
[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


15 名前:v(^・^)v :03/06/09 21:43
初心者に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

16 名前:デフォルトの名無しさん :03/06/09 21:44
>>1
おつカレー。

17 名前:デフォルトの名無しさん :03/06/09 21:46
>>1
あんがと

18 名前:デフォルトの名無しさん :03/06/09 21:53
1乙。
>>2 >>4 >>5 >>7
テンプレ割りこみはマズイよな。>>11はわざとだが。
なんか折れ、自治厨みたいだな。他スレ逝ってくる。

19 名前:デフォルトの名無しさん :03/06/09 21:54
>>11>>13だった。鬱氏。

20 名前:デフォルトの名無しさん :03/06/09 22:24
>>16
ムァー、今日は夜飯ぬいて寝るつもりだったのに、激しくカレー食いたくなった。

21 名前:デフォルトの名無しさん :03/06/09 23:43
>>13
ワラタがいい大人なんだからこういうことはやめような。

ところで前スレの標準化うんぬんについてだが、
標準化されてないと、プロジェクトによってはライブラリ使わしてくれんなんてこともある可能性があるから
可能な限り標準化してほしい。
あと、他人のソース読むときにいかにもコンテナってライブラリのソースを何度もみる羽目になりそーなのもいやだ。


22 名前:名無し :03/06/10 00:05
コンストラクタ中にデフォルトコンストラクタを呼び出したいんですけど、
どうすればいいですか?Javaだとthis();でできたんだけど

23 名前:7 :03/06/10 00:33
>>18
許してママン

24 名前:ぷらぷらー :03/06/10 00:35
>>22
struct A{
A(){}
A(int){
new(this) A;
}
};

25 名前:デフォルトの名無しさん :03/06/10 01:22
>>24
確かに呼ぶ事はできるけど、
基底クラスのコンストラクタが二度呼ばれない?

26 名前:デフォルトの名無しさん :03/06/10 01:35
2度呼ばれます。

>>22
答えはこちら
ttp://www.parashift.com/c++-faq-lite/ctors.html#faq-10.3

27 名前:デフォルトの名無しさん :03/06/10 02:14
>>26
だよねー。
C++ も別のコンストラクタを綺麗に呼ぶ構文くらい
作ってくれよなー、と言いたい。
基底クラスのコンストラクタが二度呼ばれるようなものか、
初期化指定子に書いてあるものが無視されるものか、
どちらか1つなんてイヤン。

28 名前:デフォルトの名無しさん :03/06/10 02:25
>>27
「コンストラクタの実行完了」を以って
「オブジェクトの構築完了」とするルールがあるので、
そう簡単に作れるものではない。

29 名前:デフォルトの名無しさん :03/06/10 08:56
>>28
初期化指定子のみ継承する構文と、内容を呼ぶ構文と、
両方用意すればいいんじゃないかなぁ。

30 名前:デフォルトの名無しさん :03/06/10 11:21
>>27
> 初期化指定子に書いてあるものが無視される
どうやったらこんなことになるのですか?

31 名前:デフォルトの名無しさん :03/06/10 12:37
struct A{
A(){
hoge();
}
A(int){

hoge();
}
hoge(){
}
};
でごまかしちゃダメかしらん。


32 名前:デフォルトの名無しさん :03/06/10 16:03
初心者ですみません。
c++は型のチェックが厳格ということで使い始めたのですが、
代入や引数の渡しでdoubleにintやcharが代入できたりして
しまうのですが、これで厳格な型チェックといえるのでしょうか?


33 名前:デフォルトの名無しさん :03/06/10 16:05
doubleにintやcharが代入できて何か不都合が?

34 名前:32 :03/06/10 16:10
>>33
初心者なものでまだ不都合に出くわしてないのですが、
c++コンパイラがどんな基準で型チェックを行っているのか
が仕様がわからなかったもので。
数値型間なら上位型へは自動キャストするとかいうのなら
分かるのですが、doubleにcharを入れるときなどはキャスト
指定させるべきなのではと思いまして。
またコンパイラのオプションで型チェックの厳密性を設定
できたりするのでしょうか?

35 名前:デフォルトの名無しさん :03/06/10 16:13
charも数値ですが・・・

36 名前:デフォルトの名無しさん :03/06/10 16:15
charも数値型なんだが。

37 名前:デフォルトの名無しさん :03/06/10 16:17
>>34
charは"1文字を表現できる値範囲を持つ数値型"っていう感じ。
C/C++は厳密な意味での"文字型"というもの自体が無いよ。

38 名前:34 :03/06/10 16:28
>>35,36,37

39 名前:34 :03/06/10 16:29
>>35,36,37
レスありがとうございます。
そういうことなんですネ。

40 名前:鈴木健一郎 (NT4.0/2000/XP) :03/06/10 16:58
C++の質問:

参照型っておおよそどんなものかは分かるんですが、具体的には
どのような使い方をするんですか? デバッグ専用?

41 名前:デフォルトの名無しさん :03/06/10 17:12
>>40がなぜ「デバッグ専用?」と考えるに至ったか知りたい。

42 名前:デフォルトの名無しさん :03/06/10 17:23
>>40
コピーコンストラクタ

あと、個人的(?)には引数で const xxx * の代わりに const xxx &
呼び出し側からみるとポインタで渡してる場合は内容をいじってるとか区別がつくので。

43 名前:デフォルトの名無しさん :03/06/10 20:16
10進数を2進数に変換するやり方は分かったのですが
8進数や16進数に変換するやり方がどうしてもわかりません。
一つ一つの数値を配列に入れて表示させればイイと思うのですが・・・

教えてエロイ人(*´Д`)人

44 名前:デフォルトの名無しさん :03/06/10 20:22
宿題なら宿題スレへ

45 名前:デフォルトの名無しさん :03/06/10 20:31
>>43
G(o^−^o)gle < 検索しようね

46 名前:デフォルトの名無しさん :03/06/10 21:29
std::cout<<std::hex<<10<<' '<<std::oct<<10<<std::endl;

47 名前:デフォルトの名無しさん :03/06/10 21:36
     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉


     ∧_∧
ピュ.ー (  ^^ ) <これからも僕を応援して下さいね(^^)。
  =〔~∪ ̄ ̄〕
  = ◎――◎                      山崎渉


(^^)

48 名前:デフォルトの名無しさん :03/06/10 22:25
デカいテキストファイルを高速に開くのってどうすればいいんだろ。
char ch[9999];
while ( MyFile.getline(ch, 9999) ) {
 mBuffer = mBuffer + ch + "\n";
}
だと遅いんでつよ。
なんか他に方法あると思うんだけど。

49 名前:あぼーん :03/06/10 22:27
http://homepage.mac.com/hiroyuki44/hankaku03.html

50 名前:デフォルトの名無しさん :03/06/10 22:31
>>48
コンピュータの処理速度を上げる


51 名前:デフォルトの名無しさん :03/06/10 22:32
>>48
思いっきり遅くなる原因が含まれているような気がするにょ。

52 名前:デフォルトの名無しさん :03/06/10 22:32
cstdio
fread
setvbuf
あたりで調べる

53 名前:デフォルトの名無しさん :03/06/10 22:33
mBuffer = mBuffer + ch + "\n";

mBuffer += ch;
mBuffer += "\n";

多少速くなるよ。

54 名前:デフォルトの名無しさん :03/06/10 22:34

mBuffer = mBuffer + ch + "\n";

なかなか高度なネタですね…

55 名前:デフォルトの名無しさん :03/06/10 22:39
環境によってmmapかCreateFileMapping使ってそのまま
mBuffer = static_cast<char*>map;
でok

56 名前:デフォルトの名無しさん :03/06/10 23:10
質問おながいします。
クラスの関数にアクセスするのに
@CHoge::Func()
Athis->Func()
BFunc()
この3つでは意味が違うのでしょうか?またパフォーマンスに
違いはあるのでしょうか?(自分はVCなのですが自動メンバ
が出てほしいのでAで行ってしまうのですが...)

57 名前:デフォルトの名無しさん :03/06/10 23:11
>>51-55
なるほど。いろいろ方法はあるんですね。サンクスです。

いま気付いたんだけど、mBufferをstringにしてるから最強に遅くなるぽい。
こういうところで使っちゃいかんのかな。

58 名前:デフォルトの名無しさん :03/06/10 23:23
質問です。
class Test{
enum {NUM=10};
static int data[NUM];
};
このようなクラスを作ります。このとき、data[]を定義するときに
static Test::data[]={0, 0, 0, 0, 0, 0, 0, 0, 0, 0}
これしか方法はありませんか?これだとNUMを変えたときに、定義も書き換える
必要がありますよね。なにか、スマートな書き方はありますか?


59 名前:デフォルトの名無しさん :03/06/10 23:26
static なら黙ってても全要素 0 で埋めてくれるのでは。

60 名前:デフォルトの名無しさん :03/06/10 23:31
黙ってても てのは明示的に0で初期化しなくてもよいという意味で。

61 名前:デフォルトの名無しさん :03/06/10 23:37
>>58
いまいちやりたいことがわかんないな。

62 名前:デフォルトの名無しさん :03/06/10 23:45
>>56
もし Func が仮想関数で、
CHoge から派生したクラスでそれをオーバーライドしてた場合、
1は2&3とは違う。
2と3は多分常に同じ。
パフォーマンスは気にしなくていい。

ただ、自動的にメンバリストを出すのって、
this-> 以外でも何か方法なかったっけ?
最近 VC 使ってないんで忘れたけど。

63 名前:デフォルトの名無しさん :03/06/11 00:02
>>58
static Test::data[]={0};
って書くと、不足分は0で初期化される。
あと、
memset( Test::data, 0, sizeof Test::data );
ってやってもいい。

最も重要なのは、スタティックメンバTest::dataが、
ほんとに必要なのかどうかを再検討することだ。


64 名前:56 :03/06/11 00:15
>>62
レスどうもです。m(__)m
書籍の例とかはほとんどBで書いているので不安
だったのですが見づらいからなんですかね。
あと仮想関数があるから@も意義があるのですね。

自動メンバはメニューとショートカットにもありました(^^);;


65 名前:デフォルトの名無しさん :03/06/11 00:20
>>56
仮想関数、継承について勉強することをお勧めする。
あと、関数のスコープについても。

66 名前:56 :03/06/11 00:26
>>65
どもどもです。
勉強しま〜す。

67 名前:デフォルトの名無しさん :03/06/11 00:32
>>59, 63
どうも、ありがとうございます。

スタティックメンバを使うのって、設計の仕方としてはだめなんですか?

あるメンバ関数の戻り値を決めるときに、自分自身のデータだけでなく、別の
インスタンスのデータも必要なときに使おうと思ったんです。例えば、自分自身の
データが作成されたインスタンスのデータの平均値よりも大きいかどうかを
返すメンバ関数とかです。
class Test{
 static Test* tests[100];
 int value;
public:
 bool IsOverAve();
}
こんな感じで、コンストラクタは呼ばれたときに、自分自身のポインタを配列の
あいているところに登録するようにします。

こうしておけば、うまくいくように思ったんですが・・・。

68 名前:デフォルトの名無しさん :03/06/11 00:39
>>57
> いま気付いたんだけど、mBufferをstringにしてるから最強に遅くなるぽい。
> こういうところで使っちゃいかんのかな。

stringが中で何をやっているかを理解すれば、
皆がキミのコード見て卒倒しそうになった(笑)理由も理解できると思うにょ。

69 名前:デフォルトの名無しさん :03/06/11 00:52
>>67
static メンバにしたら「唯一」しか存在しなくなっちゃうから、
2 つ作りたいなー、ってときに困る。
2 つ作ることは無いな、ってものだけ static メンバにする。

その例の場合はそれが何の比喩か分からないので微妙だけど、
確かにそういう感じのことをするときに static メンバを使うことがある。
もしそういうデータの集合を複数扱いたい場合は、
データの集合とデータとでクラスを分けると良い。

70 名前:デフォルトの名無しさん :03/06/11 01:05
>>67
何故それを static にする必要があるのか、というかそういう思考になってしまうのか謎だな。
クラスの汎用性も拡張性もすべてパーだ。

Test のインスタンスを保持するような別のクラスを作って、
平均値だのなんだのっていう処理はそっちに任せれば?

71 名前:100人に1人 :03/06/11 19:10

◎人の嫌がることをズケッと言うのはこんな奴!
<アスペルガー症候群(自閉症スペクトラム)←脳の機能的疾患(遺伝が要因)>
●変化を嫌う
http://web.kyoto-inet.or.jp/org/atoz3/kado/book1/Williams-Asp.htm

●接し方のルールがわからず無邪気に周囲の人に対して迷惑なことをしてしまうことがある。人を傷つけるということには鈍感(相手の立場に立って考えられない)。
●パターン的行動、生真面目すぎて融通が利かない
 毎朝の通学電車では同じホームの同じ場所から、同じ時間の同じ号車に乗ることに決めていたりする。パターンを好むということは反復を厭わないことでもある。
●アスペルガー症候群の子どもは(大人も)感覚刺激に対して敏感。敏感さは聴覚、視覚、味覚、嗅覚、温痛覚などのいずれの感覚の敏感さもありえる(特に視覚が敏感)。
●アスペルガー症候群の子ども(大人も)は予測できないことや変化に対して苦痛を感じることが多い。
http://www.autism.jp/l-02-03-aspe3.htm

●独り言を言うことが多い(考えていることを口に出す)
●物事をいつまでも同じにしておこうとする欲求が強く、そうでないと非常に不安。いわゆる「こだわり」。
●自発的に行動することが少なく、興味の幅が狭い
●物まねをしているような不自然な言語表現
●自閉症スペクトラム全体としては一万人に91人(およそ100人に1人)。
http://www.ypdc.net/asuperugar.htm

★自閉症スペクトラムの考え方(アスペルガーに至らない気質の偏りもある(遺伝性))
http://www.imaizumi-web.com/030413.html  
   
★アスペルガー症候群(自閉症スペクトラム)かどうかのテスト
http://twitwi.s10.xrea.com/psy/add.htm 
http://www.geocities.co.jp/Beautycare/5917/as/marksheetmake.html




72 名前:デフォルトの名無しさん :03/06/11 19:13
巨大なメモリ(数十MB)を動的に確保することは可能でしょうか?
   long **Data;
try{
Data = new long *[4000];
for (int i = 0; i < 4000; i++){
Data[i] = new long [4000];
}
}
catch (bad_alloc) {
cout <<, "割り当てができません。これで終了します。";
exit (-1);
}
とすると、特に異常なメッセージは出ません。
しかし、Data[i][j] に代入するとき、死にます。なぜでしょうか?


73 名前:デフォルトの名無しさん :03/06/11 19:30
>>72
VC6 だとしたら、VC6 は new が失敗した時に
bad_alloc 例外を投げずに NULL を返す仕様になっているので、
NULL を参照して死にます。

STL なんかも new が bad_alloc 例外を投げることを前提に書かれてるので、
そのまま使ってるとメモリフルの時に NULL を参照して死にます。

_set_new_handler でも使って
new が失敗した時には bad_alloc を投げるように設定するがよろし。

あと、new(nothrow) も対応してなかったと思う。

74 名前:デフォルトの名無しさん :03/06/11 19:45
ありがとうございます。コンパイラーは C++ Builder Ver 4を使ってます。
bad_alloc例外が出されるのは確かです。というか、上のソースは、
BCBのヘルプから、そのまま取ってきています。
変えたのは、配列の大きさだけです。

Cだと、64KB以上のメモリを確保する場合には
malloc ではなく farmalloc を使い、farポインターでアクセスする
とかいうのがありますよね。C++ のnew でもそういうことがあるのでしょうか?

75 名前:デフォルトの名無しさん :03/06/11 19:49
>>74
64KうんぬんはCとかC++とかいう話ではない。
言語とは関係なく、16bit DOS用コンパイラの場合の制約だよ。

76 名前:デフォルトの名無しさん :03/06/11 19:49
>>74
ヘルプが常に正しいとは限らない...。
とはいえ、BCB4 を使った事無いので実際どうなのか分からない...。

try {
 int* a = new int[0x7FFFFFFF];
 if(a == NULL) {
  cout << "NULL です" << endl;
 }
} catch(bad_alloc&) {
 cout << "bad_alloc です" << endl;
} catch(...) {
 cout << "その他の例外です" << endl;
}

これで何て表示されるか確かめてみ。

77 名前:デフォルトの名無しさん :03/06/11 19:57
「bad_alloc です」と出ました。

78 名前:デフォルトの名無しさん :03/06/11 19:58
うちは「その他の例外です」とでた。

79 名前:デフォルトの名無しさん :03/06/11 19:59
何も表示されない強者はいるか?

80 名前:デフォルトの名無しさん :03/06/11 20:02
NULL @ VC6

81 名前:デフォルトの名無しさん :03/06/11 20:03
っというか、delete [] a; 入れとけよ!

82 名前:デフォルトの名無しさん :03/06/11 20:04
>>81
どうせ失敗するしすぐに終了するからいいYO!

83 名前:デフォルトの名無しさん :03/06/11 20:05
えっと、>76 のプログラムの後、Data[i][j]に値を代入していき、
どこでエラーが出るか確かめました。
(76では、配列の大きさを[4000][4000]と書きましたが、
実際には[4097][4097]でテストしました)

その結果、16388番目までは代入可能。16389番目に死にます。
(つまり、[3][4097]まではOK、[4][0]で死ぬ。)
65552バイト以降のメモリーがおかしいようですが、なぜでしょうか?

84 名前:デフォルトの名無しさん :03/06/11 20:06
>>83
sizeof(int)はいくつ?

85 名前:72 :03/06/11 20:08
間違えました。
83に書いた「76のプログラムで」は「72のプログラムで」です。

あと、例外はbad_allocが出ることを確認しました。
>76で。

86 名前:デフォルトの名無しさん :03/06/11 20:09
C++ Builder なら Win32用だし sizeof(int)=4なはずだが。
Borland C++ Ver.4の間違いじゃないよな? (笑)

87 名前:72 :03/06/11 20:10
>84 int, long ともに4です。確認しました。

88 名前:C++しらん :03/06/11 20:12
catch (bad_alloc)とcatch (bad_alloc&)って違うの?

89 名前:デフォルトの名無しさん :03/06/11 20:14
んー。待てよ。

bad_alloc 捕まえた後に delete してないから
メモリが足りなくて cout や exit が
変な挙動を示してるってことはない?
>>72 の例は小分けに確保してるので、
bad_alloc 捕まえた時点ではかなりメモリが使われてるけど、
>>76 の例では一気に確保してるので
bad_alloc 捕まえた時点ではメモリの確保は行われていない。

カウンタ変数 i を try の外に確保して、
catch 内で Data[i - 1] から Data[0] まで delete [] して
Data を delete [] して、
その上で cout とか呼んでみ。
あと、cout の最後に << endl はしとこうな。

90 名前:72 :03/06/11 20:16
もしかして、でかいメモリー空間を使う場合には
コンパイラーオプションをいじる必要があるとかいうことは
ありますか? いまはデフォルトで使ってます。
BCBスレで聞いたほうがいいかなあ

91 名前:デフォルトの名無しさん :03/06/11 20:17
overcommitは考えられないしな・・・

92 名前:72 :03/06/11 20:26
>89 こういうことでしょうか? 結果は >83 と同じでした。

#define MAXCH 4096

long **Data;
int i;
try{
Data = new long *[MAXCH+1];
for (i = 0; i < MAXCH+1; i++){
Data[i] = new long [MAXCH+1];
}
}
catch (bad_alloc) {
for (int j = i-1; j <= 0; j--){
delete [] Data[j]; Data[j] = NULL;
}
delete [] Data; Data = NULL;
cout << "割り当てができません。これで終了します。" << endl;
exit (-1);
}


93 名前:YUIS :03/06/11 20:26
「2chからきました」ってコメントに書いたら値引きしちゃうよ(^_^)v
↓↓↓
 http://www.dvd-yuis.com/

94 名前:デフォルトの名無しさん :03/06/11 20:28
>>92
j>=0 だよ。

95 名前:72 :03/06/11 20:29
あっ失礼。でも、結果は変わりませんでした。

96 名前:デフォルトの名無しさん :03/06/11 20:30
>>83
確保が4097なのに[4097]でアクセスしたら範囲外だべ

97 名前:72 :03/06/11 20:34
たびたびすみません。>96
[4096]でした。具体的には、

Data[3][MAXCH]++; printf("3MAXCHOK\n");
Data[4][0]++; printf("40OK\n");

とすると、「3MAXCHOK」表示後、死にます。
「40OK」は表示されません。

98 名前:デフォルトの名無しさん :03/06/11 20:37
>>97
そのまま1ファイルでコンパイルできるコード貼ってくれると確認しやすいのだが。
貼らなかった部分に問題あるかもしれんし

手元にはBCB6ならあるから試してみるか。

99 名前:デフォルトの名無しさん :03/06/11 20:42
Data を確保した後に、
Data[i] を NULL で初期化しておいて、
Data[i] の値を後から確認してみるのも手かと。
いちいちアクセスバイオレーションするのもアレだし。

100 名前:72 :03/06/11 20:43
みなさま、大変申し訳ございませんでした。
解決いたしました。>98さまのおっしゃるとおり、
別のところに問題がありましたです。
プログラムは無事動きました。
車に轢かれて逝ってきます。
                    ノ∩
                  ⊂    ヽ
                       /( 。A。 )っ
    __________  U ∨ ∨
  / 000    /    ・@;∴‥
 /______/______:: :|
__||  ∧ ∧     .||__   |:: ::||.|
|::||. (゜Д゜ )     .||::| :  :'| ||:|
.~|| ⊆⊇、 )     ||O :::: || ||:|
 || ̄゜ ̄ ̄゜|\/L~:: ̄ ̄| ̄|:|
 ||_=0.< ガ  >.___|_/|.!ニニニニニニニニニニl
...|00| 三 三Z  ン Z/⌒ヽ|__|:::::__:::::::/⌒ /⌒ヘ⊇
.〔⊆__[二]____|/\|〕_|.∴.|::|  | ||::||::::| |||||.∴.||| ∴.|ヘ
 ~ゞゝ__ノ ̄ ̄ ̄~ ゞゝ∵ノ ̄.ゞゞゝノ ̄ゞゞゝ∵ノゝ∵ノ

101 名前:デフォルトの名無しさん :03/06/11 20:46
>>100
解決してよかったね。
ところで std::vectorとか boost::multi_arrayつかうと便利かもよ

102 名前:72 :03/06/11 20:58
>101 ありがとうございます。後で調べてみます。
恥をかいたついでに、書きますが、はじめは↓のようにしてました。
InitData()の中身をmain に書いたら、無事に動きました。
動的に確保する内容を、メイン以外の関数には書けないのでしょうか?
(←そんなことは無いと思うが)

void InitData(long **Data){
// 中身は >92
// メモリを動的に確保
}

main関数内で
{
long **Data;
InitData(Data);
// このあと、Data[i][[j]に代入する関数を呼ぶ
}


103 名前:デフォルトの名無しさん :03/06/11 21:00
>>102
void InitData(long ***Data){

InitData(&Data);

普通は
long **InitData(void){

Data=InitData();

104 名前:デフォルトの名無しさん :03/06/11 21:01
>>102
(´д`)
Dataが値渡しじゃん。結果が呼出元のDataに反映されてない。
void InitData(long **&Data){...}になってれば反映はしただろうが。

105 名前:デフォルトの名無しさん :03/06/11 21:07
vc6 なんだけど以下のソースでNEWMODE.OBJにリンクさせても、bad_alloc なげねー。
デバッグモードだとダイアログボックスでてきて、リリースモードだとNULLですが表示される・・・。
何がいくないんでそうか?

#include <new.h>
#include <new>

int hoge(size_t){
throw std::bad_alloc();
return 0;
}

int main(){
  _set_new_mode(1);//_set_new_handlerの下に書いても同じ
_set_new_handler( hoge );

try{
int* a = new int[0x3FFFFFFF];
if(a == NULL) {
  cout << "NULL です" << endl;
}

delete [] p;
}catch( std::bad_alloc& e){
cout << e.what() << endl;
return 1;
}
return 0;
}

106 名前:72 :03/06/11 21:10
できたー!
>103-104 できました! 103さんお勧めの方法で。
ありがとうございます。(よく理解できてないけど)
おなかがすいたので、今日はこれで帰ります。
おやすみなさい。

107 名前:デフォルトの名無しさん :03/06/11 21:45
_set_new_mode は使った事無いなー。

108 名前:デフォルトの名無しさん :03/06/11 23:56
テンプレートで、
template <int n> int add(int i) { return n + i; }
とするのと同様に
template <string s> void message(void) { cerr << s << endl; }
と定義して、message<string("hello world!")>(); などと関数を
生成できそうだと思うのですが、テンプレートの定義でエラーになってしま
います。何か根本的に勘違いしているのでしょうか?教えてください。

109 名前:デフォルトの名無しさん :03/06/12 00:15
>>108
template パラメータになれるのは、
「コンパイル時にプログラム全体で一意に決まる情報」 だけ。

> string("hello world!")
stringクラスのコンストラクタに文字列リテラル"hello world!"を
渡して呼び出した結果、というのはコンパイル時には決まらない。

110 名前:デフォルトの名無しさん :03/06/12 08:32
>>108
templateに使えるのは型か整数型のみなのだが。

111 名前:デフォルトの名無しさん :03/06/12 17:32
C++にモジュール名、クラス名、関数名、などに展開されるマクロはありますか?
あったらthrowで投げたいのですが・・・。

112 名前:デフォルトの名無しさん :03/06/12 17:32
あげ

113 名前:デフォルトの名無しさん :03/06/12 18:01
>>110
規格書を穴が開くまで読んでこい!
今はポインタと参照も可能になってるぞ。

>>111


114 名前:デフォルトの名無しさん :03/06/12 18:12
__FILE__や__LINE__みたいな奴のことかな

115 名前:自己レス :03/06/12 18:17
>>105
int* a = new int[0x3FFFFFFF];
ここの値(1回で得るメモリ量?)をあまり大きくしすぎると、動作不定になるっぽい。
ていうか、早くvc2003つかいてー。

116 名前:デフォルトの名無しさん :03/06/12 18:23
1GBもアロケートするのか

117 名前:デフォルトの名無しさん :03/06/12 18:28
4GBだろ


118 名前:111 :03/06/12 18:45
>>114
です。

119 名前:デフォルトの名無しさん :03/06/12 19:36
C99 なら関数名を返すマクロがあるんだけどね...。

120 名前:デフォルトの名無しさん :03/06/12 19:45
492 名前:111[sage] 投稿日:03/06/12 19:31
まずfor(;;)をwhile(1)にする

121 名前:デフォルトの名無しさん :03/06/12 20:00
>>113
え?今ってこんなのできんの。
template<typename T*>struct NonPtrType
{
    typedef T nonpointee_type;
}


122 名前:デフォルトの名無しさん :03/06/12 20:07
>>121
それは出来るが、それはまた別の話

123 名前:デフォルトの名無しさん :03/06/12 20:13
>>122
ほんと!
特殊部分テンプレートじゃなくともできるんですか。

124 名前:デフォルトの名無しさん :03/06/12 20:35
ありゃできなかったっけ。特殊化で不都合は何?

125 名前:113 :03/06/12 20:36
>>121
>>113 で言ったのは、
template<double* PD> struct ...
template<double& D> struct ...
ってのも可能ってこと。

126 名前:デフォルトの名無しさん :03/06/12 21:01
110 名前:デフォルトの名無しさん 投稿日:03/06/12 08:32
>>108
templateに使えるのは型か整数型のみなのだが。

113 名前:デフォルトの名無しさん 投稿日:03/06/12 18:01
>>110
規格書を穴が開くまで読んでこい!
今はポインタと参照も可能になってるぞ。

ポインタと参照ってのは型じゃないのか

127 名前:デフォルトの名無しさん :03/06/12 21:08
>>126
型ってのは typename の事でしょ?
型と整数型とを何で分けて言ってるのか考えれ...。

128 名前:デフォルトの名無しさん :03/06/12 21:52
>>113
その規格はどこに載ってる


129 名前:デフォルトの名無しさん :03/06/12 22:03
237ページ(PDFでは通算263ページ目)の14.1.4から

130 名前:ぷらぷらー :03/06/12 22:07
template <void (*)()> struct A{

};

void test(){}

A<test> a;


こういうのもできるよー テンプレート最高

131 名前:デフォルトの名無しさん :03/06/12 22:31
>>129
嘘いわないで下さいよ、先輩♥
p.391ですよ(うふ♥)

132 名前:デフォルトの名無しさん :03/06/12 22:33
なるほど外部リンケージね。
どうりでうまくいかなかったわけね。

133 名前:デフォルトの名無しさん :03/06/12 22:36
>>131
>>3 にあるやつだと >>129 の位置にあるんだけど。
モノが違うのかな?

134 名前:デフォルトの名無しさん :03/06/12 23:07
>>133
ごみん。Stroustrup本で見てたよ。♥
C++ Final Draft International Standard←ここね
しかもこちらの方が詳しく載ってるよ。
先輩ありがとう。

135 名前:デフォルトの名無しさん :03/06/12 23:11
error C2583: 'Check::Check' : 'const' 'this' ポインタをコンストラクタまたはデストラクタで使っています。


class Check
{
public:
Check() const { cout << "コンストラクタが呼ばれた" << endl; };
~Check() const { cout << "デストラクタが呼ばれた" << endl; };
};

どこがだめなんでしょうか?
データないのにconstつかったから?

136 名前:_ :03/06/12 23:16
http://homepage.mac.com/hiroyuki44/jaz03.html

137 名前:デフォルトの名無しさん :03/06/13 00:15
鬱だ死のう・・・・

138 名前:デフォルトの名無しさん :03/06/13 02:22
分割コンパイルがうまくいきません。
誰か教えて(つД`)
(Windows 2000 VC++6.0)
///////////////////////// ClassA.h
#ifndef CLASSA_H
#define CLASSA_H
#include "ClassB.h"
class CClassA
{
CClassB m_objB;
};
#endif
///////////////////////// ClassA.cpp
#include "ClassA.h"
///////////////////////// ClassB.h
#ifndef CLASSB_H
#define CLASSB_H
#include "ClassC.h"
class CClassB
{
CClassC m_objC;
};
#endif

//続く


139 名前:138の続き :03/06/13 02:23
///////////////////////// ClassB.cpp
#include "ClassB.h"
///////////////////////// ClassC.h
#ifndef CLASSC_H
#define CLASSC_H
#include "ClassA.h"
class CClassC
{
CClassA m_objA;
};
#endif
///////////////////////// ClassC.cpp
#include "ClassC.h"
///////////////////////// main.cpp
#include "ClassA.h"
int main( int argc, char *argv[] )
{
CClassA objA;
return 0;
}

//続く


140 名前:138の続き :03/06/13 02:24
//エラーの内容の一部
コンパイル中...
main.cpp
classc.h(9) : error C2146: 構文エラー : ';' が、識別子 'm_objA' の前に必要です。
classc.h(9) : error C2501: 'CClassA' : 識別名を宣言するのに、型が指定されていません。
classc.h(9) : error C2501: 'm_objA' : 識別名を宣言するのに、型が指定されていません。
(略)
test.exe - エラー 12、警告 0

はじめ、part15の>>949と同じエラーが出ていて、
インクルードガードを書いたら別なエラーがでますた。
長々とすみません。どのような解決法でいけばいいでしょうか?m(_ _)m


141 名前:デフォルトの名無しさん :03/06/13 02:33
>>138-140
CClassA は CClassB を持っている。
CClassB は CClassC を持っている。
CClassC は CClassA を持っている。
CClassA は CClassB を持っている。
CClassB は CClassC を持っている。
CClassC は CClassA を持っている。
CClassA は CClassB を持っている。
CClassB は CClassC を持っている。
CClassC は CClassA を持っている。
CClassA は CClassB を持っている。
CClassB は CClassC を持っている。
    :
    :
    :
(以下無限に続く)

142 名前:デフォルトの名無しさん :03/06/13 02:46
>>130
http://pc2.2ch.net/test/read.cgi/tech/1047978546/l50
templateについて詳しくやるなら。

>>138-140
プリプロセッサ・マクロを展開するとどうなるか考えてみる。
エラーの内容は'CClassA'が定義されてないことによるエラー
分割コンパイル関係ない(^^;
//class A;class B;class C;//先に型が存在することを宣言しておく
class A
{
    C o;
};
class B
{
    A o;
};
class C
{
    A o;
};

とここまで書いて>>141見て問題の本質からずれてることに気がついたり(^^;
ポインターとnew演算子などを使って管理するしかないのでは?
boost::shared_ptrとか使う場合、循環参照に注意する必要あるだろうけど。

143 名前:デフォルトの名無しさん :03/06/13 02:55
>>138
ああこれね。よくやる人いるんだよね。
結論これはコンパイルできない。
CClassA,B,Cはそれぞれ相手のサイズがコンパイル時にわからないから。だったかな?
解決策はポインター持たせることやね。


144 名前:143 :03/06/13 02:57
>>143
士ね

145 名前:デフォルトの名無しさん :03/06/13 03:00
ヘッダーファイル内でのインクルードはできるだけ避けたい。

146 名前:138 :03/06/13 03:50
あああぁぁぁ!みなさんどうもありがとうございました!!(感涙)
勉強なりますたm(_ _)m


147 名前:超初心者 :03/06/13 18:38
教えてください。この文はまずいでしょうか?

while(...) {
    while(...) {
        int x;
        .
        .
        if(...) goto loopEnd;
    }
}
loopEnd:;

148 名前:デフォルトの名無しさん :03/06/13 18:54
>>147
多重ループからの脱出か。
goto を使わないと面倒なパターンのひとつではある。
gotoのやみくもな利用はまずいが、こういうパターンに限って使えば合理的ってことで
まあまずくはないよ。

ただ、gotoを見るだけで文句言われる場合もあるので、
gotoなしでも、そのループ全体をinline関数に分割してreturnで抜けることで
実質的に同じ形にできたりするが。


149 名前:デフォルトの名無しさん :03/06/13 18:55
goto loopEnd;で一足飛びに外側のループを抜けてるが、
それは内側のループと外側のループに強固な依存関係を作ってしまってる。
リファクタリングで内側のループを関数に切り出したりする際に大きな障害になる。
ループの結果を受け取る変数を使って
while(...){
bool found = false;
while(...){
 if (...){ found = true; break; }
}
if ( found ) break;
}
とした方が良い

150 名前:147 :03/06/13 19:22
>148
>149
素早い回答、どうもありがとうございます。
147の文についてあともう一つ質問したいのですが、
内側のwhileループ内で宣言している変数 x は、goto文でそのスコープを
抜けた時、無事にスタックから解放されるのでしょうか?

151 名前:デフォルトの名無しさん :03/06/13 19:24
>>150
それは仕様では決められていないんじゃないのかな。
外のスコープからでたからといって、解放されるとは限らないんじゃないの?
コンパイラ依存だと思われ。

152 名前:デフォルトの名無しさん :03/06/13 20:40
文字列を数字にするのはatoi関数じゃないですか。
逆に数字を文字列にする関数って何をつかえばいいんですか?
おねがいします

153 名前:デフォルトの名無しさん :03/06/13 20:43
sprintf

154 名前:デフォルトの名無しさん :03/06/13 21:04
>>152
atoiの反対ならitoa使えばいいんでないの?

155 名前:デフォルトの名無しさん :03/06/13 21:26
boost::formatって便利だけど、boostなしでそれっぽいことをしようとすると
やっぱり、sprintf / printfしかないですかねぇ…

156 名前:デフォルトの名無しさん :03/06/13 21:30
>>151
スタックの扱いは仕様外だけど、
デストラクタはちゃんと呼ばれる(6.6.2)。
まぁ、この場合は int なんで何もしないわけだけど。

>>154
itoa はコンパイラ独自の拡張関数。

157 名前:デフォルトの名無しさん :03/06/14 00:15
ガイシュツかもしれんが、
VC++6ではnewに失敗するとデフォでNULL。
だけども、MFCを使用の設定になってると
直接クラスライブラリ使っていなくても
newの失敗はNULLじゃなくてCMemoryException例外だよ。
AFXなんとかのプリプロセッサで決まるはず。
スレ違いといわれればそれまでだが。

158 名前:デフォルトの名無しさん :03/06/14 00:34
shared_ptr が標準に組み込まれないのはなんでだろ〜

159 名前:デフォルトの名無しさん :03/06/14 00:36
>>158
名前が長いから

160 名前:デフォルトの名無しさん :03/06/14 00:37
>>158
循環参照に対応してないから

161 名前:デフォルトの名無しさん :03/06/14 00:44
weak_ptrごと取り込めば

162 名前:犬すき :03/06/14 00:45
標準委員会で作れんかったから

163 名前:デフォルトの名無しさん :03/06/14 01:02
C++では裸の配列は使わないの?

164 名前:デフォルトの名無しさん :03/06/14 01:05
動的にとる時はdelete[]が嫌ー!
vectorで頑張る。
固定長なら普通に配列

165 名前:デフォルトの名無しさん :03/06/14 01:07
>>163
きちっと処理できんならいっぱい使ってくれ。

166 名前:デフォルトの名無しさん :03/06/14 01:11
>>161
weak_ptrは仕様がイマイチ

167 名前:デフォルトの名無しさん :03/06/14 11:46
(1)全てのエラーを拾いたいんですけれどcatch部分にはどのようなメッセージを
   かけばよいですか?主に、メモリーの不正使用によるコアダンプとかの
   エラーを拾いたいです。
   
  VBにおいては、On Error goto trap
Javaにおいては、
try{

}catch(ErrException){ // <-こんな感じのメッセージ
  〜
   }

  

168 名前:デフォルトの名無しさん :03/06/14 11:48
>>167
catch(...)

169 名前:_ :03/06/14 11:49
http://homepage.mac.com/hiroyuki44/jaz03.html

170 名前:167 :03/06/14 12:04
>>168
ありがとうございます。さっそく以下のように試して見ましたが
エラーは拾えなかったのですが、何が悪いのでしょう?
//Borland C++ 5.5.1 for Win32 Copyright (c) 1993, 2000 Borland

int main(int argc, char* argv[]){
int i=0,j=0;
try{
j=100/i;
printf("j=%d",j);
return 0;
}catch(...){
printf("err!");
}
}


171 名前:デフォルトの名無しさん :03/06/14 12:23
>>170

C++が送出する例外を全てキャッチするわけであって
ランタイムのエラーなんか捕まえられるわけありませんがな。

VMで動いているJavaとは違う。


172 名前:デフォルトの名無しさん :03/06/14 12:32
>>170
Windows なら http://hata.cc/docs/Win32Map/2-1.html
しかしVC++ならcatch( ... )でも行けるはずだが、Borlandはそうでもないのか。

173 名前:167 :03/06/14 12:34
>>171
なるほど。
本当に全てのエラーを拾えるわけではないんですね?

数字を0で割ったエラーはC++(BCB)では拾えない見たいですが
C++が拾えるエラーと拾えないエラーの見極めはどうしたらよいのでしょうか?


174 名前:167 :03/06/14 12:46
>>172
VC++で試した見たら、確かにエラーは拾えました。
どうも、コンパイラ依存のようですね。ありがとうございました。

int func(int i);

int main(int argc, char* argv[]){
int i=0;
try{
if(func(0) !=0 );
}catch(...){
printf("err!");
}

printf("exit\n");
scanf("%d",&i);
return 0;

}


int func(int i){
int j=0;
j=100/i;
printf("j=%d",j);
return 0;
}


175 名前:デフォルトの名無しさん :03/06/14 12:49
>>170
BCB6up4ではちゃんとerr!って出たヨ

176 名前:デフォルトの名無しさん :03/06/14 13:02
>>173
BCB(6)では拾えるってことでバージョンアップ汁

177 名前:デフォルトの名無しさん :03/06/14 13:04
>>176
フリーコンパイラですもん。
バージョンアップもなにも(w


178 名前:デフォルトの名無しさん :03/06/14 13:08
>>177
BCBって書いてるから誤解してたよ。
BC++5.5のことか。それはBCB(Borland C++ Builder)とは違うコンパイラだよ。

179 名前:デフォルトの名無しさん :03/06/14 13:37
>>173
C++のコード内で throw std::exception("err"); とかやって投げてる
例外は catch で捕まえることができる。他のゼロ除算とか
ページ違反とかの OS が投げてくる例外は、拾い方は環境依存。

別の言い方をすると、「この関数はこの例外を投げるかもしれない」と
C++のドキュメントに書いてあればcatchで捕まえられる。それ以外は×。

180 名前:デフォルトの名無しさん :03/06/14 14:12
>>178
コンパイラ(エンジン)は同じだろ

181 名前:デフォルトの名無しさん :03/06/14 14:20
>>180
昔のバージョンのものみたいだから、概ね同じか。

182 名前:デフォルトの名無しさん :03/06/14 14:24
BC++5.5はBCB5に付属

183 名前:デフォルトの名無しさん :03/06/14 16:11
みなさんコンパイラのツールはなにつかってるの?
VC++が多いのだろうけど。

184 名前:デフォルトの名無しさん :03/06/14 16:43
コンパイラのツールってなんだ?

185 名前:デフォルトの名無しさん :03/06/14 16:44
細かいこと言ってやるなって

186 名前:デフォルトの名無しさん :03/06/14 16:44
そこツッコまない

187 名前:デフォルトの名無しさん :03/06/14 16:45
はもねぷ〜〜〜〜〜

188 名前:デフォルトの名無しさん :03/06/14 16:48
>>183
cpp32

189 名前:デフォルトの名無しさん :03/06/14 17:36
Visual C++ 7.1(.NET 2003)ってオリジナルの Loki そのまま使えるの?

190 名前:デフォルトの名無しさん :03/06/14 21:57
MaxOSX の gcc。つか、宿題スレでしか使わないけどな。

191 名前:デフォルトの名無しさん :03/06/14 23:35
>>190
同志がいた。

192 名前:デフォルトの名無しさん :03/06/15 01:06
#include <iostream>
#include <fstream>
using namespace std;
ostream &operator<<( ostream &stream, unsigned char ret ){
stream << (unsigned short)ret;
return stream;
}
int main(){
unsigned char x=62;
cout << x;
ofstream out("Result.txt");
out << x;
out << " " << x;
out.close();
return 1;
}

12行目のxのみがunsigned charで表示されてしまいます。
恐らくは12行目の<<のみがオーバーロードできていないのでしょうが、
原因と対策を教えていただけないでしょうか?
コンパイラはVC++6.0を使用しています。
宜しくお願いします。

193 名前:デフォルトの名無しさん :03/06/15 01:11
char と unsigned char は違う型なので
char にキャストするか、元から char に汁。

194 名前:193 :03/06/15 01:36
いえ、数値表示したいのです。
10行目と13行目は思惑通り数値で表記されるのですが、
12行目(左辺値に直接ostreamを持っていったとき)のみ、数値表示できません。
言葉足らず申し訳ありません。

195 名前:192 :03/06/15 01:37
すみません、名前欄は193ではなく192の間違いです

196 名前:デフォルトの名無しさん :03/06/15 01:48
BC++5.5.1では3度ともグローバルのが呼ばれた。
VC++6.0のバグぽ。

197 名前:デフォルトの名無しさん :03/06/15 01:52
それぞれが発売された時期を考えろ

198 名前:デフォルトの名無しさん :03/06/15 01:52
gcc-2.95だとambiguous overloadと言われてコンパイルできなかった。
gcc-3.3だと全てちゃんと数値表示された。

199 名前:197 :03/06/15 01:52
Borlandの方は発売とはいわないけど

200 名前:デフォルトの名無しさん :03/06/15 02:39
>>194
じゃぁ、int でキャスト汁。

規格でどちらが使われるのか決まってるかどうかは分からんが、
unsigned char でオーバーロードされてない時に char, int のどちらが使われるか
一意に決められないコンパイラがあるということだけは事実のようだし。

201 名前:デフォルトの名無しさん :03/06/15 02:39
もしくは元から int にするか。

202 名前:デフォルトの名無しさん :03/06/15 03:07
>>193=>>200-201
さっきから君は何を言っとるんだ?

203 名前:デフォルトの名無しさん :03/06/15 03:14
なんだ。よく見たら自分でオーバーロードしてたのね...。
スマソ。
何でだろね。

204 名前:192 :03/06/15 03:31
バグですか…どうもありがとうございました。
BC++の導入を検討します。
現在CからC++への移行のために勉強中なので
もしまたお世話になるときは宜しくお願いします。

205 名前:デフォルトの名無しさん :03/06/15 06:14
>>192
ostreamからの派生クラスofstreamへのオーバーロードができていない可能性がありますね
ofstream &operator<<(ofstream &stream, unsigned char ret){
(ostream)stream << (unsigned short)ret;
return stream;
}
を追加してはどうですか

206 名前:デフォルトの名無しさん :03/06/15 06:17
>>197
vc7でも表示のしかたvc6と変わりませんけど。
>>192
わざわざコンパイラ変える必要なんてない。
>>200の言っているようにキャストすりゃオーバーロードも必要性がない
>>205
それはオーバーロード関数があいまいと表示されるかと

207 名前:デフォルトの名無しさん :03/06/15 06:31
>>206
205です。
当方VC6ですが、(ostream)キャストを使うため
あいまいさはなくなります。

208 名前:206 :03/06/15 06:38
俺のvc7じゃキャストできん。

209 名前:206 :03/06/15 06:41
ちなみにg++でも無効やって、怒られちゃいます。

210 名前:デフォルトの名無しさん :03/06/15 07:10
(ostream&)

211 名前:デフォルトの名無しさん :03/06/15 08:44
MSVC++6.0で以下のように、hoge.hでCHogeのなかにFOOという定数を宣言し、hoge.cppでその定義を行います。すると、hoge.cppのなかでは問題なく定数として扱われてcase文にも使えるのですが、宣言をincludeしているだけのbar.cppでは
"error C2051: case 式は、整数型定数でなければなりません。"
というエラーが出ます。

定数の定義文をbar.cppに書くとbar.cppは正常にコンパイルされ、hoge.cppのcase文で上記エラーが出ます。両方に定義を書くと、多重定義でエラーが出ます。

どうすればいいのでしょうか?

hoge.h
class CHoge {
static const int FOO; // 定数の宣言
...
}

hoge.cpp
#include "hoge.h"
const int CHoge::FOO = 1; // 定数の定義
...
switch (i) {
case CHoge::FOO: // ここではエラーにならない
...
}

bar.cpp
#include "hoge.h"
...
switch (i) {
case CHoge::FOO: // ここではエラーになる
...
}


212 名前:デフォルトの名無しさん :03/06/15 08:58
hoge.h
class CHoge {
enum { FOO = 1 }; // 定数の定義
...
};

213 名前:デフォルトの名無しさん :03/06/15 10:16
>>211
値が hoge.cpp で指定されているので、
bar.cpp のコンパイル時にその値を参照できないのだ。
C++ の仕様上は
 class CHoge {
  static const int FOO = 1;
  ...
 };
とすればいいんだが、
VC++6.0 ではこの仕様に準拠してないので
>>212 のようにする。

214 名前:デフォルトの名無しさん :03/06/15 11:13
enumファックですな

215 名前:211 :03/06/15 14:37
>> 212-214
case文に使うような整数定数はenum使えばいいんですね。
解決できました。ありがとうございます!


216 名前:デフォルトの名無しさん :03/06/15 14:43
C++の標準クラスに数値→文字列変換できるメソッドってありますか?
sprintfをつかわにゃならないのですか?

217 名前:デフォルトの名無しさん :03/06/15 15:05
>>216
ostream::operator<<

218 名前:217 :03/06/15 15:09
>>216
いやどちらかといえばostringstreamかostrstream

219 名前:デフォルトの名無しさん :03/06/15 16:31
C++の例外処理が説明とかを読んでも意味が分かりません
もしよろしければ、わかりやすく教えてください

220 名前:デフォルトの名無しさん :03/06/15 17:21
>>219
説明とか読んでも分からないと言う人にどうやって説明すればいいのかわかりません。

221 名前:デフォルトの名無しさん :03/06/15 17:46
#include<iostream>
#include<vector>
#include<stdexcept>

int main()
{
    try
    {
        std::vector<int> v(10);
        v.at(10);
    }
    catch(std::out_of_range& out)
    {
        std::cout<<out.what();
    }
    return 0;
}


222 名前:デフォルトの名無しさん :03/06/15 17:57
みてね〜♪
http://www1.free-city.net/home/s-rf9/page004.html
http://www1.free-city.net/home/s-rf9/page005.html

223 名前:デフォルトの名無しさん :03/06/16 00:29
□□□□□□□□□□□■■■■■□□□□□□□□□□□□□
□□□□□□□□□□■■■■■■■□□□□□□□□□□□□
□□□□□□□□□■■■■■■■■■□□□□□□□□□□□
□□□□□□□□■■□□■■■□□■■□□□□□□□□□□
□□□□□□□■■■□□■■■□□■■■□□□□□□□□□
□□□□□□□■■■□□■■■□□■■■□□□□□□□□□
□□□□□□□■■■■■■□■■■■■■□□□□□□□□□
□□□□□□□■■■■■■□■■■■■■□□□□□□□□□
□□□■■■□□■■■■□■□■■■■■□■■■□□□□□
□□□■■■□□■■■■■■■■■■■□□■■■□□□□□
□□□■■■■□□□■■■■■■■□□□■■■■□□□□□
□□□□□■■■□□□■■■■■□□□■■■□□□□□□□
□□□□□□■■■□□□□□□□□□■■■□□□□□□□□
□□□□□□□■■■□■■■■■□■■■□□□□□□□□□
□□□□□□□□■■■□■■■□■■■□□□□□□□□□□
□□■■■■■■□■■■□□□■■■□■■■■■■□□□□
□□□■□■□□□□■■■□■■■□□□□■□■□□□□□
□□■□■■□■□□□■■■■■□□□■□■■□■□□□□
□□□■■■■□□□□□■■■□□□□□■■■■□□□□□
□□□□■■□□□□□■■■■■□□□□□■■□□□□□□
□□□■□■□□■□■■■□■■■□■□□■□■□□□□□
□□■□□■■■■■■■□□□■■■■■■■□□■□□□□
□□□□□□□□■■■□□□□□■■■□□□□□□□□□□
□□□□□□□■■■□□□□□□□■■■□□□□□□□□□
□□□□□■■■■□□□□□□□□□■■■■□□□□□□□
□□□■■■■■□□□□□□□□□□□■■■■■□□□□□
□□□■■■■□□□□□□□□□□□□□■■■■□□□□□
□□□■■■□□□□□□□□□□□□□□□■■■□□□□□
□□□□□□□□□□□□□□□□□□□□□□□□□□□□□


224 名前:デフォルトの名無しさん :03/06/16 01:30
>>221
ださいJavaを見習え

225 名前:デフォルトの名無しさん :03/06/16 01:34
ぷ、Javaとかいってんのみ手ラン内

226 名前:デフォルトの名無しさん :03/06/16 01:45
>>224
ぬるぽ

227 名前:デフォルトの名無しさん :03/06/16 02:24
javaのなにをどう見習えというの
所詮C++の派生のくせして。

228 名前:デフォルトの名無しさん :03/06/16 02:44
#include <iostream>
using namespace std;
int func(){
    throw "hello\n";
    return 0;
}
int hello(){
    return func();
}
class Test{public:
    ~Test(){cout << "Test::~Test()が呼ばれました"<<endl;}
};
int main(){
    try{
        Test o;
        hello();
        Test o2;
    }
    catch(const char * p){cout << p << endl;}
    return 0;
}


229 名前:デフォルトの名無しさん :03/06/16 02:44
>>227
所詮Cの(ry
所詮アセンブラの(ry


230 名前:デフォルトの名無しさん :03/06/16 03:33
>>229
所詮Simulaの(ry
が抜けてるぞ

231 名前:デフォルトの名無しさん :03/06/16 10:27
所詮チューリングマシンの(略

232 名前:デフォルトの名無しさん :03/06/16 14:08
環境はBCB6なのですが、double型の4次元配列 (サイズは 130×20×20×20 程度で
配列の大きさは固定) のデータを簡単にファイルに書き込み・読み出して
変数に代入できるメソッドはC++にあるのでしょうか?


233 名前:デフォルトの名無しさん :03/06/16 14:13
四次元配列 Σ( ̄□ ̄;)!!

234 名前:デフォルトの名無しさん :03/06/16 14:22
なぜ4次元も使うことになったのか興味が

235 名前:デフォルトの名無しさん :03/06/16 14:25
>>232
fwriteとfread

236 名前:デフォルトの名無しさん :03/06/16 14:50
130*20*20*20*8=8,320,000
そんなに巨大なわけでもないな。

237 名前:デフォルトの名無しさん :03/06/16 14:57
4次元配列にするならクラスか
構造体にしたほうがよくないか・・・?

238 名前:デフォルトの名無しさん :03/06/16 15:01
>>236
10年ちょっとくらい昔ならパンクしてるけどね。

239 名前:デフォルトの名無しさん :03/06/17 12:52
質問お願いします。
いろんなサンプルコードを見て勉強しているのですが、
構造体変数をコピーするのに、単に代入で済ましている
ものと、memcpy()で行っているものとがあります。
これはどんな違いがあるのでしょうか?

240 名前:_ :03/06/17 12:57
http://homepage.mac.com/hiroyuki44/

241 名前:デフォルトの名無しさん :03/06/17 12:59
>>239
構造体の代入演算子がオーバーロードされている場合がある

242 名前:239 :03/06/17 13:01
>>241
あっ、なるほど!!
ありがとう。。。

243 名前:デフォルトの名無しさん :03/06/17 13:08
>>239
VCなんかの場合は出力コードを見ると、メンバを一つ一つ代入処理するように展開される
よってmemcpyより遅くなる

244 名前:239 :03/06/17 13:24
>>243
そうなんですか!
グリッドのサンプルを見ていたら、各セルのLOGFONTを
設定するのにmemcpyを使っていたのですが、スピード
が要求されるからなんですネ。
どうもです。。。

245 名前:デフォルトの名無しさん :03/06/17 15:18
いや、その程度の処理ならどっち使っても、人間には認識できないレベルの速度差にしかならない

246 名前:デフォルトの名無しさん :03/06/17 15:50
プログラムを始めて間もない初心者なんですが
分割コンパイルとか言うのをやろうと思って
ソースファイルを2つ用意して片方に関数プログラムを書いて
もう片方にその関数を実行した結果を表示するプログラムを
書いてコンパイルしてみたんですが。ソース自体にはエラーは
でなかったんですが、
bunkatu error LNK2019: 未解決の外部シンボル _WinMain@16 が関数 _WinMainCRTStartup で参照されました。
とかいうよくわからないエラーが出ちゃって困ってます
分割コンパイルってC++.netでやるとき何か設定とかひつようなんですか?

247 名前:デフォルトの名無しさん :03/06/17 15:53
ウィンドーズアプリケーションはmainではなくWinMainからはじまる。OK?

248 名前:246 :03/06/17 16:11
>>247
ありがとうございます。
でも、mainをWinMain()に変えてもエラーは消えませんでした・・・
なぜでしょう?

249 名前:デフォルトの名無しさん :03/06/17 16:15
というか、
Windows アプリケーションから
コンソールアプリケーションに変えた方がいいんでは?

250 名前:デフォルトの名無しさん :03/06/17 16:20
WinMainはint WINAPI WinMain(HINSTANCE,HINSTANCE,LPSTR,int)で
mainとは違うが、>>246の問題はそこに留まらないだろうから>>249のとおり


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