トップページ⇒tech
1001コメント289KB

C++相談室 part6

レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさんNGNG
(´-`).。o(関連URLは>>2-5の辺り)
0002デフォルトの名無しさんNGNG
Boost
http://www.boost.org/
STLport
http://www.stlport.org/

過去ログ
Part1
http://piza.2ch.net/tech/kako/980/980175292.html
Part3
http://pc.2ch.net/test/read.cgi/tech/1003832761/
Part4
http://pc.2ch.net/test/read.cgi/tech/1009071535/
Part5
http://pc.2ch.net/test/read.cgi/tech/1014217496/

Windowsの話はこちらで

Win32API 質問箱 Build3
http://pc.2ch.net/test/read.cgi/tech/1017072275/
Windows Programing for C/C++(Not MFC)
http://pc.2ch.net/test/read.cgi/tech/1018239290/
0003デフォルトの名無しさんNGNG
乙カレー
0004デフォルトの名無しさんNGNG
C++ Final Draft International Standard
http://www.kuzbass.ru/docs/isocpp/
0005デフォルトの名無しさんNGNG
      ,, ,=、  ,, , =、
     ff | }!、,、〃 / ″オツカレー!!
      ,リ/ .ノ*´jコ`)'〃
    {{ { ′   v' 《
     ヾ.\.   \ヾ
     _,,二、》   ;  \. 三,_
  (( ゙ー=、`″〃 \. \-‐' ,))
        ゙ー=″     ゙' 一' 
0006デフォルトの名無しさんNGNG
v(^・^)v
0007デフォルトの名無しさんNGNG
v(^・^)v
Loki
http://www.moderncppdesign.com/
0008デフォルトの名無しさんNGNG
int operator--(){}
で、
--aが出来るけど、a--ってどうやるの?
0009デフォルトの名無しさんNGNG
>8 int operator--(int){}
0010デフォルトの名無しさんNGNG
>8
サンキュ〜〜♪
0011デフォルトの名無しさんNGNG
なんでoperator--(int)なの?
なんかダサい
0012デフォルトの名無しさんNGNG
全ての演算子をオーバライドしてあるclassを作ってるから必要なの。
0013デフォルトの名無しさんNGNG
間違えた。オーバロードね。
0014デフォルトの名無しさんNGNG
(゚Д゚) あぁ?
0015デフォルトの名無しさんNGNG
>>11
ダサいから自然と使われなくなるという罠?
treeをbeginからendまでスキャンするのに後置インクリメントとかされてるのみると、
はじめっから未定義にしときゃぁいいのに、と思う。
これで「高速化のためtreeにしてみたけど余計遅くなった」とか言われたりして、、、
もうね、ア(以下略)
0016デフォルトの名無しさんNGNG
v(^・^)v
v(^・^)v
0017デフォルトの名無しさんNGNG
>>1
int otsukare--(int){}
0018デフォルトの名無しさんNGNG
>>15
いや、構文がダサいって事。
operator--(int)
intって何よってかんじで。
0019デフォルトの名無しさんNGNG
前置と区別せねばよ
0020デフォルトの名無しさんNGNG
>>19
それはわかるが、(int)ってやっぱりセンスのかけらも感じられん
0021デフォルトの名無しさんNGNG
じゃあ
なんかいい方法考え出してくれ
0022StroustrApNGNG
後置インクリメント(デクリメント)演算子の引数 int は、
同前置演算子と比べた場合に存在する0ではないパフォーマンスの劣化を表している。
0023デフォルトの名無しさんNGNG
引数に渡される値は常に0だが?
0024デフォルトの名無しさんNGNG
>>23
引っ込んでていいよ。
0025デフォルトの名無しさんNGNG
v(^.^)v マァマァ
0026デフォルトの名無しさんNGNG
C++は心の病気になるとか言ってる人がいるがそれは違う!
悪いのは
0027デフォルトの名無しさんNGNG
operator--(int) が呼ばれるときって、実際に何か引数が渡されてるの?
>>23 は 0 とか言ってるけど。そうだとしたら本当にダサいね。
0028ストラウNGNG
文句のあるやつは使うなよ!!ウワーン
0029デフォルトの名無しさんNGNG
じゃあ何かいい方法を考えるべ。
0030デフォルトの名無しさんNGNG
初歩的なことで申し訳ないのですが、非staticなメンバ関数のアドレ
スを取得する方法ないのでしょうか? CreateThread()にメンバ関数
食わせるクラス作ろうとしてハマッてます。おたすけ。
0031デフォルトの名無しさんNGNG
>>30
メンバ関数にはthisがあるから、CreateThread()には食わせられないでしょう。
(素直は方法では)
0032デフォルトの名無しさんNGNG
>>31
なるほどそうですね。
CreateThreadにthis渡してランチャ関数を1hopおくことにします。
どうもありがとうございました。
0033デフォルトの名無しさんNGNG
LPTHREAD_START_ROUTINE pFunc;
DWORD (WINAPI CMyClass::*p)() = ThreadFunc;
pFunc = *(LPTHREAD_START_ROUTINE*)&p;

ThreadFuncは引数無しのDWORD型のメンバ関数。
動作はまるきり保障できないが。
0034デフォルトの名無しさんNGNG
>>27
通常の関数は定義する時には f(int i) のように必ず仮引数を書かないとエラー
になるが、operator--(int)の場合、operator--(int i)のように書かなくても
エラーにならない。それだけでも良しとしてくれ。
003530NGNG
>>33
ありがたき幸せ。両方頭に入れておきます。
#実はその方法で解決しようとしてスパゲッティになっておりました(w
0036デフォルトの名無しさんNGNG
>33
ThreadFuncは、非virtualかつ
WINAPIであれば、まぁ大丈夫、なのかな‥‥
0037デフォルトの名無しさんNGNG
>>34
いや、通常の関数でも仮引数を指定しなくてもエラーになりませんよ。
私は開発の途中で、インタフェースでは決まっているが、まだ実装では
使っていない仮引数は、
void foo( int /* x */ ) { }
のようにしていることがあります。
0038v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vNGNG
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
v(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)vv(^・^)v
0039デフォルトの名無しさんNGNG
>37
関数を/* 〜 */でコメントアウトするときにドツボにハマる罠
0040デフォルトの名無しさんNGNG
#if 0
こうすりゃおけ
#endif
0041デフォルトの名無しさんNGNG
#if 0〜は大抵のエディタで色が変わらないから、
生きているのかで混乱する罠
0042デフォルトの名無しさんNGNG
>>39
Cはコメントの階層化ができるようにならないんだろうか・・・
/-COMMENT_NAME1-
/-COMMENT_NAME2-

-COMMENT_NAME2-/
-COMMENT_NAME1-/

こんな風にできたらいいなぁ。
0043デフォルトの名無しさんNGNG
borlandのコンパイラは、コメントのネストをサポートしてたよね。
004437NGNG
>>39
し、失札な! C/C++ 歴 15年、そんなマヌケなことでハマったことは、
2回しかない!!
0045999NGNG
>>前スレの1000
ゲラ
0046デフォルトの名無しさんNGNG
いまさらながら、「IEコンポーネントを使い倒すスレ」に触発され
ちょっと試してみたい気になりました。

タイプライブラリの取り込み(でしたよね?)で
何を指定したらよいのでしょうか?
#今BCBが手元に無いので言葉が不正確かもしれません。。。
会社でしばらく眺めていたんですが、それらしき物が
見つけられなかったんですけど。
0047デフォルトの名無しさんNGNG
>>46
確か、Microsoft Internet Controls です。
0048デフォルトの名無しさんNGNG
>関数を/* 〜 */でコメントアウトするときにドツボにハマる罠

こんなのハマるやつはどうかしてると思われ
いるとすれば>>39あたり・・・(w
00491000NGNG
スマソ >>前スレ999
0050デフォルトの名無しさんNGNG
>>47
thanks!!

っていうか、スマソ。
C++Builderのスレで聞いたつもりになっていた。
激しく、誤爆しちまったぞと。
0051デフォルトの名無しさんNGNG
行の途中をコメントアウトするときは確かに /* */で囲むこともあるが
複数行のコード全体を無効にするときは #if 0 にするなあ。ネストできるしね。

また、#if 0 ならそれは「無効化されたコードである」ということを表明していることにもなるし。
逆に
#if 0
コードではなくコメントをずらずら
#endif
なんての見るとげっそり。

(さらに#if 0 だとなぜ無効にしたのかが分かりにくいので、#if HOGEHOGE とでもして
上に // #define HOGEHOGE 1 // なんたらかんたら...
と無効にした理由、有効にもどせる判断条件などを書いたりしてるな)
0052デフォルトの名無しさんNGNG
試しにちょっとコメントなり #if 0 なりでくくってみるのはともかく、
昔のコードが無効になった状態で残ってるのは萎えるなあ。
リビジョン管理しろよーって感じで。

てゆーか、リビジョン管理してても残してあったり・・・
0053デフォルトの名無しさんNGNG
なんでC++なんだよ、どう考えても++Cだろうがゴルァ!
C==C++だぞわかってんのかゴルァ!
0054デフォルトの名無しさんNGNG
>>53
評価した後で違いに気付くっていうふかーい意味があるのさ(w
0055デフォルトの名無しさんNGNG
きっと
C++;
なんだろう。
0056デフォルトの名無しさんNGNG
>>53
迂闊に使うと効率が悪くなるっていうふかーい意味があるのさ(w
0057デフォルトの名無しさんNGNG
暗黙の型変換の禁止したいんだけど、
class CA{,,,,,};

CA a,b;
a=b;//これを禁止するにはどうすれば?
0058デフォルトの名無しさんNGNG
>>57
それ暗黙の型変換なの?
単なる代入に見えるが。
代入ならば代入演算子をprivateにでもoverrideすれば防げるっしょ。
あと宣言時の代入記述は代入演算子ではなくコピーコンストラクタなので
場合によってはそっちも…

つーか、Effective/More Effective/Exceptional C++嫁
0059デフォルトの名無しさんNGNG
>>57
CA::operator=() と コピーコンストラクタを private にする
0060デフォルトの名無しさんNGNG
>>58>>59
サンクス♪解決しました。
0061デフォルトの名無しさんNGNG
>>56
上手いな……。
0062デフォルトの名無しさんNGNG
template<class T1,class T2=ST<T1> >class TST;
template<class T>class ST{
friend class TST<T>;
public:
T t;
ST(T val=0):t(val){}
};
template<class T1,class T2=ST<T1> >class TST{
private: T2* pt;
public:TST(T1 val=0):pt(new T2(val)){}
~TST(){delete pt;}

TST operator=(const TST& rhs){return pt->t=rhs.pt->t;}
template<typename VAL>
TST<VAL>operator=(const TST<VAL>& rhs)const{return pt->t=rhs.pt->t;}

T1 Ref()const{return pt->t;}

};
/*****************************************/
void main(void)
{
const TST<int> a;
TST<double> b;
a=b;
cout<<a.Ref()<<endl;
}
とやるとfriendの型がずれてしまう。これを回避するfriendの書き方はないだろうか?
0063デフォルトの名無しさんNGNG
friend の問題じゃなくて、TST<int> と TST<double> は別の型なので、
TST<int>::operator= から TST<double>::pt (private) へのアクセスが
できないってだけじゃないの?
0064デフォルトの名無しさんNGNG
>>63
サンクス♪
friend関係無かったよ。
でも、ポインタを公開したくないなぁ。どうしようかね。
Ref()を公開して、その中でポインタを使用するとかしかないのか。
0065デフォルトの名無しさんNGNG
Visual C++でもう入力の必要がなくでEOFで強制終了したいときどうすればいいんですか。
プログラムではなく操作上の問題です
0066デフォルトの名無しさんNGNG
http://joda.cis.temple.edu/~ingargio/refman.pdf
いいものみっけた
0067デフォルトの名無しさんNGNG
↑標準C++の仕様書ね。
ISOの最新pdfだと思う
0068デフォルトの名無しさんNGNG
>>65
Ctl+Z
0069デフォルトの名無しさんNGNG
たしか前に (a += 1) += 1; って出来ないとかいうのを見た気がするんだけど、
だったら operator+= の戻り値は const にしなきゃいけない?
0070953NGNG
C++ Builderにおいて、ディスクの空き容量を調べようと以下のようなコードを書いたところ、
「[C++ エラー] frmMain.cpp(51): E2015 '__stdcall GetDiskFreeSpaceEx(const char *,_ULARGE_INTEGER *,_ULARGE_INTEGER *,_ULARGE_INTEGER *)' と 'Sysutils::GetDiskFreeSpaceEx' の区別が曖昧」
といわれました、 このばあい、Sysutils::GetDiskFreeSpaceExを呼び出す方法はわかるのですが、
__stdcall GetDiskFreeSpaceEx(const char *,_ULARGE_INTEGER *,_ULARGE_INTEGER *,_ULARGE_INTEGER *)
を呼び出すにはどのようにすればよいのでしょうか?

よろしくお願いします。


void __fastcall TForm1::Button1Click(TObject *Sender)

{
// Show disk capacity and freespace
bool result;


ULARGE_INTEGER freespaceforcaller;
ULARGE_INTEGER capacity;
ULARGE_INTEGER freespace;




result=GetDiskFreeSpaceEx("C:\\",(ULARGE_INTEGER)&freespaceforcaller,
(ULARGE_INTEGER)&capacity,
(ULARGE_INTEGER)&freespace);
}
0071デフォルトの名無しさんNGNG
::GetDiskFreeSpaceEx( ...
かな?
0072デフォルトの名無しさんNGNG
スレ違いかと
0073デフォルトの名無しさんNGNG
>72
現段階ではネームスペースについての話ってことで
0074デフォルトの名無しさんNGNG
age
0075デフォルトの名無しさんNGNG
int (A::*)()がvoid *にキャストできないのはC++の仕様?
手持ちのコードがコンパイルできなくなっている。
0076デフォルトの名無しさんNGNG
できたらできたで困ると思うが。
0077デフォルトの名無しさんNGNG
>>75
どこかで書いたが、アドレスとってvoid**にキャストしてから戻せばいける。
0078デフォルトの名無しさんNGNG
あの方法を使えば印字できるさ
0079デフォルトの名無しさんNGNG
>>75
reinterpret_castでも使え。
0080デフォルトの名無しさんNGNG
仮想関数は、それでとると、戻せなくて死ぬかも。
0081デフォルトの名無しさんNGNG
>>69
一般的にはconstにはしていないようだね。
0082デフォルトの名無しさんNGNG
>>53
亀レスだが、C++はかつてCのプリプロセッサだったからだよ。
つまり、はじめはC++でもプリプロセッサのアウトプットはCってこった。




ん?こじつけだぞ。真に受けるなよ。
0083三瓶ですNGNG
http://www.njk.co.jp/otg/Study/CPP/cpp1_01.htmlの左上に水色で
for(int n=0;n<MAX;n++){n○=2;〜〜〜〜〜〜
ってありますが、○の部分の小さな×はキーボードのドコを打てばいいんですか?
0084デフォルトの名無しさんNGNG
>>83
"
↑これか?
0085デフォルトの名無しさんNGNG
>>83
お箸を持つ方が右で、お茶碗を持つ方が左です(右利きの場合)。お間違い無きよう。
んで、その * はアスタリスク(スターとも言う)で、テンキーにあるかと。
0086三瓶ですNGNG
違います。もういちどよく見てください。   >>84
0087デフォルトの名無しさんNGNG
>>83
*だわそりゃ。
0088三瓶ですNGNG
そうでした右でした。
了解しました。有難うございます。    >>85
0089デフォルトの名無しさんNGNG
#include <iostrem>
int main()
{
std::cout<<"Hello,world"<<std::endl;;
return 0;
}
ASCII C++第3版で上のような状態でmainには一切手を付けないで

strustrup
hello,world!
C++

のように出力せよ、とのお言葉(問題)があったのですがどうすればよいのですか?
引っ掛けなのでしょうか?
0090デフォルトの名無しさんNGNG
>>89
#include <iostream>を消して(略
0091デフォルトの名無しさんNGNG
>>89
mainの外にグローバルなクラス変数を置いて、
そのコンストラクタとデストラクタで cout に出力する
0092デフォルトの名無しさんNGNG
struct A {
A() {
std::cout << "strodsjof" << std::endl;
}
~A() {
std::cout << "C++" << std::endl;
}
};

A a;

これだとVCで"C++"が出力されない。
んなアホな!
0093デフォルトの名無しさんNGNG
>>90-91

レスどうもです!
やっぱりコンストラクタとデストラクタでしたか〜
参考になりましたありがとう!
0094デフォルトの名無しさんNGNG
こうすれば簡単だよYO!
#include <iostream>

int main()
{
std::cout<<"strustrup\nHello,world\nC++"<<std::endl;
return 0;
}
#define main Main
int main()
{
std::cout<<"Hello,world"<<std::endl;;
return 0;
}
0095デフォルトの名無しさんNGNG
coutやcinにはput(),get()のようなメンバ関数在りますけど
そのメンバ関数名&&機能一覧表とかはどこに載ってますぁ?
0096デフォルトの名無しさんNGNG
最後の「ぁ?」は喧嘩を売ってるわけですね。
いいでしょう。かかってきなさい。
0097デフォルトの名無しさんNGNG
( ´�D`)つ)´Д`)グリグリ
        ↑
        96
0098デフォルトの名無しさんNGNG
class AAA
{
private:
class BBB;
BBB b;
public:
class BBB{ };
};

これをコンパイルしようとすると、「bの定義がないYO」と言われます。
publicとprivateの位置関係を換えると通るのですが、
位置入れ替えなしでうまくできないのでしょうか?
0099デフォルトの名無しさんNGNG
・゚・(ノД`)・゚・。 グリグリ サレタ・・・
0100デフォルトの名無しさんNGNG
・゚・(ノД`)・゚・。 >>98 こうしたくない理由があるの?

class AAA
{
private:
class BBB{ }
BBB b;
public:
};
0101デフォルトの名無しさんNGNG
・゚・(ノД`)・゚・。 あ、BBBクラスはAAA以外でも使いたいのかな?
まぁいいや寝よう。
010295NGNG
ごめんなさい、ぁはかの間違いでーす
0103デフォルトの名無しさんNGNG
>100-101
>理由
それ以外の方法で出来るのかなと
気になって眠れないので、、、



… ( ´Д`)ネムイ
0104デフォルトの名無しさんNGNG
>>98
できません。
010598NGNG
>104
C++の仕様ってことですか。。。
ありがとう(・∀・)
0106勉強中なのNGNG
あまりにもはずかしげな初心者質問でスマソ。

#include<stdio.h>
main()
{
float c;
c=100/7;
printf("%f",c);
return 0;
}

ってやると14ってでてくるんだけど、
なんで14.285...ってでてこないの?
100/7.0 とか 100.0/7 とかやるとちゃんとでてくるのに・・・
0107デフォルトの名無しさんNGNG
>>106
C言語では、整数型同士の除算では結果も整数型になると、
C言語の規格で決められている。
0108デフォルトの名無しさんNGNG
c=(float)(int)(100 / 7);
0109106NGNG
>>107
THX。
そういう規格になってるとは知りませんでした。
>>108
THX。
そういうふうに書けばいいってことなのかな?
あとでやってみます。
0110デフォルトの名無しさんNGNG
>>109
いや、>>108のようになっているから、
切り捨てられた後にfloatにキャストされるので、
14.0で正しいってこと。
0111デフォルトの名無しさんNGNG
>>106
やるなら c = (float)100 / 7; とすればいいだけの話。
もしくは、c = 100. / 7; のようにどちらかに小数点を付ける。
0112デフォルトの名無しさんNGNG
C++の参考書って、
ISOの企画書
Effective C++(日/英どっちでも)
More〜 (原書)
Exceptional C++ (原書)
Modern C++ Design (訳書)

こんだけそろえればとりあえずは大丈夫か?
0113デフォルトの名無しさんNGNG
Exceptionalは勉強になるな。
EffectiveよりAcceleratedの方が良いとどっかにあった。
templateだったらmodernより「Generic Programming−STLによる汎用プログラミング」
の方が基礎的で良いのでは?
0114デフォルトの名無しさんNGNG
>>113
あくまでスタイルとか、落とし穴を回避するための参考書。
STLなんかのライブラリの使い方とかはどうでもいい
0115デフォルトの名無しさんNGNG
#include <sstream>
int main() {
std::stringstream s, ss;
ss.str("a");
s << ss.rdbuf();
}
これをコンパイルして実行すると止まらない(traceしてみるとSTL内部のどこかで
無限ループっぽい)んですけど、STLのバグか俺がアフォなのか教えて下さい。
g++, libstdc++ の 2.96 です。Kondara2.1です。
0116115NGNG
>>115
g++の3.xだと動きますね…
0117デフォルトの名無しさんNGNG
CからC++に移行するのに最初に読んだ
AcceleratedC++の二つめのサンプルコードで、
#include <iostream.h>と書いて(VC++)どつぼにはまった経験があるのは
おれだけか??
(低レベルなカキコすまん
0118教えてNGNG
ファイルサイズ取得したいのですがstat以外の方法ってあるんですか。
0119デフォルトの名無しさんNGNG
>>118
OSも書けや。
0120デフォルトの名無しさんNGNG
ないとおもう
0121親切な人NGNG

ヤフーオークションで、凄い人気商品、発見!!!

「高性能ビデオスタビライザー」↓
http://user.auctions.yahoo.co.jp/jp/user/NEO_UURONNTYA

ヤフーオークション内では、現在、このオークション
の話題で、持ちきりです。
0122デフォルトの名無しさんNGNG
プログラム板で、凄い人気レス、発見!!!

「親切な人」↓
http://pc.2ch.net/test/read.cgi/tech/1018454705/121n

プログラム板内では、現在、このレス
の話題で、持ちきりです。
0123118NGNG
>>119
WinXPです
0124デフォルトの名無しさんNGNG
GetFileAttributesExとか
GetFileSizeとか
SetFilePointerExとか
0125118NGNG
>>124
ありがとう
0126RubyistNGNG
動物って好き? いいよな どこが? 皮がなぁぁぁぁ
0127デフォルトの名無しさんNGNG
>>118
http://www.catnet.ne.jp/kouno/c_faq/c19.html#12
0128113NGNG
>>114
親切に教えてやったのに、本の題名だけで判断するかね。
小人養い難しだな。
0129デフォルトの名無しさんNGNG
>>128
俺も持ってるよ「STLによる汎用プログラミング」。C++Builder6からSTLPort
になったので、SGIしか使えなかったバインダとかも全部使えてホクホク
してる。
0130デフォルトの名無しさんNGNG
例外指定(例外仕様)って、使い勝手が悪いような気がするんだけど、どう?
たとえば、
void func() throw(int)
{
throw double();
}
なんて書いても、コンパイラはチェックしてくれないし。(実行時に
unexpected は発生するけど)
また、上の関数の例外指定を後で throw(int,double) に直したとしても、
func を呼び出している全クライアントを書き換えるのも大変。
みなさんは、どういう感じで使ってますか?
0131デフォルトの名無しさんNGNG
受け取り側のcatchが例外の型を指定して受け取るのはやな感じ。
例外の種類と同じ数だけの例外クラスがあるJavaとかC#とか見てると、なんかもっとどうにかならないのかと思う。
0132デフォルトの名無しさんNGNG
今日帰りにExceptional C++買っていこう。
0133デフォルトの名無しさんNGNG
>>131
詳細←→全体がネスト構造になっているのを
ちゃんと現せればべつにクラスでなくてもいいんだろうけどね。

せっかくクラスのis a 継承のしくみがあるんだし
ゴスリングもスト羅臼トラップも
新しい例外専用の構造を導入するのが面倒だったんだろ。

専用のエラーの構造とか用意してある言語とかあるのかな。
0134デフォルトの名無しさんNGNG
>>130
使ってません(きっぱり)。
だって標準関数にほとんど例外指定がないんだもの。
どっから何が飛んでくるかわからんです。
bad_alloc とか。bad_allocを例外指定してない関数で、ちゃんとbad_allocをcatchするようなコード書いてますか?やってられません。
0135デフォルトの名無しさんNGNG
例外仕様って、なんかメリットあるのかな?本気でわからん。
ってことで、僕も使ってません。
0136デフォルトの名無しさんNGNG
少なくとも throw() 指定には意義がある。

constなくてもCでこまらんのと同じ。
0137デフォルトの名無しさんNGNG
でも const と違って throw() は実行時のコストがかかりますよね。
それに見合う意義があるかなぁ…
0138デフォルトの名無しさんNGNG
例外無し指定はコストかからんのでは?
0139デフォルトの名無しさんNGNG
いや、なんか例外が発生したら unexpected() を呼び出す、という処理が
必要になるはず。
0140デフォルトの名無しさんNGNG
C++超初心者でーす。
DOS窓のBASICでゲームは作ったことあるので、
だいたいのフローチャートというかアルゴリズムは理解しています。
CIN COUT IF くらいでの簡単なプログラムは組めます。

目標はVC++でウィンドウズ用アプリで
シューティングとかパズルゲームを作りたいのですが、
まずどこから手をつけたらいいのかわかりません。
VCの解説書とかサイトってのは基本手にまず、C++のソースを
理解しているものとして書いてありますよね。

まずはC++の黒画面で表計算くらいできるようになってからVCでしょうか。
なにか良いサイトはありますか?
0141デフォルトの名無しさんNGNG
まず、イベントドリブンを知れ。
0142デフォルトの名無しさんNGNG
そして、Delphiやれ。
0143デフォルトの名無しさんNGNG
struct AA{
     template<class T>void func(T t){cout<<t<<endl;}

     typedef template<class T>void(AA::*FUNC)(T);
     FUNC fff;
};
typedefのところがエラーになるんですが、templateをtypedefする方法
はないでしょうか。
0144デフォルトの名無しさんNGNG
>143
よくいとがわからんが。
 (↓だったら激しく勉強しる。)

template< typename T > struct AA{
void func(T t){cout<<t<<endl;}
typedef void(AA::*FUNC)(T);
FUNC fff;
};
・・・
AA<int> aa;
AA<int>::FUNC fp = aa.func;
0145デフォルトの名無しさんNGNG
struct AA{
     template<class T>void func(T t){cout<<t<<endl;}
     typedef template<class T>void(AA::*FUNC)(T);
     FUNC fff;
AA():fff(func){this->*fff();}
};
>>144いいえ、こうやりたいのです。
0146デフォルトの名無しさんNGNG
>>145
出来ない。当然だが、もうちこっと頭使え。
0147デフォルトの名無しさんNGNG
コンストラクタでオブジェクトをnewするのはいいんでしょうか。
0148144NGNG
>145
struct AA{ //冗長に書くと
 template<typename T1>void func(T1 t){cout<<t<<endl;}
 template<typename T2>typedef void(AA::*FUNC)(T2);
 FUNC fff;
 template< , >AA() . . .
}
か
template< typename T1, typename T2 > struct AA{ . . .}
か
template< typename T > struct AA{ . . .}
かのどれかかだろ?
(多分最後のやつしか動かんと思うが)
0149デフォルトの名無しさんNGNG
>>148
出来ました。ありがとうございます。まさかそんなtypedefの書き方があったとは・・・。
修行し直してまいります。
0150デフォルトの名無しさんNGNG
>>147
もちろんかまわないけど、リークに気をつけてね。
0151デフォルトの名無しさんNGNG
C++でファイル分割ソフト作りたいんですが何か参考になりそうな
ソースとか資料とかありませんか?
0152デフォルトの名無しさんNGNG
>>151
簡単すぎて(以下略
0153151NGNG
>>152
いやー初心者でして
0154デフォルトの名無しさんNGNG
>>151
初心者向けの本なら、どれ買ってきても「ファイルの読み込み方」と
「ファイルの書き出し方」は書いてあると思うからそれ嫁。
単純に分割するだけならそれ以上の知識はとりあえず要らん。
01551日目NGNG
世間ではC++難しいとかよく言われてるが、こんなのカンタンじゃねーか。
カンの悪いやつが泣き言いってるんだろーな。
0156デフォルトの名無しさんNGNG
Modern C++ Design を読んでなお、こいつ程度のことは洩れにもできる!
ってんだったら一生ついてきます>>155さん。
0157デフォルトの名無しさんNGNG
それなら俺もついて逝く
0158デフォルトの名無しさんNGNG
>>155 そういう軽はずみな発言はC++コンパイラが書けるようになってから言え
0159デフォルトの名無しさんNGNG
難しいってのはどういう部分を指していってるんだろう? 実は俺もちょっと
闇雲に難しい、といってる人には少し疑問がある。
言語自体は分かりやすいし、オブジェクト指向に関しても、でかいプログラム
書いたことある人なら無意識のうちに以前からやっていたことのような気がし
ない?
0160デフォルトの名無しさんNGNG
ライブラリでは?STLとかiostreamとか
0161デフォルトの名無しさんNGNG
ATL、WTL、COM、MFCとかじゃないですか?
確かに難しいし。
0162159NGNG
COM,MFCは確かに勘弁。
0163デフォルトの名無しさんNGNG
でもC++というより、マイクロソフトの腐った技術が安定していないともいえる。
0164デフォルトの名無しさんNGNG
MFCは何をするにもソース見にゃならんので、
ブラックボックスで開発できないから勘弁だが、
COMは素性のいいものさえ使ってればいっさい問題なし。
0165デフォルトの名無しさんNGNG
ひろーく使われてるのは叩かれてるね。
めちゃくちゃな使われ方もされてるからだろうけど。

あんまり使われてない・アマチュアしか使ってないのはそんなに叩かれない。
なぜなら一部のマニアがオナーニしてるだけだから。
0166デフォルトの名無しさんNGNG
>165 FUDですか?
0167C++初心者NGNG
class List { public: List *next; };
class B : public List { ... };

ってかんじでリストクラスを作って, リストを継承させて繋がるようにした
クラス B を作ってみたのですがクラスにリストが 2 個必要になったので

class B : public List1, public List2 { } ;

としてリストをつけようとすると 曖昧 だとエラーがでました。
やっぱりこんな実装は間違っているのでしょうか。
0168デフォルトの名無しさんNGNG
>>167
継承すると、クラスメンバは1つしか持てないので包含を使うとよい。
class List { friend class B; public: List *next; };
class B { List list1; List list2; ... };
ってな感じで。
0169デフォルトの名無しさんNGNG
>>167
というより、C++ならそもそもlistを自作する必要はない。
STLにあるので、それを利用しませう。
0170デフォルトの名無しさんNGNG
>>169
いや・・・・つーか学習用だろ。C++の入門書には必ずと言っていいほど
この手のクラス定義が出てくるからなあ。。。
0171167NGNG
>>168-170氏
ありがとうございます。勉強になりました。
クラス設計もできないど素人なのでSTLはまだ何が何だかわからなくて…。
いつか皆さんのようなC++のエキスパートになりたいです…。

class B の中で Listクラスを包含すると list1.next が指すオブジェクトが
Listクラスってわかるんですが, class B かどうかまでは不明になりますよね。
class List に抽象ポインタを追加してダウンキャストしてみないと分からない
とか…。うーん…C++って難しいですね…。

class List { public: List *next; void *object; };
class B { public: List list1; List list2; };
B b; B * pb = dynamic_cast<B *>(b.list1.next->object); う…
0172デフォルトの名無しさんNGNG
>>171
そんなJavaっぽいリストにしなくて済むようにC++にはSTL…というか
テンプレートがあるので、やっぱり一刻も早く STL を学ぶべきかと思われ。
0173デフォルトの名無しさんNGNG
>>171
包含は継承とちゃうから、dynamic_castは失敗するよ。
そうじゃなくて、

class List {
friend class B;
List *next;
void *object;
List() : next(0), object(0) {}
};

class B {
List list1, list2;
public:
B() : list1(), list2() {}
List* Head();
List* Tail();
bool isEmpty();
void Insert(List*);
void Delete(List*);
};

って感じで、あくまでもインターフェイスをBに持たせて、内部は隠蔽してしまう
のがいいと思う。STLも大事だけど、クラスの勉強もしてね。
0174デフォルトの名無しさんNGNG
>>167
Listクラスの中の List *next が未知のクラスT型だと解決しそうだな。
うーん…C++って便利ですね…。
0175デフォルトの名無しさんNGNG
newで3次元配列を確保する時のやり方がいまいち解りません。
abc[][][4]
最後が4というのは決まってるのですが、
その前の2つが決まってない時ってどうやるんですか。
アホな質問ですいません
0176デフォルトの名無しさんNGNG
>>176
超FAQだから調べりゃわかると思うけど、
int ***abc;
とかやって、1次元ずつnewしてください。
0177デフォルトの名無しさんNGNG
>176
あっそ
0178デフォルトの名無しさんNGNG
>>176
もしくは、全体分を1次元配列とみなして一気に new して、自分で添え字
計算してアクセスする。間接参照がない分こちらの方が (マシンによっては
だけど) 速いかも。
0179デフォルトの名無しさんNGNG
>>178
本当に早くなるのか?
0180デフォルトの名無しさんNGNG
>>176
(**abc)[4]とやれば、1次元分確保の手間が減るぞ。

>>178
FORTRANじゃないんだから。
0181デフォルトの名無しさんNGNG
あほみたいに大きいと違うだろうなぁ。
0182デフォルトの名無しさんNGNG
アクセスについてはほぼ変わらんと思うけど、
一括で確保できる分、全体的な処理速度は上がるかも

配列の三次元要素とか二次元要素が
OSのページングの単位内で収まるような場合は
小分けして確保した方がよい結果がでるかも。

クラス二つ用意してどっちが速いか実データで検証してみりゃ
いいのでは?

0183178NGNG
>>179
ごめん遅いわ。とりあえず簡単化のために二次元でやってみたよ。
1000 × 1000 の配列を取って、a[i][j] = 0; を 1000 回やってみた。
>>176 版 28.922sec, >>178 版 30.344sec
だった。要は、メモリアクセス対乗算命令ってことだけど、乗算の方が
ちょっと遅いみたい。

ちなみに、アクセスしているところのコードはこんな感じ
(a[ecx][edx] = 0; のコード)...

>>176 版 (う〜〜〜ん、素直だ...)
 mov eax, DWORD PTR _a1
 mov ecx, DWORD PTR [eax+ecx*4]
 mov DWORD PTR [ecx+edx*4], 0

>>178 版
 mov eax, DWORD PTR _nCols
 imul eax, ecx
 mov ecx, DWORD PTR _a2
 add eax, edx
 mov DWORD PTR [ecx+eax*4], 0

>>180
> FORTRANじゃないんだから。
なんのこっちゃ ?
0184178NGNG
>>183 の続き...

[ソース]
#include <stdio.h>
#include <conio.h>
#include <windows.h>

static int nRows;
static int nCols;
static const Loops = 1000;

static int **a1;
static int *a2;

static void _fastcall Func1(int Row, int Col)
{
 a1[Row][Col] = 0;
}

static void _fastcall Func2(int Row, int Col)
{
 a2[nCols * Row + Col] = 0;
}
0185178NGNG
>>183 の続きの続き

int main(int argc, char* argv[])
{
 nRows = 1000;
 nCols = 1000;
 a1 = (int **)malloc(nRows * sizeof(int *));
 for(int i = 0; i < nRows; i++){
  a1[i] = (int *)malloc(nCols * sizeof(int));
 }
 a2 = (int *)malloc(nRows * nCols * sizeof(int *));

 DWORD Start = GetTickCount();
 for(int Loop = 0; Loop < Loops; Loop++){
  for(int Row = 0; Row < nRows; Row++){
   for(int Col = 0; Col < nCols; Col++){
    Func1(Row, Col);
   }
  }
 }
 printf("%d", GetTickCount() - Start);

 Start = GetTickCount();
 for(Loop = 0; Loop < Loops; Loop++){
  for(int Row = 0; Row < nRows; Row++){
   for(int Col = 0; Col < nCols; Col++){
    Func2(Row, Col);
   }
  }
 }
 printf(", %d\n", GetTickCount() - Start);

 for(i = 0; i < nRows; i++){
  free(a1[i]);
 }
 free(a2);
 getch();
 return 0;
}
/* ちなみに、配列にアクセスしているところを関数にしているのは、
  直接書くと最適化されるため。*/



[実行環境]
Mother Board: Acer M19A (440BX)
Processor: Pentium-II 400MHz × 2
Memory: 256MB × 2, PC100 SD-RAM
Operating System: Windows2000 SP2
Development System: VC++ 6.0
Compile Options:
/nologo /ML /W3 /GX /O2 /D "WIN32" /D "NDEBUG" /D "_CONSOLE"
/D "_MBCS" /FAs /Fa"Release/" /Fp"Release/test.pch" /YX
/Fo"Release/" /Fd"Release/"
0186デフォルトの名無しさんNGNG
nColsが定数で、2のべき乗の場合はどうよ?
無理に調べなくてもいいけどさ。
0187デフォルトの名無しさんNGNG
漁スレなんでageとくわ
0188デフォルトの名無しさんNGNG
class Str{
public:char* pdata;~Str(){delete[] pdata;cout<<"end"<<endl;}
    Str(char* pval){
       pdata=new char[strlen(pval)];
       strcpy(pdata,pval);
      }
};
というクラスを作ったんですが、
Str str="ABCDF";
とやると、strcpyの部分でこけるんです。何故なんでしょうか??
0189デフォルトの名無しさんNGNG
こけませんでしたが?
0190デフォルトの名無しさんNGNG
>>188
strlen(pval)+1。
0191デフォルトの名無しさんNGNG
コケるってのがコンパイルはできるが実行時にクラッシュするという意味なら、
strlen(pval)+1
だろ。
0192デフォルトの名無しさんNGNG
>>188
車輪の再発明、もう見てらんない。
0193デフォルトの名無しさんNGNG
>>190
ありがとうございます♪そうです、'\0'の分の領域確保を忘れて
おりました。ああ、漏れもまだまだ厨房・・・。
0194デフォルトの名無しさんNGNG
>>186
その場合は、>>178 版の方が速い。(nCols = 1024 で測定。) でも、
僅差 (1% 程度) だったよ。(ちなみに、nCols が定数で 1000 の場合だ
と、逆に >>176 版の方がわずかに速い。)

> 無理に調べなくてもいいけどさ。

初めそれでやってて、「やっぱ、俺って正しいわ。」と鼻高モードだった
んよ。で、よく考えてみたら...。俺ってバカじゃん、ショボーンてわけ。
0195デフォルトの名無しさんNGNG
>>192
まあ、そう言うな。クラスの勉強には、いい題材だよ。>>188 が必要に
駆られてやってるなら、別の勉強が必要だけどな。
0196デフォルトの名無しさんNGNG
string で書式指定するには?
0197デフォルトの名無しさんNGNG
例えばどんな指定をしたいの?
0198かなりのスレ違いだがNGNG
C,C++、C#、java、perl等などを
難易度順に並べるとしたらどうよ。
0199デフォルトの名無しさんNGNG
std::stringstream ss;
ss << std::fixed << std::setw(2) << 1.0f;
std::string(ss.str());

こんなん?
0200デフォルトの名無しさんNGNG
>>196
普通はstringstreamから変換じゃないか?
0201デフォルトの名無しさんNGNG
でもstringstreamは遅いしいまいち不便だから
std::vector<char>とかにs(n)printfで書き込んじゃう方が多いね。

operator <<定義したオブジェクトにしかつか遠視。
0202デフォルトの名無しさんNGNG
>>201
遅いのは確かだか...

不便なのは慣れていないから(気持ちは分かるがsprintfだって結構不便)だし、
operator<<を定義しているものならなんでも使えるのはメリットだと思う。
(sprintfは組込型にしか使えない。)
0203デフォルトの名無しさんNGNG
誰かstd::stringにsprintf実装して下さいよ。
0204デフォルトの名無しさんNGNG
std::string s;
s.sprintf("%dゲットズザー!",1000);
みたいに。
0205デフォルトの名無しさんNGNG
>>204
正直、俺もそれ楽で良いと思う・・・。
0206デフォルトの名無しさんNGNG
オレは、g++ 用に wprintf が欲しいよ。誰か作ってくれぇ。
0207デフォルトの名無しさんNGNG
template<int N>
class Factorial {
public:
enum { value = N * Factorial<N-1>::value };
};
コレなんですか?何をしているかすら分からない・・・・・・・・・
0208デフォルトの名無しさんNGNG
階乗の計算でしょ。でもその下でN=1の場合の特殊化が必要だよ。
0209デフォルトの名無しさんNGNG
>>207
templateと書いてあるけど、intの特定バージョン。
また、クラスFactorialは実体化時に展開される。inlineだと展開されないから
templateを使ったのでしょう。
0210デフォルトの名無しさんNGNG
>>208
そうですね。コンパイル時にエラーが出るでしょう。
0211デフォルトの名無しさんNGNG
すげー。207じゃないけど、漏れもわからなかった。
enumは何か意味あるの?
0212デフォルトの名無しさんNGNG
enumは計算結果のみ意味を持っていて、計算課程をコードとして残さない。
0213デフォルトの名無しさんNGNG
http://www.microsoft.com/japan/developer/library/dsmsdn/msdn_090798.htm
0214デフォルトの名無しさんNGNG
むずかひ・・・
0215デフォルトの名無しさんNGNG
overflow_errorとunderflow_errorはどんなとき投げられるのですか?
実際のコードで教えて
0216デフォルトの名無しさんNGNG
>>203
string用にoperator+でも定義したら?
0217デフォルトの名無しさんNGNG
MFCのCString参考にしたら、
std::string ssprintf( const char *, ... );
くらいは簡単につくれるはず。
0218デフォルトの名無しさんNGNG
引数有りのコンストラクタを
newで複数(配列)確保することってできますか?

↓こんな感じ
class ctest{
public:
ctest(int a)
~ctest()
};
void main()
{
ctest *ct;
ct = new ctest(0)[32]:// これだとエラー

//delete ct;
}

とりあえず、現在
ctest *ct[32];
for(i=0;i<32;i++)ct = new ctest(0);
のように、ポインタを複数宣言して、ループで一個ずつnewやってます。

0219デフォルトの名無しさんNGNG
>>192
それは勉強する時には関係ないだろ
0220デフォルトの名無しさんNGNG
>>218
できません。
もしできるとしたら、次のように書きたい所。
ct = new ctest[32](0);
これで出てくるコンパイルエラーを見れば意味がわかりますよ。
0221デフォルトの名無しさんNGNG
>>218
配置構文newを覚えなさい。

0222デフォルトの名無しさんNGNG
確保
ctest *ct;
ct = new ctest[32];
for (size_t i = 0; i < 32; ++i)
new (ctest[i]) ctest(0);
解放
for (size_t i = 0; i < 32; ++i)
delete (&ctest[i])->~ctest();
かもしくは
for (size_t i = 0; i < 32; ++i)
std::destroy(&ctest[i]);


引数が一個だったらstd;;vectorを覚えた方が早い。

0223デフォルトの名無しさんNGNG
ctest *ct = operator new (sizeof(ctest) * 32);
for (size_t i = 0; i < 32; ++i)
new (&ct[i]) ctest(0);

for (size_t i = 0; i < 32; ++i)
delete (&ct[i])->~ctest();
delete[] ct;
の間違いだった。写し

0224デフォルトの名無しさんNGNG
>>221
配置 new で何かできる?
0225デフォルトの名無しさんNGNG
>>224
この場合は特に配置newのアドバンテージはないですね。
ただ使用法のサンプルとしては面白い。
0226デフォルトの名無しさんNGNG
我ながら何度も書くのは情けなく思うけど
delete [] ct;
はやっちゃいけない予感。

識者よ、我らに正解を与えたまえちくしょう。

どっちにしろ、引数が一個なら配置構文のnewを使う意味はないね。


0227デフォルトの名無しさんNGNG
質問、超初心者です。
プログラミングはじめたばかりなのですが、
C++を使ってとりあずDOS窓で動く簡単なインベーダーゲーム
みたいなのをやってみようと思うのですが、
これベーシックでやったことあるのでノウハウはわかっています。

ただ、CとC++の区別がいまいちつきません。プログラマーサイトみると
たとえば表示命令でplintf<<"とcout<<"がありますよね。
とりあえず最初に<stdio.h>と宣言したならば前者で、
<iostream.h>と宣言したならば後者ということで
よろしいのでしょうか?そのような解説をしてあるページとかってありますか?
0228デフォルトの名無しさんNGNG
あと、座標指定のlocateって
stdio.hとiostream.hで共通?
0229デフォルトの名無しさんNGNG
>>225
operator newが確実に sizeof(class) を確保するとは限らない
(管理領域を余分にメモリ確保する可能性もある)から、
>>223の書き方は間違いじゃないか?
0230デフォルトの名無しさんNGNG
>>227
>ただ、CとC++の区別がいまいちつきません。プログラマーサイトみると

初心者のうちは、むやみにそういうサイトを参照するな。
9割はヘボだから。
世間で評価の高い本でも買ってよめ。

とりあえず<iostream.h>とか書いてあるサイトは無条件に捨て。
0231 NGNG
>>230
VC++6.0
なんだけど別にC++じゃなくてCも使えるんだよねplintf

とそんでむしろcout(iostream.h)よりもplintf(stdio.h)を使ってる
人の方が多そうだけど。plintfの方がよく使うの?
0232デフォルトの名無しさんNGNG
>>231
plintfはリンカエラー出るっしょ。
0233 NGNG
リンカエラー??
じゃあとにかcoutでいいってことね。
0234(;´Д`)NGNG
>>233
plintf → printf
0235 NGNG
ブーー!
0236デフォルトの名無しさんNGNG
>>231
<iostream.h>は古い書き方ってこと。
今は<iostream>。
最近書かれたドキュメントで<iostream.h>と書いてあったら
筆者が勉強不足。
0237 NGNG
あーhって書かなくてもいいんだ。
0238デフォルトの名無しさんNGNG
>>237
でもVC++だと-GXをつけないとえらいことになるね。
0239 NGNG
GXってなに?
0240デフォルトの名無しさんNGNG
ヘルプ嫁
0241デフォルトの名無しさんNGNG
http://www-cms.phys.s.u-tokyo.ac.jp/~naoki/CIPINTRO/CCGI/kanjicod.htmlを参考に
EUCの文字列をSJISに変換して出力する関数を書いてみたのですが、
うまく動きません。どこがおかしいのでしょうか?
void OutSJIS(string str)
{
  for(unsigned int i=0; i<str.size(); i++)
  {
    unsigned char chr[2];
    chr[0] = (unsigned char)str[i];
    chr[1] = (unsigned char)str[i+1];
  
    if(chr[0] < 0x80) continue;
    if(i >= str.size()) break;
    if( chr[0] & 0x01 )
    {
      chr[0] >>= 1;
      if( chr[0] < 0x6F ) chr[0] += 0x31; else chr[0] += 0x71;
      if( chr[1] > 0xDF ) chr[1] -= 0x60; else chr[1] -= 0x61;
    }
    else
    {
      chr[0] >>= 1;
      if( chr[0] < 0x6F ) chr[0] += 0x30; else chr[0] += 0x70;
      chr[1] -= 0x02;
    }
    str[i] = (char)chr[0];
    str[i+1] = (char)chr[1];
  }
  cout << str << endl;
}
0242デフォルトの名無しさんNGNG
とりあえずliが1増える場合と2増える場合が有ると思うんだが。
0243デフォルトの名無しさんNGNG
>>241
半角文字の場合continueしてしまい、表示されない。
0244241NGNG
>>242
ありがとうございます。
str[i+1] = (char)chr[1]の次の行にi++を追加したら
とりあえず全角文字列の部分は表示できるようになりました。

>>243
確かに半角文字が表示されません。
今色々やってみているところです。
0245デフォルトの名無しさんNGNG
>>223
デストラクタのほうは、ループをダウンカウントにしないと
まずいっしょ。
…ていうか、よく見たら間違いだらけのような。

ctest* ct = operator new[](sizeof(ctest)*32);
for (int i=0;i<32;++i)
  new (&ct[i]) ctest(0);

for (int i=31;i>=0;--i)
  ct[i].~ctest();
operator delete[](ct);

More Effective C++の項目4を参考にした。これが正しいコードらしい。
ダウンカウントはともかくとして、>>223のコードって正しく動くの?
0246デフォルトの名無しさんNGNG
構造体をnewで確保するとデフォールトでメンバー変数の値はNULLに
なりますか?それとも不定ですか?
0247デフォルトの名無しさんNGNG
>>246
structの中にコンストラクタが宣言されてなければ、デフォルトコンストラクタが
呼ばれ、「ゼロ」で初期化される。
0248デフォルトの名無しさんNGNG
>>247
コンストラクタがあるメンバに対しては初期化されるが
コンストラクタの無い基本型は不定じゃない?
0249デフォルトの名無しさんNGNG
>>248
プログラミング言語C++第3版P172§6.2.8を嫁。
0250デフォルトの名無しさんNGNG
>>249
読んだけど、「組み込みデータ型に対してコンストラクタを明示的に使ったときの値は」
のことなら、この場合明示的ではないので該当しないと思うが。
0251デフォルトの名無しさんNGNG
>>249
実行してみれ。

#include <iostream>
#include <vector>
using namespace std;

int main()
{
int *p;
vector<int> *vp;

p = new int[10];
vp = new vector<int>(10);

for (int i = 0; i < 10; i++)
cout << p[i] << ' ';
cout << endl;

vector<int>::iterator pv = vp->begin();

for (; pv != vp->end(); pv++) cout << *pv << ' ';
cout << endl;
}
0252デフォルトの名無しさんNGNG
p.119
4.9.5 初期設定
中程の
「配列と構造体のメンバは、配列構造体が静的であるかどうかに関わらず、デフォルトで初期化される。」
と書かれているのは誤植で

http://www.longtail.co.jp/errata/
によると
pg.119 s/静的であるかどうかに関わらず、デフォルトで初期化される/静的であるかどうかによって、デフォルトで初期化されるかどうかが決まる/

と訂正されている。
0253デフォルトの名無しさんNGNG
>>251
その例は、STLが明示的なコンストラクタ呼び出しを行っているので
0初期化される例だね。

だけど、今回の>>246は単なるstructのnewの話なので、違う話だな・・・
0254253NGNG
>>253
あ、見当違いだった。

>>251
new(の過程で呼ばれるメモリ確保が) 0初期化する処理系だと
どっちも0になってしまうよね。

試しに手元のgcc 2.9.5 で struct を new してアセンブリ出力してみたが
メンバの初期化コードは生成されなかった。
0255デフォルトの名無しさんNGNG
>>252
見てみた。
俺の第3版は初判第1冊だ。
鬱だ・・・・・・・・・
0256名無しかもNGNG
プログラムの始めにdefineで変数の値を決めることのメリットはなんですか?defineのなかに数式とかも書けるのでしょうか?
0257デフォルトの名無しさんNGNG
>>256
C++の場合はなるべくdefineの代わりにconstやinlineを使うように。
ただ#ifdefなどのマクロ評価はC++でも多用される。
0258デフォルトの名無しさんNGNG
#defubeの主な目的は、 定数に名前を付けることである。円周率πを使うたびに
3.141592653589793と記述する代わりに、変数 pi にdefineを使って値を割り
当てることができ、3.14...という長い定数を使う代わりに pi を使うことが出来る。
さらに、円周率が変わった場合に、プログラムの変更が容易になるという利点がある。
0259256NGNG
ありがとうございます♪
02609999NGNG

-------風俗の総合商社・MTTどこでも-------

〇デリバリーヘルス〇デートクラブ〇女性専用ホストクラブ〇
〇ハードSM奴隷クラブ〇レズビアン倶楽部〇ホモ・オカマ倶楽部
〇変態痴女と遊ぶ会〇痴漢・覗き趣味の会〇変態同好会・各種!
●楽しく遊べます! 090-8002-8356番
-----------美男・美女会員など多数在籍中-----------
  http://www.mttdocomo.jp/
-----女性アルバイト随時募集・高収入(日払い)月100万円可能-----
-----レズビアン・スタッフ●ホモスタッフ●女性専用ホストスタッフ同募-----
http://www.mttdocomo.jp/
------------------------------------------------
0261デフォルトの名無しさんNGNG
>>252
あと、p293 「10.4.2 デフォルトコンストラクタ」も読むとよいかと。
つか、ここにも誤訳があるんだよなぁ… (ページの終わりのあたり)
0262デフォルトの名無しさんNGNG
>>258
「約3」なんかになっちまったおかげで、jokeがjokeで無くなってしまった...
0263デフォルトの名無しさんNGNG
char* out(size_t size){
class local_c{
public:char* temp;local_c(size_t val):temp(new char[val+1]){}
~local_c(){delete[] temp;temp=NULL;cout<<"local_end"<<endl;}
};
local_c lo(size);

while(size--){
lo.temp[size]=pdata[size];
cout<<lo.temp[size]<<endl;
}
return lo.temp;
}
pdataは何処かで定義されている配列です。この関数を、
cout<<out(3)<<endl;
とすると、どうやらアドレスがchar*にキャストされて表示されている・・・みたいです。
returnの部分を何とか出ませんか?
0264デフォルトの名無しさんNGNG
>>263
それはともかく、return された lo.tempの指すメモリは、returnされた時点で開放されてるので
coutに渡されたときにはすでに無効アドレスだべ。
0265デフォルトの名無しさんNGNG
>>264
サンクスです。何か根本から間違っていました。出直してきます。
0266デフォルトの名無しさんNGNG
>>264
いや、無効にならないように、関数内でnewして新規に確保しているわけだが、
デストラクタ~local_c()で既にdeleteされたポインタを返しているのが問題では
ないだろうか。
0267デフォルトの名無しさんNGNG
うむデストラクタで解放しちゃってるな。
0268デフォルトの名無しさんNGNG
なんつーか、文字列の安全な所有権の移動(共有)をやりたいだけなら
std::string使っとけばいいんとちゃうん?
0269デフォルトの名無しさんNGNG
264さんと266さんは多分同じ事を言っているんだろうな。
0270デフォルトの名無しさんNGNG
>>217
効率をあまり考えないなら(どうせ sprintf だし効率悪くても良いだろ)、

1. fprintf() で /dev/null に書き込んで文字列長さを取得
2. alloca() でスタック上に文字列を書き込むバッファ領域を確保
3. 2 で確保した領域に sprintf()
4. そのバッファから std::string() をコンストラクトして返す

とかで簡単に実装できる。
0271あうNGNG
#include<iostream>
using namespace std;

int max(int temp,int a){ /* 最大値を求めるときに渡す関数 */
return temp<a;
}

int min(int temp,int a){ /* 最小値を求めるときに渡す関数 */
return temp>a;
}

/* 一般的にトップを求める関数 */
int gettop(int* a,int size,int (*p)(int,int)){
int temp, i;
temp = a[0];

for(i=1;i<size;i++){
if((*p)(temp,a[i])) temp = a[i]; /* 共通化した処理 */
}
return temp;
}

int main(){
int data[] = {36,47,19,11,18,25,20,57,39,67,28}; /* 対象データ */

int size = sizeof(data)/sizeof(int); /* 配列サイズを求める */

/* 実際に使ってみる */
cout << "最大値 : " << gettop(data,size,max) << endl;
cout << "最小値 : " << gettop(data,size,min) << endl;

return 0;
}
一番最初の最初のmax関数とmin関数ですが、temp>aとか条件を返して
ますよね?なのになんで返り値の型はなんでintなの?boolじゃないの?
不思議に思ってコンパイルしてみたらちゃん通りましたけど理由がわかりません
どなたか教えて下さいおねがいしまう。

0272デフォルトの名無しさんNGNG
>>271
if((*p)(temp,a[i])) temp = a[i]; /* 共通化した処理 */
で、真か偽かだけを見ているので、boolでもintでも通ります。
0273デフォルトの名無しさんNGNG
つか、ふつー、std::max_elementとか、std::min_elementとか、
あるいは、関数テンプレートとか使わね?
0274あうNGNG
わかったようなわからないような・・・
だったらやっぱりboolって書くべきじゃないですか?
0275あうNGNG
>>273
私が書いたわけじゃないので・・・
メルマガにのっていました。
0276デフォルトの名無しさんNGNG
某処理系で以下のプログラムが seg. fault をおこすそうですが、
これって不正ですか?

#include <iostream>
using namespace std;
void foo(int i) throw (char*)
{
 if (i == 0) throw "zero";
 cout << "non-zero";
}

main()
{
 try {
  foo(0);
 } catch (char* s) {
  cout << "error : " << s <<endl;
 }
 return 0;
}

string& で受けても同じだそうです。
0277デフォルトの名無しさんNGNG
>>276
某処理系って何?
0278デフォルトの名無しさんNGNG
#include<iostream>
using namespace std;

bool f1(void){
return true;
}
bool f2(void){
return false;
}
void get_f(bool (*p_func)(void)){
bool n=(*p_func)(void);
if(n)cout<<"nはtrue"<<endl;
else if(!n)cout<<"nはfalse"<<endl;
}
int main(void){
get_f(f1);
get_f(f2);
return 0;
}

関数ポインタを引数にとる関数つくりたいんだけどできません。
なぜ?
0279デフォルトの名無しさんNGNG
>bool n=(*p_func)(void);

関数呼び出しに日下部はいらんよ
0280デフォルトの名無しさんNGNG
>>279

あ!そうでした。すいません。馬鹿だ・・・
ところで日下部ってどういう意味?
0281デフォルトの名無しさんNGNG
>>279
voidが不要って事ね。
0282デフォルトの名無しさんNGNG
>>280
http://pc.2ch.net/test/read.cgi/tech/1019372139/l50
0283デフォルトの名無しさんNGNG
>>277
http://pc.2ch.net/test/read.cgi/linux/996170115/l50
かと
0284デフォルトの名無しさんNGNG
日下部ってまだ居るの?
 Λ Λ
(. .)
(   )〜
みたいなのだろ
0285デフォルトの名無しさんNGNG
>>276
g++だとchar *を投げても受け取られませんね。

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

void my_terminate()
{
cout << "unexpected error occured!" << endl;
exit(1);
}

void foo(int i) throw (char *)
{
if (i == 0) throw "zero";
cout << "non-zero";
}

int main()
{
set_terminate(my_terminate);
try {
foo(0);
}
catch (char *s) {
cout << "error : " << s <<endl;
}
}
0286デフォルトの名無しさんNGNG
>>276
if (i == 0) throw "zero";

を
if (i == 0) throw static_cast<char *>("zero");

にしたらg++でも正しく動作しました。
どうやら throw "zero"; だけではchar *型の例外を投げたことには
ならないようです。やれやれ。
0287デフォルトの名無しさんNGNG
>>285
某処理系(w)では

11c12
< void foo(int i) throw (string&)
---
> void foo(int i) throw (char *)
13c14
< if (i == 0) throw string("zero");
---
> if (i == 0) throw "zero";
23c24
< catch (string& s) {
---
> catch (char *s) {

でもBus Errorを起こすみたいです。
0288287NGNG
うが、引数逆にしちゃった(w
0289デフォルトの名無しさんNGNG
>どうやら throw "zero"; だけではchar *型の例外を投げたことには
>ならないようです。やれやれ。

const char* 投げてることになってるんじゃないかな?
0290デフォルトの名無しさんNGNG
>>289
産休。某処理系で試してみてくらしゃい。

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

void my_terminate()
{
cout << "unexpected error occured!" << endl;
exit(1);
}

void foo(int i) throw (const char *)
{
if (i == 0) throw "zero";
cout << "non-zero";
}

int main()
{
set_terminate(my_terminate);
try {
foo(0);
}
catch (const char *s) {
cout << "error : " << s <<endl;
}
}
0291241NGNG
>>241=>>244です。
再makeしたら動くようになりました。
これを使って、coutを継承してoperator<<をオーバーライドし、
int等の自動変換を継承しつつ、
char*やstringが渡された時に自動的に文字コードを変換するようなものを
作ることはできるのでしょうか?
0292デフォルトの名無しさんNGNG
できるか、という御下問ですが、結論だけをもうしますと、できます。
ただし、インスタンスであるcoutを継承する、ということはできません。
#defineなど邪法を用いれば、おそらくお望みの結果となるでしょう。
0293デフォルトの名無しさんNGNG
>>291
フィルタ的なストリームバッファを実装してみたら。
0294デフォルトの名無しさんNGNG
>>290
某処理系では何を投げても seg. fault か bus error になるようです。set_terminate効かず(泣
どうも原因は283のリンク先にあるとおりlibc_mallocでこけてるみたいです。
0295デフォルトの名無しさんNGNG
>>294
ライブラリがバグってるんじゃ手の施しようがないね。
g++の修正差分って配布されてないの?
0296デフォルトの名無しさんNGNG
class A{
public:typedef void(CA::*FUNC)(void);
template<typename T>typedef void(CA::*Multi)(T);
FUNC fff[4];
A(){fff[0]=(Multi)foo;}←--------このMultiみたいに汎用のキャストって出来ます?
void func(){cout<<"func"<<endl;}勿論これはエラーなんですが・・・・・。
void foo(int a){cout<<a<<endl;}
};
0297デフォルトの名無しさんNGNG
>>296
何をしたいのかよくわからんが、
関数オブジェクトでも使っとけ。
0298デフォルトの名無しさんNGNG
ち、違うんだ〜〜
typedef void(*FUNC)(void);
void foo(int a){......}
void hoge(double a){........}
FUNC fff;
fff=foo;//エラー
これを、
fff=(Multi)foo;
fff=(Multi)hoge;
と書きたいんだ〜〜
0299デフォルトの名無しさんNGNG
>298
fffを引数可変な仮装関数みたいな感じにしたいみたいだが、
ちっとはコンパイラ開発者の身にもなってみろよ。
そういうそういうことができたとして、
fff = (multi)foo; fff(3);
fff = (multi)hoge;fff(3);
を、どうコンパイルする、っていうんだ?
引数をpritnfスタイルにして共通化するとか、
VARIANTオブジェクトに共通化しる!
0300デフォルトの名無しさんNGNG
>>298
fffに代入した後はどうやって使う気だ?
もしかして引数の型で呼ぶ関数を変えたいとか?
0301298NGNG
う〜ん、やはり不可能みたいですね(よく考えたら当たり前という気がしてきた)
全メンバ関数アドレスを単一の配列に格納して使用したかったんですが、
無理となると、さてどうしようか
0302デフォルトの名無しさんNGNG
全部void*で格納しといて使うときまたキャストするとか
0303デフォルトの名無しさんNGNG
ああ、いや、使うときにキャストを意識したくないんです。
だからMultiにキャスト出来る方法ないかな〜〜と考えてたわけ。
fff=(Multi)foo;(Multi)foo(3);
fff=(Multi)func;(Multi)func(3);
としたかったのよ。でも無理だねぇ。
0304デフォルトの名無しさんNGNG
>302
メンバ関数へのポインタのサイズはsizeof(void*)以上になることがあるよ。

0305デフォルトの名無しさんNGNG
>>303
typedef void (*FUNC)(...);
FUNC fff[3];
void foo(...);
void hoge(...);
見たいなのか?
0306デフォルトの名無しさんNGNG
( ´∀`) エッ?
0307デフォルトの名無しさんNGNG
>>305
だから、まぁ、そうなんだけどさ・・・・
0308デフォルトの名無しさんNGNG
( ゚Д ゚) エッ?
0309デフォルトの名無しさんNGNG
0から1の間の数をランダムに10個表示させたいのですが。
実行するとx=0ばっかり出てしまいます・・・


#include <iostream>
#include <math.h>
using namespace std;
void main()
{
for(int i=0; i<=10; i++)
{
double x=rand()/RAND_MAX; //0〜1のランダムな数
cout << "xは" << x <<"\n" ;
}
}
0310309NGNG
double x=(double)rand()/RAND_MAX;
これで出来たような気がします。
0311デフォルトの名無しさんNGNG
>>258
C言語ではそうだね。
0312デフォルトの名無しさんNGNG
>>296
template<typename R_Type,typename Seed>void caster(R_Type& lhs,Seed& rhs){
lhs=reinterpret_cast<R_Type>(rhs);
}
こんなのどうよ?
0313デフォルトの名無しさんNGNG
>>312
reinterpret_cast使った時点であぼーん決定。
0314デフォルトの名無しさんNGNG
>>312
代入時のキャストはそれでもいいけど、関数を呼ぶ時はどうすんの?
0315デフォルトの名無しさんNGNG
a=27などと表示させたい場合
printf("a=%d",a);←これであってますかね。
これを
std::cout<< <<std::endl;
を使うとどういうふうに書けばいいんですか?
0316デフォルトの名無しさんNGNG
std::cout<<"a="<<a<<std::endl;
0317デフォルトの名無しさんNGNG
ありがとうございました!!!!!!>>316
0318デフォルトの名無しさんNGNG
endl使ってる時点ですでに互換性無し。

std::cout<<"a="<<a;if(0)std::cout<<std::endl;
が正解だろ。
0319デフォルトの名無しさんNGNG
>>313
Seedがキャストされる前の型なんだから、それをどっかに確保して
関数呼ぶときにそれを使ってキャストしる。
0320デフォルトの名無しさんNGNG
ねー、endlって処理系(OS?)依存なのっ?
0321デフォルトの名無しさんNGNG
はつみみです。
0322デフォルトの名無しさんNGNG
てゆーか、>>318 が何言ってるのかぜんぜんわかんにゃ。
0323デフォルトの名無しさんNGNG
>>322
318じゃないけど、
endl突っ込んだら改行しちゃうよ。
でもやっぱりif(0)以降はわかんにゃ。
0324323NGNG
あー、315が「endl使うと」って書いてるから無理やり入れてあんのか。
0325デフォルトの名無しさんNGNG
if(0)は//の代わりに入れてあるのか。
0326322NGNG
わかった。
よーするに、>>318 はヒネクレモンというわけだ。
0327デフォルトの名無しさんNGNG
>323
あー、そういうことか。
もとのprintfのほうには、"\n"で終端してないってことか。
しかし、それを「互換性無し」という318もなんだかなー。
0328デフォルトの名無しさんNGNG
ひねくれもんage
0329デフォルトの名無しさんNGNG
ヘソ曲がりなコード

int main()
{
int i = i;         // (`へ´)
return 0;
}
0330デフォルトの名無しさんNGNG
例外指定ってありますよね
void func() throw(); <- これです。
これを指定しておくと、どういう効果があるんですか?

throw()は例外を投げないという指定だと思いますが、
この内部で例外を投げると
1 無かったことになる
2 捕捉することが出来ない
どっちなんでしょうか?

VC++6.0しか持ってないので、確認できないんです。
0331デフォルトの名無しさんNGNG
>>330
3.異常終了します。
0332デフォルトの名無しさんNGNG
unexpected()が呼ばれる
set_unexpected()で変更出来る

だったと思うけど
0333デフォルトの名無しさんNGNG
で、デフォルトのunexpected()がabort()を呼ぶと思う
0334デフォルトの名無しさんNGNG
set_unexpected でハンドラ変更したりしたところで呼び出し元には戻れないから、要するに結局のところ abort するっつぅことやね。
0335デフォルトの名無しさんNGNG
ダイアログ出したり、変更をファイルに書き出したりする
チャンスが与えられてる、ってのは大きな違いかも。
0336デフォルトの名無しさんNGNG
ふと思ったこと。set_unexpectedのハンドラから呼び出し元に戻る事は出来なくても、
unexpectedハンドラの中から、メッセージループを実行したりして
そのままずーっと実行を続けてもいいんだろうか。
0337デフォルトの名無しさんNGNG
>>336
ワラタ
やってみ。
0338デフォルトの名無しさんNGNG
ファイルがオープンできなから例外を投げるのはOKでしょうか?
0339デフォルトの名無しさんNGNG
>>338
謎な文章書かないでください。
0340338NGNG
ごめんなさい
こっちが正しいでありんす

ファイルがオープンできなかったら例外を投げるのはOKでしょうか?
0341デフォルトの名無しさんNGNG
当然オープンできなきゃ困るファイルが開けない…なら
例外を投げて処理するべきだろう。そうでもないなら
エラー処理の仕方の方針の問題な気がするのでてけとーにせよ。
0342デフォルトの名無しさんNGNG
>>340
いいんでないの?
MFCのCFileクラスもコンストラクタがそういうことしてるし。
0343お願いしますNGNG
feet=floor(totalInches/12.0);
いま、LABをやっているんですけどこのheader file
を教えて下さい
0344デフォルトの名無しさんNGNG
>>343
LABって何よ?
0345デフォルトの名無しさんNGNG
343 desu

homework dedu

0346デフォルトの名無しさんNGNG
宿題なら自分でやれや。
0347デフォルトの名無しさんNGNG
>>343
マニュアル調べるなり検索するなりすれよ。
人をマニュアル代わりにすんなよ。
0348デフォルトの名無しさんNGNG
そもそもスレ違いだしな。
0349338NGNG
おいお前ら(>>341-342さん)!

・・・・・


m(^▽^)mありがとうございま〜した。また次もおながいしまーっす
0350lNGNG
>>343
マスかけや
わかるかな?わかんねーだろな
0351デフォルトの名無しさんNGNG
例外で気になったんだが、コンストラクタから積極的に例外を送出するコードってどう思う?
俺はコンストラクタ以外に構築メソッドを用意せずに、どんどん例外を投げてるんだが。

たとえば、ファイルクラスでも、open/closeで一つのクラスを使い回すのは
あまり好きじゃないんで、construct/destructで一連の作業を終了させ、
再利用できないような設計してるんだけど。
0352デフォルトの名無しさんNGNG
>>350
ワロタ
0353デフォルトの名無しさんNGNG
>>351
良いんではないかね。Javaもそうだし、リークに気を付けさえすれば、特に問題ないかと。
むしろ iostream とかがそういう風になってないのが嫌な感じ。
0354HHHNGNG
平方採中法で乱数作るプログラムを書きたいんですが、
例えば「1234567890」という数値から「34567」という真中の桁だけ抜き出す
にはどうしたらいいんでしょうか?
0355デフォルトの名無しさんNGNG
正数だけなら
long n = 1234567890;
long x = (n / 1000) % 100000;
0356デフォルトの名無しさんNGNG
あ〜やっとC++のキーワードをソートできた〜
0357デフォルトの名無しさんNGNG
>>351
俺もそうしてるよ。いちいち「もしopenをやってないなら」とかチェックしなくてすむのがいいよな。
>>353はリークの心配をしてるみたいだけど、全部のクラスをそういう風に自己責任で
構築させるようにしていくと、必然的に、どんなタイミングで例外が出てもリークが
起きないようになっていくよ。
0358デフォルトの名無しさんNGNG
>>357
ほんとのところ、例外のリークとかは実装時に考えることにして、
あんまり深く考えてなかったんだけど、たまたまMSDNの例外安全の文章を読んでたら、
出来る限りコンストラクタから例外を投げるなという記述があったんで、気になってた。

コンストラクタ内部で例外を捕まえなかったということは、
その例外からの復帰が不能だということだから、内部で無理に捕まえなくて、
呼び出し側に例外をスルーしちゃってもいいと思ってた。

もちろん、例外指定を行えずに未知の例外が飛んでくるわけだから、
あんまり関心出来た事じゃないとは思うんだけど、catch (...)で捕捉して、
オブジェクトの作成に失敗したと扱うのは、汚いコーディングなのかな、とか。
0359357NGNG
>>358
このページのことかな?
http://www.microsoft.com/JAPAN/developer/library/vccore/_core_exceptions.3a_.exceptions_in_constructors.htm
このページに限らず、MSDNの例外に対する記述って、やり方が古いんだよね…。
More Effective C++ 、Exceptional C++ に記述してあるやり方なら、なにも問題は
起きないはずだけど。

>呼び出し側に例外をスルーしちゃってもいいと思ってた。
いいと思う。俺はやってるよ。
ところで、「スルー」は「through」の意味で言ってるよね?「throw」は「スロー」…。
(いや、俺は例外を初めて見たときは読み間違えてたからね)

>catch (...)で捕捉して、 オブジェクトの作成に失敗したと扱うのは、汚いコーディングなのかな、
これもやってる。汚いとは思ってない。ただまあ、CFileの例外はEFile,CRegの例外はERegって
風にクラス分けはしているけど。
0360デフォルトの名無しさんNGNG
VC6で Effective C++ のシングルトンをやろうとして下のように記述したら、
コンパイルエラーが出ます。

class Hoge{
public:
  static Hoge& GetInstance(void);
private:
  Hoge(void);
  ~Hoge(void);
};

Hoge& Hoge::GetInstance(void){
  static Hoge obj;
  return obj;
}
Hoge::Hoge(void){
}
Hoge::~Hoge(void){
}

error C2248: 'Hoge::~Hoge' : private メンバ (クラス 'Hoge' で宣言されている)にアクセスできません。

C++の仕様としては、このエラーはおかしくないですか?
ほかのコンパイラではどうなるのか、知ってる方は教えてください。
もしVC6だけのバグなら、.NETでは直ってるかどうかって情報も欲しいっす。
0361デフォルトの名無しさんNGNG
>>360
staticメンバobjの宣言がHogeの中にない。
0362デフォルトの名無しさんNGNG
>>360
コンストラクタとデストラクタはpublicに置いて下さい。
0363デフォルトの名無しさんNGNG
>>360
あんたの言うC++の仕様って何?
おかしいと思う根拠は?
>C++の仕様としては、このエラーはおかしくないですか?
仕様と照らし合わせたんだよね?

・誰がHogeクラスのインスタンスを破棄するか考える
・破棄者はHogeのメンバであるか、お友達であるかよく考えてみる
0364デフォルトの名無しさんNGNG
>>362
コンストラクタがpublicだとどこからでもインスタンスが作れるので、
Singletonクラスとしてはダメな設計だろ
0365デフォルトの名無しさんNGNG
age
0366デフォルトの名無しさんNGNG
>>360
おかしくない。obj のコンストラクタは、Hoge::GetInstance() が最初に実行
された時に呼ばれるが、デストラクタは、プログラム終了の一部 (= Hoge の外側)
で呼ばれるため。
0367デフォルトの名無しさんNGNG
僕は>>360が嫌いです。

「Effective C++の」とか言ってるくせに、実書のページすら書いてないところが嫌いです。
「仕様としては」とか言ってちょっと知ったかを気取ってみたりするところも嫌いです。
「他のコンパイラではどうなるのか、教えてください」とか言って自分で試さないのも嫌いです。
そして何より、「VC6のバグなら」「.NETでは直っている」とか言ってバグと決めつけているのが大嫌いです。

だから、僕はこのレスをつけてみようと思いました。
0368デフォルトの名無しさんNGNG
>>366
答えを書いちゃうなよ。
この場合、>>363を見て本人に考えさせるべきだったんだ。
0369デフォルトの名無しさんNGNG
>>367
なんだ、なんだ。なんか嫌なことでもあったのか ?
0370デフォルトの名無しさんNGNG
>>366
この場合Hogeはstaticで定義されているから、GetInstanceを何度呼ぼうと
実体は一つしかないんだよね。
0371デフォルトの名無しさんNGNG
>>367
なんで >>360 が「バグと決めつけている」と決め付けているのか
小一時間...。さらしあげとこ。
0372デフォルトの名無しさんNGNG
>>370
そうだけど、今問題にしている箇所はそこではないよ。
0373366NGNG
>>370
細かい突っ込みで申し訳ないけど、意図してんのは obj のことだよね。
で、実体が一つしかないのは C と同じなんだけど、C++ はコンストラク
タと、デストラクタがあるからそのタイミングが問題と言うだよね。

個人的な意見としては、static で定義されているオブジェクトは、
main() 呼ぶ前に構築して、main() 終了後に破棄すると言う仕様の方が
わかりやすいと思う。もちろん、実際に使うオブジェクトだけ構築する
今の仕様の方が効率はいいと思うけど、ちょっとやりすぎな気がする。
0374デフォルトの名無しさんNGNG
標準化団体のメンバーになって提案してくれば〜?
0375366NGNG
>>374
はは、流石に今からやっても余計混乱するだけだし、まああんまり困って
るわけじゃないからねぇ...。たわごとと思って聞き流してくれろ。
0376360NGNG
>ページ
改訂2版のEffective C++ では、241ページ以降に書いてあります。
項目47、「非ローカルスタティックオブジェクトは、使用前に必ず
初期化されるようにしよう」です。

>C++の仕様
俺が調べたのはARMの記述です。これに関しては手元に本がないのでちと記憶が
曖昧ですが、「デストラクタもほかのメンバ関数と同様に、明示的に呼び出すことも、
アクセス制限を加えることもできる」ってな感じのことが書かれてました。
ARMは仕様書じゃないって? そのとおりですな。すみません。「仕様」は
言いすぎでした。回線切って首をつるほどじゃないけど、反省します。

>誰がHogeクラスのインスタンスを破棄するか考える
>破棄者はHogeのメンバであるか、お友達であるかよく考えてみる
>>366でも答えは書いてありますけど、Modern C++ Design(和書のほう)の
143ページにも答えは書いてあります。詳細な擬似コードまで示して。
でも、そのModern C++ Design の141ページで、コンストラクタも
デストラクタもprivateで宣言されて、シングルトンを実装されてるんです。
で、この記述に沿って実装しようとしてエラーが出たから、なんでじゃー、
と思ったわけです。

……最初からModern C++ Design のことを書いときゃよかったっすね。
0377デフォルトの名無しさんNGNG
>>376
>>366がおかしくないと言ったのは、あんたのコードがおかしくないじゃなくて、
エラーがおかしく無いという意味だろ。

Effective C++だとデストラクタはprivateで宣言されていない。

Modern C++ Designは持ってないから確認できないが、
そのSingletonはローカルstaticオブジェクトを返しているか?
newしてそのインスタンスを返してるんじゃないのか?

その場合は、破棄をしないか専用のdeleterを用意しているはず。
0378デフォルトの名無しさんNGNG
推測でしかないんだが、おそらく、
Hoge& Hoge::GetInstance()
{
 static Hoge* pHoge = NULL;
 if (pHoge == NULL) {
  lock();
  if (pHoge == NULL) {
   pHoge = new Hoge;
  }
  unlock();
 }
 return *Hoge;
}

こんな感じじゃないのか?
0379デフォルトの名無しさんNGNG
char *p,s[][256] = {"abc","bc","c","","abcde","**abc","\na bcl+","@ab","abc","cba"};
int i;
for(i = 1;i < 10;i++)
cout<<((p = strstr(s[i],s[0]))?p:'@')<<endl;


これ、どこかマズイでしょうか?
まずそうな個所を指摘してください。お願いしますね
0380デフォルトの名無しさんNGNG
Modern C++ Design見てみた。
単純なstatic objectだし、確かにデストラクタをprivateにしてるし、
しかも利用者に勝手に開放させないためと本文にわざわざ明記してるので
コードの誤植とも考えにくいな。
0381デフォルトの名無しさんNGNG
>>379
その質問は何のためにしているんだ?
エラーが出て解決できずに困っているのならそのエラーを書くこと。
動作が意図と違うのならどんな意図をしているのかを書くこと。
単にスタイルの問題を指摘ほしいのなら、そう書くこと。
宿題ならスレ違い。
0382デフォルトの名無しさんNGNG
vc++ 6.0 NG
bcc 5.5.1 NG
gcc 2.95.3-4 OK
digital mars 8.26n OK
0383デフォルトの名無しさんNGNG
'@'じゃないだろ。'@'じゃ。

10という決め打ちもいくない。
0384デフォルトの名無しさんNGNG
こいつにModern C++は早すぎるんじゃねえか?

VC++はあまりMOdernじゃないから、そのままやってもうまくいかない場合があるぞ。
0385379NGNG
あ、すんませんです。
本当は自作のstrstrがstrings名前空間に入ってるんで
そのテストとしてやってたんですが
三項演算子の偽部分が「'char' 型は 'char *' 型に変換できない」
ていわれるんです。
何故でしょうか?
0386デフォルトの名無しさんNGNG
charがchar*に変換できないから。

具体的には、3項演算子で (省略)p:'@'で、
pがchar*
'@'がchar
です。

"@"とかにしましょう
0387デフォルトの名無しさんNGNG
エラーメッセージのままだよ。'@' の型を知ってるかい ?
0388デフォルトの名無しさんNGNG
>>385
>>383ってことだな
三項演算子の真と偽は同じ型でなきゃいかんだけの話
0389379NGNG
三項演算子のオペランドって異なる型じゃだめだったのですか?
うーん知らなかった(._.;)
0390デフォルトの名無しさんNGNG
みなさんありがとうございました
本を読み返してみます(._.;)
0391デフォルトの名無しさんNGNG
何かに代入しなければコンパイルを通しちゃってもいいと思うが、決まりならしかたないよな。
0392デフォルトの名無しさんNGNG
>>391
つーか、代入しないなら if() 使えよ。

>>388
ウソ書くなよ。double = xxx ? double : int; とかでも大丈夫だよ。
あくまでも、代入先の型と合わないと言っているだけで、真と偽の型が違
うから怒っている訳じゃねーぞ。
0393360NGNG
>>377
あ、>>366の意味はわかってます。けど、俺の書き方がまずかったですね。
誤解を招くような書き方でした。

>>382
ありがとうございます! やっぱりコンパイラ次第では通るんですね。
ところで、これを全部ひとりで確認されたってことは
全部インストールされてるってことですよね……。
俺も複数のコンパイラをインストールして、今度からは自分で確認
するようにします。
0394デフォルトの名無しさんNGNG
>>393
いや、通っちまうのは変でしょ。そっちのほうがバグだと思うけど。
つか、Modern… の 6.3 と 6.4 は切り離して読んだほうがよい。
6.4 はあくまでも Meyers' Singleton に対するコメントでしょ。
6.3 (つまり筆者がやろうとしている方法) とは関係ない。
0395360NGNG
>>394
たしかにそう解釈もできますけど……。
けど、6.5のソース(145ページ)はどうします?
privateデストラクタと、Meyers' Singletonの両方を組み込んだ
ソースがばっちり載っちゃってるんですが。
0396360NGNG
>>394
たしかにそう解釈もできますけど……。
けど、6.5のソース(145ページ)はどうします?
privateデストラクタと、Meyers' Singletonの両方を組み込んだ
ソースがばっちり載っちゃってるんですが。

……というか、この問題に決着をつけるのは、『プログラミング言語C++』で
どう記述されているか、しかないと思います。
俺、持ってないんですよね。お金に余裕が出来たら買って読みますけど、
その前に、持ってる人おられましたら教えていただけませんか?
(なるべく、該当部分の記述をそのまま引用していただけたら嬉しいです)
0397360NGNG
うわちゃ、すみません。変な二重投稿になってしまいました。
0398デフォルトの名無しさんNGNG
>>396
買わなくてもwebに資料あるぞ
http://joda.cis.temple.edu/~ingargio/refman.pdf
0399デフォルトの名無しさんNGNG
>>392
if-elseを一行にすっきりとかけてなんかいい感じじゃん。
0400デフォルトの名無しさんNGNG
確率のシミュレーションをC++でやっているのですが、演算結果をExcel等で処理したいんです。
ところがDos窓だと25行しかでないので、データのコピーができません。
ここで、スクロールバーが出せれば上のほうにさかのぼってコピーできるのですが・・・

CSV形式でファイルに出力という方法も考えたんですが、こっちは難しそうなので・・・

キーワードだけでもいいのでご存知の方教えてください。
0401デフォルトの名無しさんNGNG
>>400
なんだかよくわからんが、>や>>をつかってファイルにリダイレクトする方法じゃだめなの?
0402デフォルトの名無しさんNGNG
>>400
一番簡単なのはリダイレクト
0403デフォルトの名無しさんNGNG
それでは、
ほげほげ(EXE名) >ほげほげ.csv[リターン]
と入力すればよろし
0404400NGNG
ちょっと初心者すぎてよく分からないです。

特に指定しない限り、出力はすべて画面に表示されます。
-o オプションを使うと、画面出力をページ単位で停止し、キー入力を待つことができます。
これはコマンド ラインを手入力する場合に便利です。
また、同じ -o オプションを使って、出力を無効化またはリダイレクトできます。

ってのがヘルプで出てきたんですが、どこにコマンドを入れるのかさっぱりです。
ちなみにC++と書きましたが、Visual C++ 6.0です。
0405デフォルトの名無しさんNGNG
>>404
開発環境は関係ない。
コマンドの最後に >file.txt と打てば、file.txtという名前のファイルに(標準出力が)出力される。
追加書き込みの場合は>>で。
0406405NGNG
試しにdir >flist.txtと打ってみな。
現在のディレクトリの中にflist.txtというファイルができて、dirの出力結果が書き出されているはずだから。
0407デフォルトの名無しさんNGNG
>>404
むきゃー!!
...みんなに内緒でおしえてあげる。
スタートメニューからDOSプロンプトを立ち上げて、
あなたのプロジェクトのDebugもしくはReleaseフォルダに移動します。
それであなたの
[プログラム名] > [出力ファイル名][ENTER]
だってばサ。
0408デフォルトの名無しさんNGNG
>>405
>file.txtという名前のファイルに(標準出力が)出力される
標準出力が端末画面からファイルに切り替えられて、
file.txtという名前のファイルに出力される
0409デフォルトの名無しさんNGNG
集団けこーん式場はここですか?
0410デフォルトの名無しさんNGNG
>>408
むきゃー!!
0411400NGNG
なるほど、できました。
ありがとうございます。

追加になりますが、スクロールバーを出す方法とかはないんですか?
0412デフォルトの名無しさんNGNG
Win2K使う。
0413デフォルトの名無しさんNGNG
>>411
consize + cmd-reactos を使え。
http://www.neuro.gatech.edu/users/cwilson/cygutils/consize/
http://www.neuro.gatech.edu/users/cwilson/cygutils/cmd-reactos/
0414デフォルトの名無しさんNGNG
lessを入れる
0415400NGNG
Win9x系だと面倒なんですね。
学校はWin2kだったから普通に出たのか。

この板ははじめて来たのですが、いい人がいっぱいいるようですね。
色々お世話になりました。
0416デフォルトの名無しさんNGNG
いいひとだってサ。気持ちがよいね。
0417デフォルトの名無しさんNGNG
(*´д`) てれるぜ
0418デフォルトの名無しさんNGNG
おだてれば何でも応えてくれるスレってここですか?
0419デフォルトの名無しさんNGNG
そうですよ。
0420デフォルトの名無しさんNGNG
>>418
違う。答えられればなんでも答えるスレ。
0421デフォルトの名無しさんNGNG
よし、今度はなんの質問だぁ〜?
0422デフォルトの名無しさんNGNG
VCでboostのtokenizerを使いたいんですけど、
TCHARベースでうまく動かす方法はないですか?

char_traitsがMBCS対応してないので今は自分で作っちゃってますけど、
なんか納得行かないんです。
0423デフォルトの名無しさんNGNG
正式対応していないようだが。
それよりboostをVCで使う意味がわからんのだが。
それなりのスキルを持ってるんだったら、
なっとくいく自作ライブラリを作ったほうがよいとおもうのだが。
0424デフォルトの名無しさんNGNG
>>423
> それなりのスキルを持ってるんだったら、
> なっとくいく自作ライブラリを作ったほうがよいとおもうのだが。
Boost 並のクオリティのライブラリを書くのは「それなり」のスキルでは厳しいと
思う。あるモノは素直に利用しようよ。(ライセンスも緩いことだし)
0425デフォルトの名無しさんNGNG
>>426-999
v(^・^)v
0426デフォルトの名無しさんNGNG
>>425
v(^・^)v
0427392NGNG
>>399
書きやすいかも知れんが、読みにくくなるからヤダ。
0428デフォルトの名無しさんNGNG
>>427
Lispに比べれば・・・比べちゃいかんのかもしんないけど。
0429デフォルトの名無しさんNGNG
>>428
LISP も、慣れれば特に読みにくくないぞ。まあ、括弧が多くてウザイから、
きちんとインデントしてないとつらいけどね。

でも、C/C++ でも
if(x == 0){ int y; y = x + 1; if(y == 0){ int z; x = y + 1; printf...
なんて書いてあったら、萎えるよ。要は、きちんとインデントして普通に書けって
ことだよ。
0430デフォルトの名無しさんNGNG
)))))))))))))))))))))))))) <- これ、ダサい(LISP)
0431デフォルトの名無しさんNGNG
>>430
}}}}}}}} <-これ、ダサい(C++)

いや、マジでいたんだよ、びびった。
0432デフォルトの名無しさんNGNG
>>431
見てみたいYO!
0433デフォルトの名無しさんNGNG
C++標準ライブラリ チュートリアル&リファレンスってのを読んでいるんですが、
4章に出てくる auto_ptr_ref ってどう役立っているのですか?
動きが(゚д゚)サパーリです。。。
0434デフォルトの名無しさんNGNG
例えば何ですが、

int a[][][]....[];

のような配列の次元数をダイナミックに扱う
方法ってあります?
0435デフォルトの名無しさんNGNG
int***....* a;
0436435NGNG
    (゚д゚)  カンチガイダッタ!
   ~(  )−
    / >
0437デフォルトの名無しさんNGNG
漏れは434じゃないけど、便乗。
二次元以上の配列の動的確保ってどうやんの?
0438デフォルトの名無しさんNGNG
二次元ができてそれ以上ができない理由はなんでしょう。
0439438NGNG
    (゚д゚)  二次元「以上」か・・・ゴミン。
   ~(  )−
    / >
0440デフォルトの名無しさんNGNG
ごめん
一次元以上
0441デフォルトの名無しさんNGNG
int (*p)[10] = new int[10][10];
こういうのとかではなく?
0442434NGNG
言葉が足りませんでした

int a[][];→int a[][][];

と実行時に、配列の次元数を変えたいのです
やっぱ無理かな?
0443デフォルトの名無しさんNGNG
そういうクラスを作ってあげるのがいいと思うYO!
0444デフォルトの名無しさんNGNG
>>437
このスレの >>175 ぐらいから嫁。
0445デフォルトの名無しさんNGNG
>>443
そうね。正道。

>>442
個人的には、operator[]に拘らなくていいなら
class Dims {
public:
int iSize;
vector<Dims *> Next;
Dims(int size) { iSize = size; Next.resize(iSize); }
};
で配列の実体確保は、Dims.iSizeの積で求めて、new int[]する
のようなのは思い付くけど、それじゃあだめなんだよね...
0446515NGNG
>>445
operator[] に拘るのはちょっと難しいかと...。次元が可変なんだから
コードの書きようがないと思う。

>>442
つーか、どういう使い方するんだ ? 単にできるかどうかが問題なの ?
0447デフォルトの名無しさんNGNG
可能かといえば可能だけど、クラスを作るしかないです。
そういう基本的な文法では対応してないです。

でもこういう場合、「設計直せ」の方がいいと思う。
0448初心者NGNG
初めまして。初心者なのですが分からないことがあるのですが、
教えてもらえますか?スピンコントロール2個を連動させるという
設定をしようと思っているのですが、どうもうまくいきません。
合計の最大値が決まっていて最大値から片方のスピンの値をマイナスした
値がもう一方のスピンの最大値になる、という形を作りたいんです。
今のところ下記のようなコードを書いたのですが、なぜかエラーが・・・
どこか間違っている所などあったら教えてください。
BOOL CDialog2::OnInitDialog()
{
CSpinButtonCtrl* pSB1 = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN1);
CSpinButtonCtrl* pSB2 = (CSpinButtonCtrl*) GetDlgItem(IDC_SPIN2);
pSB1->SetRange(0,40);
pSB2->SetRange(0,40);
return FALSE;
}

void CDialog2::OnKillfocusEdit1()
{
max1 = GetDlgItemInt(IDC_EDIT1,NULL,FALSE);
mm_max2 = 40-max1;
pSB2 -> SetRange(0,mm_max2);//ここで問題が起きてるみたい・・
}
void CDialog2::OnKillfocusEdit2()
{
max2 = GetDlgItemInt(IDC_EDIT2,NULL,FALSE);
mm_max1 = 40-max2;
pSB1 -> SetRange(0,mm_max1);
}
長くなってしまってすいません・・・よろしくお願いします。
0449デフォルトの名無しさんNGNG
すれ違い
0450デフォルトの名無しさんNGNG
>>449
なんですか、あなたは
答える気がないなら黙っていてください。
0451デフォルトの名無しさんNGNG
エージ
0452デフォルトの名無しさんNGNG
>>450
なんですか、あなたは
マナーを守れないなら黙っていてください。
0453初心者NGNG
すいません・・・書く場所間違えたのかな?ごめんなさい。
0454デフォルトの名無しさんNGNG
>>453
■ VisualC++(MFC限定)相談室 3■
http://pc.2ch.net/test/read.cgi/tech/1014057520/
0455初心者NGNG
おお!ありがとうございます。早速!!
皆さん失礼しました。
0456初心な人NGNG
関数が別のファイルに定義されていたらextern func();ですよね。
クラスが別のファイルに定義されているときはどう書くんでしょ
う?extern class aa;と書いたらおこられちゃった。
0457デフォルトの名無しさんNGNG
externて書かなきゃいい
0458デフォルトの名無しさんNGNG
http://www2.airnet.ne.jp/pak04955/ramble-199912.htm

>ポインタ変数の大きさはintの大きさと同じではない。現状sizeof(int) = 4, sizeof(void*) = 4の環境が多いが,64bit環境ではsizeof(int) = 4, sizeof(void*) = 8となる場合がある。
0459デフォルトの名無しさんNGNG
うぁっ、誤爆
0460デフォルトの名無しさんNGNG
Go back!!!
0461デフォルトの名無しさんNGNG
>>456
普通、クラスの定義はヘッダーファイルに書いて、使う側とインプリメン
トする側で同じヘッダーファイルを読み込む。

--- aa.h ---
class aa {
private:
...
public:
aa();
~aa();
};

-- aa.cpp --
#include "aa.h"
aa::aa()
{
...
}

aa::~aa()
{
...
}

-- file.cpp --
#include "aa.h"

void foo()
{
a aa;
...
}

と言う感じ。(ANSI-C なら、関数プロトタイプでも同じようにやると思う
けど...。)
0462初心な人NGNG
ありがとう>461
必ずヘッダーファイルを別にしておくのね。
0463デフォルトの名無しさんNGNG
ほのぼの
0464A子NGNG
ageてもいい?ねえageてもいいの?
0465デフォルトの名無しさんNGNG
C++なのかCなのか分からないけど、
関数のdefineの方法が本読んでもよく分からないんです。
誰かおせーてください。
0466デフォルトの名無しさんNGNG
C/C++のプリプロセッサのdefinedですか?
Perlにはdefineっていう関数だか演算子ががあったけど
0467デフォルトの名無しさんNGNG
>>465
define?
#defineのこと?
0468デフォルトの名無しさんNGNG
だとしたら関数も何も違いは無い気がする。
0469465NGNG
>>466,467
#defineのことです。
0470デフォルトの名無しさんNGNG
>>469
関数に#defineは使わないと思うけど…
何したいの?
0471デフォルトの名無しさんNGNG
引数付きのマクロと見た
0472デフォルトの名無しさんNGNG
>>465
漢ならdefineの代わりにinlineとconstをできるだけ使え。
0473デフォルトの名無しさんNGNG
templateも使用すると吉
0474465NGNG
間違えちゃった。
#defineじゃなくてtypedefでした。
スマソ
0475デフォルトの名無しさんNGNG
inlineはDebugとReleaseでは速度が10倍とか20倍とか違うんで困
る場合も結構あるんだよなぁ。普段はReleaseでビルドしてとめた
い時だけDebugってやってるけどちょっと面倒。
0476デフォルトの名無しさんNGNG
>>474
typedef 新しい型名 既存の型名

typedef UINT unsigned int;
これでUINTはunsigned intと同じものに。
0477デフォルトの名無しさんNGNG
>>476 関数の話らしい
0478デフォルトの名無しさんNGNG
typedef 戻り値 (*名前)(引数)
だっけ。
忘れた。
0479476NGNG
関数のtypedef?(-_-;)
関数へのポインタをtypedefするのだろうか・・・・
0480デフォルトの名無しさんNGNG
typedefはテンプレートに使えなくて困る場合も結構あるんだよなぁ。
template <typename T>
struct my_vector {
std::vector<T, my_allocator<T> > t;
};
とかやってるけど、やっぱ面倒だよ。
# と、愚痴ってみる。
0481デフォルトの名無しさんNGNG
>>476
逆だろ
typedef unsigned int Uint;
0482デフォルトの名無しさんNGNG
>>481
Oops!
そうだった・・
0483デフォルトの名無しさんNGNG
間違えるかそんなこと・・・。
# ちょっと482には仕事たのめないな。(藁
0484デフォルトの名無しさんNGNG
>>483
typedefなんて使わないし・・・
分かりにくくなるから。
typedef struct{}←これ嫌い。
0485デフォルトの名無しさんNGNG
>>465
単に関数の宣言書いて、前にtypedefつければよろし。
ポインタとして宣言するなら>>478。
0486デフォルトの名無しさんNGNG
>分かりにくくなるから。

そんなことは無いだろ。
分かりやすくする為にあるんだぞ。
0487デフォルトの名無しさんNGNG
>>486
型が増えると分かりにくくなる。漏れ馬鹿だから。
せめて構造体はtypedefしないでほしいな。
0488465NGNG
int KANSU( char* a ){
}

の場合、typedef int* BETSUMEI( char* a )ってこと?
0489デフォルトの名無しさんNGNG
>>488
お前もういっぺん478嫁
0490デフォルトの名無しさんNGNG
>>488
それだとint型へのポインターを返す関数になってしまう。
int (* BETSUMEI)(char *a)とやらないと。
0491デフォルトの名無しさんNGNG
慌てないーで お嫁サンバ〜
0492デフォルトの名無しさんNGNG
>>486
ライブラリ内で規約を設ければ解かり易くもなるが、
アプリ側ではタイプ数減らすために使うほうが多いだろうな。
0493デフォルトの名無しさんNGNG
スマートポインタなんかのテンプレートクラスはtypedef使わないとちょっとやってらんないな。
0494デフォルトの名無しさんNGNG
漏れは>>488のおかげで、
括弧を付ける理由が今わかった。
0495デフォルトの名無しさんNGNG
494にも仕事はやれん。(藁
0496デフォルトの名無しさんNGNG
>>495
演算子の優先順位表を頭に焼き付けてきました。
仕事ください。
0497494NGNG
>>495
>>496
漏れは無職だよ。
0498デフォルトの名無しさんNGNG
おまいら、仕事欲しいならJavaスレに行った方がよいぞ。
0499デフォルトの名無しさんNGNG
>>498
現在就職活動真っ最中でして・・・・
内定ください。
0500デフォルトの名無しさんNGNG
今日は朝6時ごろからずっと起きてるから
なんか神が降りてきた・・・・
0501デフォルトの名無しさんNGNG
500げとずざー

ん?失敗か。

何みてんだゴルァ!!

Borland C++ Builder 6をよろしくね☆
http://www.borland.co.jp/cppbuilder/
0502465NGNG
なんとなく分かったよーな気がします。490に感謝。
typedef int(_stdcall *KANSUMEI)(char* a);
↑こーゆーのはまだ意味わからんですが、
漏れがんばる。
0503デフォルトの名無しさんNGNG
   ||
   ||
   ||
   || スルスル
   ||
 ∧||∧
(  ⌒ ヽ 神です・・・・  
 ∪  ノ 
  ∪∪
0504476,490NGNG
>>502
感謝されても困るんだが。
typedefの構文を間違えるような奴だし(藁
0505500NGNG
カミガ オリテ
キタキタキタ━━(゚∀゚;)━━!!!


なんでも俺に聞け!!任せろ
0506デフォルトの名無しさんNGNG
>>505
お休み
0507デフォルトの名無しさんNGNG
505は仕事があるのに2chに逃避しているに500カノッサ。
0508465NGNG
>>504
漏れアセンブラしか分からんす。
高級言語はどーも苦手。
と言ってみたいという願望を書いてみるテスト。
0509デフォルトの名無しさんNGNG
>>508
むきゃー!!
く・や・し・いぃぃぃーーーっ!!!
0510デフォルトの名無しさんNGNG
おちつけ
0511デフォルトの名無しさんNGNG
classがウマー(´Д`)
OOがウマー(´Д`)
0512Ð ë á t h ¹³NGNG
   ||
 ∧||∧
(  ⌒ ヽ 500が消えたので 
 ∪  ノ  上へまいりま-す・・・
  ∪∪  

   ⌒
   ⌒
0513465NGNG
ムヒヒ。
0514デフォルトの名無しさんNGNG
例外処理のメリットっていまいちわからないんですが・・・。
誰かおしえてプリーズ!
0515デフォルトの名無しさんNGNG
>>514
何らかのエラーが生じた時、通常は戻り先でelse ifの連続ショーが始まったり、
エラー処理があちこちでバラバラに分散してしまうが、例外にすると、エラー
処理を一カ所にまとめられるので見やすい。バグが出にくい。等々
0516デフォルトの名無しさんNGNG
Cはやったことありますか?
Cのエラー処理と比べるとだいぶウマーな漢字になってます
0517465NGNG
>>514
教えてあげたいところですが、
例外処理の意味すら分かりません。
出直してきます。
0518デフォルトの名無しさんNGNG
>>514
何十にもネストしたループを脱出す時はgoto使うと便利でしょ?
同じように、関数呼び出しから一気に巻き戻すのに例外は便利なのだよ。
C言語では関数外にジャンプするときはsetjumpとlongjumpを使うが、こ
れではデストラクタが呼ばれないので例外って仕組みが必要なわけよ、オーケイ?
0519デフォルトの名無しさんNGNG
>>514
Cで言うと、longjmp、setjmpとよく似ている。これらをよく観察すれば、
例外の意味も少しわかると思います。
0520デフォルトの名無しさんNGNG
>>518-519
割り込みスマソ
longjmpに似ているということは、一度通った場所にしか戻れないの?
0521デフォルトの名無しさんNGNG
>>514
エラーの取り残しがないって事かな。
戻り値で判定する場合、ifでチェックし忘れたエラーコードは検出できないけど、try/catchなら、チェックしなかったエラーはより上位のcatchに飛ばされるから、必ずどこかでつかまるよね。
0522デフォルトの名無しさんNGNG
>>519
どちらかと言えば、longjmp,setjmpで例外の真似事ができるって方が近いかな。
例外は戻るのではなく、投げるものなのでcatchがあるところまで間をすっ飛ばし
ます。先月のインターフェースにCで実装する例外って記事があったよ、確かに、
longjmpとsetjmp使ってたはず。
0523522NGNG
>>519でなくて>>520ダタ
0524デフォルトの名無しさんNGNG
>>522
そそ。関数から関数を多重的に呼び出している時、returnで戻ろうとすると
プログラムが超複雑になりますよね。それを例外で一足飛びに戻る。
もしくは途中まで戻って、ある程度仕事をしてから、また再throwする、など。
0525514NGNG
様々なレスありがとうございます。

私の場合、プログラムの実行継続が難しいときに
例外を投げるという使い方をしようとしてました。
が、STLのbad_allocくらいしかcatchするものが無い・・・。
例外処理に払うコストが妥当とは思えないわけです。

何か、こういう例外の使い方がウマい!とかありませんでしょうか。
0526デフォルトの名無しさんNGNG
本でも読めYO!
0527デフォルトの名無しさんNGNG
複雑なファイル入力操作とか、いちいちエラーチェックして
ファイルクローズして返すのが面倒くさいから、入力処理と
入力ストリームのエラーチェックを同時に行う関数を用意して、
エラー発生時に例外を投げるようにしてます。
0528デフォルトの名無しさんNGNG
>>527
それって、?stream.exception(mask) じゃだめ?
0529デフォルトの名無しさんNGNG
>>527>>528
ぁ・・ホントですね、そのまんまの機能です。
知りませんでした。_φ(.._)
0530デフォルトの名無しさんNGNG
>>528
なにそれ?
0531デフォルトの名無しさんNGNG
domain_errorって何ですか?
例外型の他は概ね利用方法が思い浮かぶのですが、
domain_errorだけどうしても使い道がわからないのですが。
0532528NGNG
>>530
exceptions(iostate) で、ストリームがthrowする例外を選択する。

ifstream file(filename);
file.exceptions(failbit|batbit);

これ以降の操作で失敗したり、ストリームが壊れたりしたらfailure例外が投げられる。
上の例だけでもコンストラクタでオープン失敗してたときは、
exceptions()の呼び出しが例外投げる。
0533デフォルトの名無しさんNGNG
>>531
Thrown by the library, or by you, to report domain errors (domain in the mathmatical sense).

googleのトップにでてるじゃねぇか。
0534デフォルトの名無しさんNGNG
あー、数値計算で発生させる例外ですか。
ま、使用方法が思い浮かばないのは漏れの数学知識が
皆無だからでしょうね。
0535デフォルトの名無しさんNGNG
template<int NAME[]=0>class X{
public:
X(){
cout<<NAME[0]<<endl;
}
};
これって不可能?class自体はエラー出無いんだけど、実体とると
こけてしまう。
0536デフォルトの名無しさんNGNG
NAME が 0 ならこけるんでない?
0537デフォルトの名無しさんNGNG
>>536サンクス
template難しいわ。例えば、

template<char* n>class X{
public:
X(){
cout<<n<<endl;
}
};

void main(void)
{
X<"aswe"> x;
}
なんて言うか、これってできないの?それても俺の書き方がおかしい?
0538デフォルトの名無しさんNGNG
文字列リテラルは直にできません
外部リンケージを持ったchar[]を渡しましょうや
ていうか入門書にそんくらい書いてあるだろ。
0539デフォルトの名無しさんNGNG
>>537
規格書読めよ。

14.3.2 Template nontype arguments
2 [Note: A string literal (2.13.4) is not an acceptable template argument
because a string literal is an object with internal linkage. (後略)
0540デフォルトの名無しさんNGNG
>>538>>539
を、サンクス。いやぁ、templateに手を出したの最近だからさ
勝手が分からなくてね。もちっと修行してくるわ。
0541初心者にもなってないNGNG
プログラミングを勉強したいと思っているのですが
候補としては「C」か「C++」なのですが
どちらのほうがいいんですか?
できれば長所短所をおしえてもらいたいのですが。
0542デフォルトの名無しさんNGNG
CをやってからC++
それ以外に選択肢は無い。
0543デフォルトの名無しさんNGNG
1 プログラミングを勉強したい
2 作りたい物があって、そのためにプログラミングを勉強したい

1ならJavaかC#にしておけ。
SchemeとかMLでもいいが、勉強結果が後々使い回し出来ないと思った方がいい。

2ならC++を勧めておくが、出来るなら他言語を勧める。
0544デフォルトの名無しさんNGNG
>>543
で、Cは?
問題外?

私は「プログラミングを勉強したい」という理由ならCを薦めるね。
0545デフォルトの名無しさんNGNG
>>544
たしかにC勉強して身に付くこともあるが、
今から始める人にそんな低レベルな概念から身につける必要は無いと考える。
もちろん、分野によってはCは必須だが。
0546デフォルトの名無しさんNGNG
もっと低レベルなアセンブラから勉強するのが正解(w
0547デフォルトの名無しさんNGNG
アセンブラやらんでいいからコンピュータの基礎概論から勉強してくれよ。
それだけだとつまらんはずだから、プログラミングと平行で。

独学でプログラムだけやってもろくなもんでてこない。
0548デフォルトの名無しさんNGNG
(´-`).。oO(プログラミングの勉強にC… どこかで見たぞこいつ)
0549デフォルトの名無しさんNGNG
>>541
思い切ってC++にチャレンジしてみよう!
0550デフォルトの名無しさんNGNG
>>548
鏡見れば思い出すかも
0551デフォルトの名無しさんNGNG
>>542さんの通りやれ
王道を突き進め
0552544NGNG
>>545
低レベルかもしれないけど、言語仕様が小さいから勉強にはちょうど良いかなと。

>>548
多分人違い。
0553デフォルトの名無しさんNGNG
「プログラミングの勉強をしたい」っていう理由なら、Cはダメっていう意見も多いね、推薦図書スレあたりで。
計算機科学をまじめにやるならScheme+SICP
作って動かしてみて楽しいのがいいならHSPやJavaScript
作りたいものの規模が大きそうならJava
シューティングゲームとかならC/C++
って感じか。

いずれにしても、身近に詳しい人がいて、いつでも質問できるのが理想、ですかね。
0554デフォルトの名無しさんNGNG
文系か理系かでどっちからやったらいいかってちがうんでないかな。
文系ならオブジェクト指向はわかり易いものだろうが、理系は多態性
を追っかけにくいとかいうようだ。本人のバックグランドをキボーン。
0555デフォルトの名無しさんNGNG
俺は理系だがどちらかというとOOのほうが好み。
thisとかselfの概念があった方がやりやすい。
0556デフォルトの名無しさんNGNG
俺は理系だがOOの方が好み。
どちらかというとOO向け言語にある仕組みや仕掛けが好み。
0557デフォルトの名無しさんNGNG
俺は理系だがOOの方が好み。
Genericsマンセー
0558デフォルトの名無しさんNGNG
>>557
GenericsはOOちゃうやろ。
0559デフォルトの名無しさんNGNG
理系と言っても情報系・数学系とよりハード寄りなその他ではまた傾向が違うのかも。
0560デフォルトの名無しさんNGNG
動的型付けのOOPLは、まんまGenerics。
0561デフォルトの名無しさんNGNG
超初心者的な質問で申し訳ないのですが
(明示的)インライン関数やテンプレートを使うと

関数名 はすでに オブジェクトファイル名 で定義されています

と言われてしまいます。
いくつかの .obj に分けてコンパイルしているので、確かにそれぞれの .obj に重複定義されているのですが、こういうやり方はおかしいのでしょうか?
(別々にコンパイルしているので #ifndef --- は効きません)

普通はどうするものなのでしょう?
0562デフォルトの名無しさんNGNG
>>561
ヘッダに全部書いてそれぞれインクルード、の逃げ解決が普通かと。
0563デフォルトの名無しさんNGNG
// c.h
template <class T>
class C {
public:
void func();
};
// c.cpp
#include "C.h"
template <class T>
void C<T>::func()
{
return;
}
// main.cpp
#include "C.h"
int main()
{
C<int> c;
c.func();
return 0;
}

VC6.0でこれをコンパイルすると
「error LNK2001: 外部シンボル ***** は未解決です」
ってエラーが出るんですけど、よくわかりません。
いまは、c.cppの内容をc.hの下に書いていますが、
どうにか上のファイル構成で、コンパイルできるようにならないでしょうか?
お願いします。
0564デフォルトの名無しさんNGNG
>>563
2chでお願いしてもコンパイラの動作はかわらねぇな。
で、ファイル構成は変える気が無いと・・・。
c.hの最後にc.cppをインクルードでいけるか・・・。
それはそうと、外部シンボルの未解決がよくわからんってのはカナーリイタイね。
0565563NGNG
すみません、エラーメッセージは正確には
main.obj : error LNK2001: 外部シンボル ""public: void __thiscall C<int>::func(void)" (?func@?$C@H@@QAEXXZ)" は未解決です
です。説明が足りませんでした。
すみませんでした。
0566564NGNG
>>565
564のやつじゃだめってことか?
コンパイラとリンカ、それぞれの仕事を把握してから出直せ。
0567561NGNG
>>562
勘違いでした^^;
ヘッダに実装も書いていたのですが、そこにうっかり普通の関数を混ぜてしまっていたのが原因でした
(戻り値がテンプレート型だったため「ありゃ!テンプレートが重複してるってエラーだよ!!」と思ってしまったのです)
>>562さんのレスを読んで冷静になれたので気づきました。
ありがとうございました。
0568561NGNG
>>563
なんか私のと似たような質問だな…。と思いつつペイフォワードしてみよう。

何が起こってるかがわからないですか?
それはテンプレートが展開されないから、.obj に実装が含まれてないんだと思いますよ。
0569デフォルトの名無しさんNGNG
>>563
c.cpp の末尾に
template class C<int>;
を入れるよろし。
0570563NGNG
>>569
ありがとうございます。
あなたは神です。
0571デフォルトの名無しさんNGNG
ctypeの関数はマクロで書けるのにわざわざ関数にしてた・・
鬱だ死のう(-_- )
0572デフォルトの名無しさんNGNG
引数付のマニピュレータの作り方を誰か教えて
もらえないでしょうか?お願いします。
0573デフォルトの名無しさんNGNG
>>572
ios::のコード嫁。
ios::のマニュアル嫁。
読んだら作れ。

0574デフォルトの名無しさんNGNG
std::advanceって、どうやってBidirectionalIteratorとRandomAccessIteratorを識別してるんですか?
template<class X, class Y>で受け取っちゃってるので、さっぱり想像できません
0575デフォルトの名無しさんNGNG
>>574
例えば、今俺の手元にあるSGI版ならこんな風になっとる。
> template <class _InputIterator, class _Distance>
> inline void advance(_InputIterator& __i, _Distance __n) {
> __STL_REQUIRES(_InputIterator, _InputIterator);
> __advance(__i, __n, iterator_category(__i));
> }

第三引数がbidirectional_iterator_tagの __advance と
random_access_iterator_tag の __advance が多重定義されてるので
上手いこと処理が分かれる。
それ以上のことは iterator_traits とかなんとかその辺でも調べるべし。
0576デフォルトの名無しさんNGNG
>>574
タグディスパッチ
http://www.boost.org/more/generic_programming.html#tag_dispatching

(どこかに邦訳があった気がするが)
0577デフォルトの名無しさんNGNG
>>574
そこらへんの説明は、『Generic Programming ―STLによる汎用プログラミング―』
(アスキー)に詳しい。
0578デフォルトの名無しさんNGNG
 ☆★☆★☆ ※『プログラマー』板は5/3予選です!※ ☆★☆★☆

/ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
| ○真面目に投票したい人は
| 日頃からプログラマー板にお世話になっている方、
| みずほの一件でプログラマーを応援したい方々。
| 普通に<<プログラマー>>で投票をお願いします。
| 清き一票を!                 / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
\__   __________    | ●不真面目な人達は
     ∨  Cafe de Biz CUBE      | 期待されているからには何かをやらねば!
    ∧_∧           ∧_∧   | やはりここはマ板らしく、明らかに不正な
   ( ・∀・)          (´∀`;) < ダントツ1位(でも無効票)を狙いましょう。
   ( つ  )つ□   □ ⊂(    )  | 真面目に投票する人の迷惑にならないよう、
  ┃レ __   | ̄ ̄ ̄ ̄ |  .___ノ┃ | ネタ仕込みの方々は<<デスマーチ>>で投票。
  ┗━┳┳\ | ̄ ̄ ̄ ̄| ./━┳┳┛ | 汚れた一票を!
     ┃┃  |_____|    .┃┃   \____________

天災もとい転載歓迎。自由にコピペどうぞ。
0579デフォルトの名無しさんNGNG
VC++7には面白い構文が付け加わってるね
テンプレートでパラメータクラス内のメンバ探索のための __if_exist とか
親クラスの探索のための __super とか
処理系依存というのが嫌だけど・・・
0580デフォルトの名無しさんNGNG
ヽ(゚∀゚)ノ スーパー!
0581デフォルトの名無しさんNGNG
鯖あげ
0582デフォルトの名無しさんNGNG
ヽ(゚∀゚)ノ イフエジスト!
0583デフォルトの名無しさんNGNG
キタ━━( ゚∀゚     )━━!!!
アイディアモリ森!!!!
0584デフォルトの名無しさんNGNG
 |  |_∧ 
 |_|。▽゚) <イソライソアセソブラの出番だふぉるぁ〜アヒャッ
 |文|⊂)
 | ̄|∧|
 ̄ ̄ ̄ ̄
0585sageNGNG
もう大好き!!
チュゥしちゃおう(*^3)
0586デフォルトの名無しさんNGNG
>>575-576
ありがとうございました。
あんまり綺麗な解決方法じゃないなぁとか思ったけど。
しょうがないのかな
0587デフォルトの名無しさんNGNG
>>586
boost ML でつい最近こんな話が出てたヨ。
http://lists.boost.org/MailArchives/boost/msg29007.php
0588デフォルトの名無しさんNGNG
class PLUS{
public:int plus(int a,int b){return a+b;}
};
と書いて、

int c=PLUS().plus(12,12);

と書かなきゃいけないんだけど、

int c=PLUS(12,12);

と書きたい場合はどうすればいい?typedef,defienなしで。
コンストラクタにしたらreturn出来ないし・・・・・・
0589デフォルトの名無しさんNGNG
>>588
operator()を使えば
PLUS()(12,12)とは書けそうな気がする。
0590微妙・・・NGNG
class PLUS{
int buf1,buf2;
public:
int plus(){return 0;}
PLUS(int i,int n):buf1(i),buf2(n){}
operator int(){return buf1+buf2;}
};
0591デフォルトの名無しさんNGNG
っつーか、それをわざわざクラスにしようって思う理由は何よ。
0592デフォルトの名無しさんNGNG
PLUS<12, 12>()
0593デフォルトの名無しさんNGNG
関数オブジェクトの練習?
0594588NGNG
>>590
感謝感激雨あられ〜〜〜〜♪ありがとぉ
0595590NGNG
>>594
あんた>>591さんの話を聞きなさい名
普通はこげなことやらんでしょうに
0596588NGNG
>595
すみません
593さんの言うように「関数オブジェクト」というものの話を聴いて
作ってみたくなりまして。関数のように使うクラスであるからには
PLUS().plus(....)では醜いかな、と。
0597デフォルトの名無しさんNGNG
関数オブジェクトだったら>>589だろ。
0598デフォルトの名無しさんNGNG
関数オブジェクトは違うがな
int operator()(int i,int n){return i + n;}
てなやつを
Type obj;
int j = obj(12,12);
てなやつよん?
0599588NGNG
違うの?
「関数オブジェクト」と言うからにはクラスを関数みたいに使えるように
するものだろうと、勝手に推測したんですが。
0600デフォルトの名無しさんNGNG
>>599
それじゃ「関数オブジェクト」じゃなくて「関数クラス」になっちまう。
0601588NGNG
>>599
・・・・・・うわ、考えてたのと全然違う。
0602588NGNG
↑>>598の間違い
0603デフォルトの名無しさんNGNG
関数オブジェクトはdelegateのショボイバージョン
0604デフォルトの名無しさんNGNG
http://www.serbestyazilim.org.tr/eski/res/image002.jpg


stroustrup
禿てるけど(・∀・)カコイイ!!
ジェームスゴスリングより
(・∀・)カコイイ!!
0605デフォルトの名無しさんNGNG
関数オブジェクトなんて、テンプレートと
併用してナンボだとおもうが。
0606デフォルトの名無しさんNGNG
関数オブジェクトの利点て何?
普通の関数より便利?
0607デフォルトの名無しさんNGNG
関数オブジェクトはインスタンスごとに状態をもてるから、
一種のクロージャとして利用することが出来る。
0608デフォルトの名無しさんNGNG
>>607
ぐ・・・・具体例を・・・おねがい
0609デフォルトの名無しさんNGNG
入れ子クラスの利点をきぼーそ。
0610デフォルトの名無しさんNGNG
>>606
templateと合わせると、関数ポインタよりはinline展開が効きやすいかもしれない。
0611初心な人NGNG
coutって書式が不便だと思うけどどう?
iostream.hにあるform()を使えとか書いてあるけど、g++した
らエラーだったし。
0612デフォルトの名無しさんNGNG
>>604
いや、かっこよく写るように下から写している。
正面から写っているのはしょぼいぞ
0613デフォルトの名無しさんNGNG
>>604
http://www.research.att.com/~bs/homepage.html
0614デフォルトの名無しさんNGNG
今 boost のスマートポインタについて調べてるところなんですが、誰か教えて下さい。
weak_ptrのところに

> When the object last shared_ptr to the object goes away and the object
> is deleted, all weak_ptr objects have their stored pointers set to 0.

という英文があるんですけど、When 以下が良く分かりません。どういう時に
ポインタを0にすると言ってるんでしょう?last がどこにかかるのか分かって
いないだけだと思うので、英語の問題だからスレ違いと言えばスレ違いかもし
れませんが、たぶん使ってる方がいらっしゃるだろうと思うのでここで質問さ
せて下さい。
0615デフォルトの名無しさんNGNG
shared_ptrの参照カウントが0になってオブジェクトが破棄されたら、
それを参照しているすべてのweak_ptrが0にセットされるってことだろ
0616614NGNG
>>615殿
はい、たぶんそんなような感じなんだろうなというのは分かるのですが、last
の意味がイマイチ掴めないんですよね・・・
とりあえずオブジェクトが破棄されたらゼロっつーのは分かるのですが・・・
0617デフォルトの名無しさんNGNG
lastがわからないって何だよ。
一番最後にオブジェクトを参照していたshared_ptrが破棄さて(=参照カウントが0になって)
オブジェクトが破棄されたら〜 ってそのままじゃねーか。
0618614NGNG
あぁなるほど、
When the object pointed by last shared_ptr goes away.....
って事ですか。ありがとうございます。
last が動詞なのかと思ってワケワカになっとりました。

スレ汚しスマソ。
0619デフォルトの名無しさんNGNG
中学英語じゃねーか
0620デフォルトの名無しさんNGNG
>>619
ツボにはまると、理解できなくなることはある。大目に見といてやれよ。
0621デフォルトの名無しさんNGNG
PlatformSDKの文体とboostのドキュメントの文体とSGI STLのドキュメントの文体でも
色々異なるしな。

書き癖がつかめるまでは他のを読んでる場合でも?なことがある。

英語に達者な人はうらやましいねえ。
0622デフォルトの名無しさんNGNG
漏れは中学生 それでも理解できたから中学英語と言ったんだゴルァ
0623デフォルトの名無しさんNGNG
中学英語すらまともに押さえていないPGだって世の中には山ほど..
洋もののエロ小説とかpenthouseとかはすらすら読めるのになあ。
0624デフォルトの名無しさんNGNG
>>622
褒めて欲しい? それなら技術系の板よりも、馴れ合い系の板に行くことを
薦めるが。
0625デフォルトの名無しさんNGNG
エロ小説は読みやすね、知ってる単語がばっかりだし(w
あと、大統領候補者の演説が、以外にわかりやすい。
0626デフォルトの名無しさんNGNG
> 大統領候補者の演説が、以外にわかりやすい

教育をロクに受けてない連中にも理解できるようにしてるのよ
0627JFKNGNG
We chose to go to the moon.
We chose to go to the moon in this decade and do the other things,
not because they are easy, but because they are hard.
0628デフォルトの名無しさんNGNG
「英文として正確な意味」を理解しようとしなければ、技術系の英文も比較的わかりやすいぞ。
基本的には知ってる単語ばかりだし、推測ができるし。
0629デフォルトの名無しさんNGNG
Windows関連のコードだけどAPIとか関係なさそうなので
こちらに書かせて頂こうと思います。

メモリ上にあるビットマップのピクセルへのポインタを取得し、
インクリメントで1つ1つのピクセルを調べていくプログラムを
書いていたのですが、
for (y = 0; y < height; y++) {
  for (x = 0; x < width; x++) {
    if (*pBits = 0x00FFFFFF) {  // 色を調べる
    // 中略
    }
    pBits++;              // ポインタをインクリメント
  }
}
↑これはうまくいったのですが、
例えば任意の座標を調べたいときはどうすればよいのでしょうか?
*(pBits + x + y * width)だと実行時にエラーが出ました。
C++のポインタの基本のようなことだと思うのですが
よろしければ教えてください。
0630デフォルトの名無しさんNGNG
>>629
ほんとにそのコードがうまくいったのか小一時間問い詰めたい。
1pxは何バイト?
0631デフォルトの名無しさんNGNG
// 色を調べる?
0632デフォルトの名無しさんNGNG
>>631
そこには突っ込んでやるな
0633デフォルトの名無しさんNGNG
>>629
もちろんビットマップはトップダウンだよね。
0634デフォルトの名無しさんNGNG
じつはパレットを持ったビットマップだったりして。
0635629NGNG
ループについては上手くいきました。
ポインタは
COLORREF *pBits;
なのですが(COLORREFはWindowsの型で、=ダブルワードのようです)、
インクリメントでちゃんと次のピクセルを指してくれているようです
(つまり予想通りの結果になりました)。

また、ビットマップはボトムアップで、32bit(パレット無し)です。
(ループの部分ではxとyはループのカウントにしか使ってないです)

インクリメントで型サイズ分ポインタが進むのなら、と思ったのですが
普通の加算でダメだった理由がわかりません・・・
初心者なものでいまいち上手く説明できないですが
よろしくお願いします
0636デフォルトの名無しさんNGNG
COLORREFはパレットの構造体だが・・・
Bitsに定まった型はない。
0637デフォルトの名無しさんNGNG
じつはビットマップが24bitだったり
0638629NGNG
すみません、原因がわかりました。
どうやら画像のサイズをはみでていたようです。
レスありがとうございました。

回線切ってマウスのコードで首吊(以下略
0639デフォルトの名無しさんNGNG
>if (*pBits = 0x00FFFFFF) {  // 色を調べる
代入してることには突っ込まなくてよかったのか?
0640デフォルトの名無しさんNGNG
【´Д`;】
0641デフォルトの名無しさんNGNG
回線切ったからいいんじゃない(藁
0642デフォルトの名無しさんNGNG
>>639
>>631みれ
0643デフォルトの名無しさんNGNG
右側にレジスタ置いてもいいようにしたほうが使えるかな?
どうおもう?
0644643NGNG
あうっ
誤爆しました、スマソ
0645デフォルトの名無しさんNGNG
zukeiと云うクラスがあって、
zukei circle[1000];
zukei square[1000];
としたとき、マルの色、四角の色をそれぞれ、いっぺんに
赤、青にするのはどうしたらいいんでしょう?
for(int i=1;i<1000;i++){circle[i].color=red;}
なんていちいちやるしかないんですか?
circlecolorなんてグローバル変数を使って
他の部分にも影響出してしまうのもイヤです。
0646デフォルトの名無しさんNGNG
>>645
いちいち、って for (int i = 0; i < LIMIT; i++){ ... } がベストだと思うが。
むしろ、なんでグローバル変数なんて言葉がここで出てくる?
colorってのはzukeiクラスのメンバで、それを変更したいんだろだろ?
0647デフォルトの名無しさんNGNG
static int flag;
zukei(){if(flag++ < 1000)color = redの値; else color = blueの値;}

イクナイ?ヤッパリ....
0648デフォルトの名無しさんNGNG
flag とは、つまり旗です。
0649デフォルトの名無しさんNGNG
>>646
グローバル変数定義しといて、color の値が必要な時にそれを参照するっ
てことだろ。>>645 は、何のためにクラス使うか良く考えた方がいいと思
うよ。

>>647
なにしたいかサパーリわからんけど、とにかく flag++ なんて言う気持ち
悪い変数名のつけ方やめろ。
0650647NGNG
( ´Д⊂ヽうえーん気持ち悪いって言われたよ〜
0651デフォルトの名無しさんNGNG
flag++はキモいだろ、やっぱ。
0652名無し NGNG
>colorってのはzukeiクラスのメンバで、それを変更したいんだろだろ?
zukeiクラスのメンバーじゃなくっても、グローバル変数ならクラスの中
から参照できるでしょ。他に影響がでない、部分的なグローバル変数って
ないんですか?
0653647NGNG
countの方がヨカタかな・・・
0654デフォルトの名無しさんNGNG
こんなんか
class sukei {
static color;
};
0655デフォルトの名無しさんNGNG
http://sakura2.room.ne.jp/~boogie/cgi-bin/img-box/img20020504213921.jpg

おおもりよしはる=ロリペドオタ、アニオタ、モツオタ、ベトオタ、ブルオタ、セガ信者
ひまわりと幼女のすじまんこに異様な執着心を燃やしているロリペド絵描き
2浪して九州大学歯学科に進むがプロのイラストレーターになるために大学を中退、
同人活動とUOに専念する日々を送るが、その生活は苦しいらしい(藁
自らを画家と呼び、ともすれば不真面目なものと見られかねないアニメ絵
それも、無毛のすじまんこすらも「芸術」の域にまで高めようとしている(らしい)。

現在、伝言板でチョンが暴走中!

■幼すじは至高の芸術!おおもりよしはる■
http://yasai.2ch.net/test/read.cgi/doujin/1020515485/

前スレ おおもりよしはるキタ━━(゚∀゚)━━━ !!!!
http://yasai.2ch.net/test/read.cgi/doujin/1018642526/
関連スレ
【すじ】 ようじょのすじ  【すじ】
http://www2.bbspink.com/test/read.cgi/erog/1017041827/
【抱き枕】すじ丸出し抱き枕ってどうよ?
http://mentai.2ch.net/test/read.cgi/otaku/1016198191/
■■■ロリ絵?おおもりよしはる■■■
http://www2.bbspink.com/test/read.cgi/erodoujin/1016297545/
アニメ絵が芸術?デムパロリコン男おおもりよしはる
http://yasai.2ch.net/test/read.cgi/net/1018005845/
コピペだけで会話するスレ@DTM板
http://pc.2ch.net/test/read.cgi/dtm/1012032352/
48: 柳さんトコの抱き枕カバーとかって・・・2枚買
http://comic.2ch.net/test/read.cgi/sakura/1019402459/
0656デフォルトの名無しさんNGNG
>>653
2016倍ほどそっちのほうがいい。
0657647NGNG
>>645のやりことを勘違いしてたので逝って来ます・・・・(-_-)
0658デフォルトの名無しさんNGNG
zukei::zukei( int c ) : color( c ) { /*...*/ }
std::vector<zukei> circle(1000, zukei(red)), square(1000, zukei(blue));

・・・これじゃだめかのぅ? >>645
0659デフォルトの名無しさんNGNG
std::fillで十分じゃろ。
0660デフォルトの名無しさんNGNG
std::fill使っても659より簡単にはならぬと思うが。
0661デフォルトの名無しさんNGNG
C++がOOPLじゃない点ってどんなところ?
0662デフォルトの名無しさんNGNG
>for(int i=1;i<1000;i++){circle[i].color=red;}
circle[0]は初期化しちゃいけないの?
0663デフォルトの名無しさんNGNG
main()がオブジェクトでもなんでもないところ。
0664デフォルトの名無しさんNGNG
Ruby >>>>>>>>>>>>>>>>>>>>>>>>>>> C++
Rubyigainogenngohakuso !
あああRuby!tytytytytytyty
0665デフォルトの名無しさんNGNG
GW 終わるまでの我慢だな...。>>664
0666デフォルトの名無しさんNGNG
Riubuy!!!!
0667デフォルトの名無しさんNGNG
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ(プ
0668デフォルトの名無しさんNGNG
>>664 >>666-667

・・・・・・

( ΦωΦ)σ)´Д`)
0669668NGNG
えんvwjkqえjkqうぇj
kqうぇjkqうぇjkqうぇjkqうぇjkqうぇjkq
うぇjkqうぇjkqうぇjkqうぇjkqうぇjkqうぇjk
qうぇjkqわrsfうぇfgtfgtfgtfgtfgtfgt
fgたえrw4あえrw4あえrw4あえrw4あえrw4あえrw
4あえrw4あえrw4ごーq23t5;、lq34¥mgvdfz
bv
dsv
v
dsvdslkhjう゛ぃお
Ruby!
0670デフォルトの名無しさんNGNG
宇宙人も使ってる Ruby!!!
0671デフォルトの名無しさんNGNG
ウチュー人しか使ってないRuby!!!
0672デフォルトの名無しさんNGNG
子供「ママーあの>>670なに〜?」
ママ「しっ、見ちゃいけません!キチガイになっちゃうわ」
0673645NGNG
645の質問。答は、static memberにしておけば、
クラス共通だからいっぺんに変えられるってことだね。
まともな返事ないから、自分で答えみつけちゃった。
2chのやつらって、たよりないなあ。こんな初心者の
質問にもまともに答えられねえなんて。

>zukeiと云うクラスがあって、
> zukei circle[1000];
> zukei square[1000];
> としたとき、マルの色、四角の色をそれぞれ、いっぺんに
> 赤、青にするのはどうしたらいいんでしょう?
> for(int i=1;i<1000;i++){circle[i].color=red;}
> なんていちいちやるしかないんですか?
> circlecolorなんてグローバル変数を使って
> 他の部分にも影響出してしまうのもイヤです。
0674デフォルトの名無しさんNGNG
>>673
>>654
0675デフォルトの名無しさんNGNG
が、しかし、circleとsquareをそれぞれいっぺんに変えることは出来ないという罠。
たよりない呼ばわりしてるくせに自分の質問の意味もわからんのか?
いちいち全部変えるか、それぞれに色IDでも持たしてIDと色のテーブル用意しれ。
0676デフォルトの名無しさんNGNG
bakahahottoku
0677デフォルトの名無しさんNGNG
C++にCで言う所のfreopenに相当するものがあるか教えて下さい。
お願いします。
0678デフォルトの名無しさんNGNG
>>677
std::freopen()
0679デフォルトの名無しさんNGNG
>>678
ありがとうございます。でも、ちょっと違う嗜好なのです。
たとえば、fstreamのオブジェクトをcinやcoutと結びつけたいのです。
tieやrdbufを使ってみましたがうまくいきません。
0680デフォルトの名無しさんNGNG
fstreamをそのままcin/coutの替わりに使えばいいんでないの?
0681デフォルトの名無しさんNGNG
>>680
そうなんですが、状況に応じて切り分けたいのです。
fileがopenできた時はそのまま使い、openに失敗した時はcinに結びつけて、
そのままプログラムを走らせて行きたいのです。
0682デフォルトの名無しさんNGNG
>>681
こんな感じかえ?

void foo(istream& in)
{
  なんらかの処理
}
int main()
{
  ifstream f("ファイル名");
  if(f.fail()){
    foo(cin);
  }else{
    foo(f);
  }
  return 0;
}

0683デフォルトの名無しさんNGNG
>>682
ありがとうございます。fstreamはiostreamから派生しているので、単純に
istreamで受ければいいのですね。
てっきり、cinをfstreamにダウンキャストするしかないと思いこんでいまし
た。dynamic_castを行っても失敗するし、やっぱりだめでした。
これでプログラム書いてみます。
0684デフォルトの名無しさんNGNG
よほどのことがない限りキャストはやめたほーがいーよ。
0685名無しNGNG
c++ってなじめないんだよな。出力書式なんかも不便そうだし。
printf("%-10s %6.2f %-04.5d,sarray,y,x);
なんてCの出力をC++ではどうするんだろcoutを使って。
0686デフォルトの名無しさんNGNG
>>685
std::printf() を使う。

いや、もちろん I/O stream と組み合わせて書式指定する方法もあるんだけど、
何かと面倒なので俺は std::sprintf() 愛用してるよ。
0687デフォルトの名無しさんNGNG
>>685
#include <cstdio>
してprintf使います。つーか、マニュピレータ調べてください。
0688687NGNG
やってもーた... マニピュレータ...
シュミレーション...
0689デフォルトの名無しさんNGNG
>>685
確かめてないからわからんけどこんな感じじゃないの?
cout << setw(10) << sarray << setw(0) << ' ' << setw(6) << setprecision(2) << y << setw(0) << ' ' << setw(5) << setfill('0') << x;
0690デフォルトの名無しさんNGNG
>>689
さすがオブジェクト指向型言語

sarrayとyとx用にそれぞれoperator <<を定義するのが正道だな。
その中でstd::sprintfを使おうが何だろうが別にかまわないんでないの?
0691デフォルトの名無しさんNGNG
s/さすがオブジェクト指向型言語 /さすがオブジェクト指向型言語のふりして手続き型プログラミング/
0692デフォルトの名無しさんNGNG
>>689
吐き出すバイナリの効率はたぶんいいんだろうけど、記述の手間としては
泣きたくなるようなコードやねぇ。
>>685の記述をしたら>>689相当のコードを吐いてくれるような
機能ってのを、どうにかならんもんかしら。テンプレートの拡張とかで。
0693デフォルトの名無しさんNGNG
>>692
> 吐き出すバイナリの効率はたぶんいいんだろうけど
いや、ぜんぜん。
0694デフォルトの名無しさんNGNG
>>692
stdio.hとiostreamの簡単なベンチマークテストをやってみたら、泣きたくなるほど
iostreamは遅いよ。
0695デフォルトの名無しさんNGNG
処理系よって程度がちがうけどね。
VCとかのおまけiostreamは最悪かも。
そうでなくても、iostreamは遅いだろうけど。
0696デフォルトの名無しさんNGNG
printf 使うなら ios::sync_with_stdio(); を忘れずに。
0697デフォルトの名無しさんNGNG
>>696
それ初めて見た.. 俺もまだまだやね。

MSDN見る限りだと性能に影響が出るようだけど、そんなもんかね?
0698696NGNG
>>697
これしとかないとエラー終了することがあります。
しゃれにならんっス。
0699デフォルトの名無しさんNGNG
cin/couは10行プログラムぐらいでしかつかわないから気づかなかった。
0700デフォルトの名無しさんNGNG
>>698
std::sync_with_stdio()はデフォルトでtrueじゃないのか?
0701696NGNG
>>700
実際にエラー終了したことがあるんですよ。
ちなみに Cygwin の g++ で。
0702デフォルトの名無しさんNGNG
ARMにはそんなもんのってやがらないんだけど、
それって標準ライブラリに含まれてるの?
0703デフォルトの名無しさんNGNG
>>701
怖いっすねえ。まだまだ標準C++には準拠してない点があるという事か。
0704デフォルトの名無しさんNGNG
>>702
ARMの時代にはなかったのではないでしょうか。
私も今ストリームバッファについての説明を「C++標準ライブラリ
チュートリアル&リファレンスを読んで解読している所です。
0705デフォルトの名無しさんNGNG
そういう仕様があるといっても
ちゃんと準拠してるかどうか疑わなくてはいけない
C++ のやるせなさよ。
0706デフォルトの名無しさんNGNG
一昔前のg++って使い物にならなかったよね。
ごく簡単なまともなコードなのにコンパイルが通らない。
ちなみにv 2.7.2
0707デフォルトの名無しさんNGNG
g++はv 3.x.xが安定したら使うかねー。
それまでは別ので何とかしる。
0708デフォルトの名無しさんNGNG
namespace周りでしょ?
その辺だとtemplateはVCよりもマシだったと思うし。
0709デフォルトの名無しさんNGNG
やっぱりUNIX系ではCを使うべきだよ。
0710デフォルトの名無しさんNGNG
UNIX or GNU系はあらゆる言語が使えてホスィ。
なんかそんな感じがする。
0711デフォルトの名無しさんNGNG
C++の言語仕様の大きさから、コンパイラメーカーの負担がぐっと
増えたんだろうなあ。その結果としてバグがたくさん埋もれている。
ようやく標準に準拠できた頃に、C+=2 なんて言語ができてきたりして。
0712デフォルトの名無しさんNGNG
C#では不足ナリか?
0713デフォルトの名無しさんNGNG
>>711
> C+=2

ワラタ
C#がそのつもりらしいけど、全然違うな。
0714デフォルトの名無しさんNGNG
テンプレートが未だにちょビット変なVC6だけど、我慢してつかっとります。
細かいver.upでバグの増えるg++/libg++はこわくてつかえません。
0715アマグラマ1号 ◆r6Wx8cCc NGNG
VC6はnewが失敗しても例外を返さないのがなんともかんとも。
STLは例外返すことを前提として組まれてるから
メモリが一杯になると不正アクセスになる罠。
_set_new_handler で例外返すようにしてるけど、
みんなどうしてます?
0716デフォルトの名無しさんNGNG
>>715
コテハン?
この板では珍しいね。
0717shigeNGNG
haxa?
0718デフォルトの名無しさんNGNG
>>717
出てこなくていいよ。お前もKusakabeもロ○鉄も
0719アマグラマ1号 ◆r6Wx8cCc NGNG
健全なコテハンを目指します。
アマですがどうぞよろしく。
0720sageNGNG
>>715
ワシも_set_new_handlerつかってる。
0721デフォルトの名無しさんNGNG
>>719
できればCスレでも回答してホスィ
0722アマグラマ1号 ◆r6Wx8cCc NGNG
>>720
やっぱみんな使ってるんですね。
ファイルを追加するだけでいいようにはしてるんですが、
ホントにみんなこんなことやってるのか
ちょっと不安だったんで。

>>721
分かる範囲で回答スマス。
0723デフォルトの名無しさんNGNG
enum DATA{A=10,B=20,C=30};
template<DATA data>class AAA{};

ダメ??
0724723 NGNG
ごめん。漏れの頭が腐ってたわ。少し逝ってくるよ。
0725デフォルトの名無しさんNGNG
>>715
VC.NET(SDK版)もbad_alloc投げないよ。
標準C++ライブラリが付属してないからだと思うけど。
0726アマグラマ1号 ◆lo1UDXY2 NGNG
>>725
.NET でもまだ対応してないの!?
と思って VS.NET Academic で試したところ、大丈夫でした。
nothrow にもちゃんと対応していて、Good! です。
0727デフォルトの名無しさんNGNG
あげとくか。
3時だし
0728デフォルトの名無しさんNGNG
>>726
いや、だから。
.NET Framework SDK版のVC++は標準Cライブラリしか付属してないんで、
標準C++ライブラリに所属する std::bad_alloc が含まれていない。
従って、newはNULLを返す仕様であると言うこと。
0729アマグラマ1号 ◆r6Wx8cCc NGNG
>>728
.NET がそもそも bad_alloc を返さないという
万が一の可能性を考えてチェックしただけです。
やっぱ流石になかったようですね。
0730デフォルトの名無しさんNGNG
CとC+とC++は、初めてやるならどれから勉強したほうがいいでしょうか?
0731デフォルトの名無しさんNGNG
730
ねたですか?
0732デフォルトの名無しさんNGNG
C+++++++++++++++++++++++++++++++++++++++++++++++>>>>>C++
0733デフォルトの名無しさんNGNG
>>728
> VC++は標準Cライブラリしか付属してないんで、

・・・・・嘘だろ・・・?
じゃあprintfとかstrcmpとかしか使えないのか?
0734デフォルトの名無しさんNGNG
今の時代はCよりDだな。
0735デフォルトの名無しさんNGNG
>>733
疑うなら試せよ。

assert.h conio.h ctype.h direct.h dos.h eh.h errno.h excpt.h fcntl.h
float.h fpieee.h gcroot.h headers io.h limits.h locale.h malloc.h math.h
mbctype.h mbstring.h memory.h minmax.h new.h process.h search.h setjmp.h
setjmpex.h share.h signal.h stdarg.h stddef.h stdexcpt.h stdio.h stdlib.h
string.h tchar.h time.h typeinfo.h useoldio.h varargs.h vcclr.h wchar.h xmath.h

sys/locking.h sys/stat.h sys/timeb.h sys/types.h sys/utime.h

付属しているヘッダ。
C++として使うためにどうしても必要なnew.hおよび、例外系のベースヘッダは
ついてるけど、それだけ。
0736デフォルトの名無しさんNGNG
>>735
sys/*.hが標準Cライブラリかよ!
0737736NGNG
dos.hもconio.hもあるじゃない(ワラ
0738デフォルトの名無しさんNGNG
ActiveX(COM)からクライアントDDEを呼ぶを作っています。
DdeConnectでDMLERR_NO_CONV_ESTABLISHEDエラー
でクライアントとの対話に失敗してしまいます。
COMからの呼び出しですと、何かDDEへのアクセス権
が欠けるのでしょうか?
ご存じの方いらっしゃいましたらお願いします。
0739デフォルトの名無しさんNGNG
C++初心者ですけど設計理念についてお聞きしたいです。
クラスって’機能’に注目して、変数や、その変数を扱う関数を単にまとめただけっていうのはありですか?
いわゆる汎用性のある、組込型の様な新たな’型’を設計するのでなければ上記のようなクラス設計ってかなり需要がありそうなんですが。
たとえばコンソールクラスは、テキストバッファやアトリビュートバッファ、それらを処理する関数を単にまとめただけ。
オブジェクトは一つで十分なのでコピーも代入演算子も書かない。そういうのってよくありますか?
0740デフォルトの名無しさんNGNG
よくある。

そもそも クラス=型 としているC++が少し特殊なだけ
0741デフォルトの名無しさんNGNG
C++初心者がいきなりクラス設計をするとは・・・
デザパタに当てはめて設計するのがいいかと。
0742デフォルトの名無しさんNGNG
よくある勘違い。

そもそも 型≒バイト数と勘違いしてるやつが多いだけ
0743デフォルトの名無しさんNGNG
>>742
ハァ?
0744デフォルトの名無しさんNGNG
>>743
ハァ? ?
0745sNGNG
>そもそも クラス=型 としているC++が少し特殊なだけ
けっこう勉強したつもりなんだけど未だにクラスと型の区別がつかぬ。
どゆいみ?
0746デフォルトの名無しさんNGNG
>740-744
そうですか。実践の場では良くあるって事でよろしいでしょうか?
どうもありがとうございました。
0747デフォルトの名無しさんNGNG
>>745
C#の struct と class の違いを考えてみな。
要は値型か参照型かと言うことなんだけど。
0748デフォルトの名無しさんNGNG
目に見える(ソースに書いた)物はもちろん型だけど、
それ自体がインスタンスを表すかどうか、と言うことだね。
0749デフォルトの名無しさんNGNG
>>739
つーか結局、クラスの設計をするって事は、新しい型の定義をするってことだ。

>>745
ってことで、クラスは型の一例。
0750sNGNG
>747
ホンマに?(それなら余裕で分かるんだけど・)

>748
つまりstaticメンバのみのクラス(class/struct)や、
namespaceは型ではないということ?

(namespaceはもちろん型じゃないけど)
0751デフォルトの名無しさんNGNG
あ、クラス!=型 じゃなくて、
インスタンス != 型 だね。
0752 NGNG
???
0753sNGNG
再度引用:
>そもそも クラス=型 としているC++が少し特殊なだけ
んじゃ、クラス=型としていない言語とは?

Smalltalkとかはクラスオブジェクトがあるけど、そういうのを言うのかな・・?
0754デフォルトの名無しさんNGNG
>>750
メンバの無いstructだって、型だよ。
intだってvoidだって型だろ。
0755デフォルトの名無しさんNGNG
俺も>740がわからん・・・
0756デフォルトの名無しさんNGNG
>>739
定番の注意事項なんかを述べておくと、要らなくてもコピーコンストラクタと代入演算子は書いてください。中身要らんので。書いとくだけ。ただし呼べないようにprivateで。
でないとコンパイラが勝手にpublicでコピーコンストラクタと代入演算子を生成しやがります。
0757_NGNG
#include<stdio.h>

void main(void)
{
int a;


a = 10;
}

↑を実行すると「aの値は10です」と
出力するように変更すれって言う
問題が出たんだけど分かる人います?
誰か教えて下さい m(__)m
0758デフォルトの名無しさんNGNG
>>757
printf("aの値は%dです\n", a);
というか激しくスレ違い。
0759デフォルトの名無しさんNGNG
わかる人はいっぱいいるでしょう。
ただし、「aの値は10です」と出力するには、OSと処理系を書いたほうがいいでしょう。
それから問題はもっと厳密に。じゃないと、
#include<stdio.h>
void main(void)
{
 int a;
 a = 10;
 printf("aの値は10です") ;
}
という答が返ってきます。
0760デフォルトの名無しさんNGNG
//#include<stdio.h>
#include <iostream>
void main(void)
{
int a;


a = 10;
std::cout << "aの値は" << a << "です" << std::endl;
}
0761759NGNG
空振り・・・
0762デフォルトの名無しさんNGNG
宿題は別スレいけ
0763デフォルトの名無しさんNGNG
#include<stdio.h>

int main(void)
{
puts("aの値は10です");
return 0;
}
0764デフォルトの名無しさんNGNG
お前ら全然ダメ。
全角で数字出すんだぞ。わかッてんのか?
0765_NGNG
結局の所763が答えなのでしょうか?

>>762
どこのスレに行けば良いの?
0766デフォルトの名無しさんNGNG
>>765
http://pc.2ch.net/test/read.cgi/tech/1011722640/
でももうすぐ1000だからお早めに。
0767デフォルトの名無しさんNGNG
どこのスレいっても全角英数使うやつはダメ。

http://pc.2ch.net/test/read.cgi/tech/1011722640/
0768デフォルトの名無しさんNGNG
・・・・
デバーグほどめんどくさい事は無い

誰かが言った言葉さ(;´ー`)
あーめんどい・・・・
0769デフォルトの名無しさんNGNG
>>763 以外は
void main につっこんでないな。
0770デフォルトの名無しさんNGNG
|  | ∧
|_|Д゚)
|文|⊂)
| ̄|∧| ネタハダメヨ・・・
0771デフォルトの名無しさんNGNG
疲れたぽ・・・・
一人デスマーチ状態ぽ・・・
0772デフォルトの名無しさんNGNG
テーブル持てば?
0773デフォルトの名無しさんNGNG
>> 768

CppUnit 使うべし。
0774デフォルトの名無しさんNGNG
>>773
知ったかハケーン
Unit Testはすでに完成(半完成)しているプロジェクトへの導入は困難です
最初から考慮して書かないとダメ
0775デフォルトの名無しさんNGNG
protected:に物申す。
メンバにアクセスできる相手を、クラス側から指定できるfriendと、
アクセスしてくる側が勝手に接続してくる継承が何で同じ扱いなんだ?
0776デフォルトの名無しさんNGNG
>>774
ってことはモデリングの段階でだめってことじゃん。
オブジェクト同士の結合度が密になっていなければ導入できるはずぽ。
0777sageNGNG
誰かつっこんでやれよ >>775

0778デフォルトの名無しさんNGNG
アンドリューさんのAccelerated C++ を読んだばかりの初心者なのですが、
私がコンパイラの実装等にあまり明るくないためか、8章で出てくる
typename の必然性がいまいち良く分かりません。その必要性を教えていた
だけないでしょうか? また typedef 以外で使う用途ってどんな場合があ
るのでしょうか?
0779デフォルトの名無しさんNGNG
>>775 dempa jusinn tyuu?
0780デフォルトの名無しさんNGNG
newとdeleteの多重定義を行ってメモリ管理を自前で行いたいと思っています。
自前で定義したnew演算子は呼び出せるのですが、
自前で定義したdelete演算子を呼び出す方法がわかりません。
どなたか正しい方法をご存知の方はいらっしゃらないでしょうか。
使用しているコンパイラはVC6です。




void *operator new( size_t size, my_allocator& alloc )
{
return alloc.allocate( size );
}

void operator delete( void* pointer, my_allocator& alloc )
{
alloc.deallocate( pointer );
}

class X;

void f( my_allocator& alloc )
{
X* array = new( alloc ) X(); // 自前で定義したnew演算子を呼び出す。

// delete( alloc ) X; // エラーが出る。この方法は間違いらしい。
// delete X; // 標準のdelete演算子が呼び出されてしまうのでダメ。
}
0781デフォルトの名無しさんNGNG
globalのnewを上書くと、いろいろ面倒で、
classに対して定義しないとドツボだった記憶が。
0782デフォルトの名無しさんNGNG
>>780
deallocateはsizeを指定しないとエラーになりませんか?
それから、my_allocateはallocator<X>から継承したものですか?
0783デフォルトの名無しさんNGNG
>>782
今のところ、その部分ではエラーは発生していませんが、
deallocate()は第二引数としてサイズを指定しなけりゃいかんみたいですね。
直しておきます。ご指摘ありがとうございました。

size_type とか pointer とかの定義が面倒なので、
今のところ my_allocator を std::allocator を継承していますが、
そのうち独立させたいなあ、などと夢想しています。
0784デフォルトの名無しさんNGNG
>>783
了解です。多分、delete array;で、自前のdeleteが呼び出されていると
思います。グローバルのdeleteを呼び出すときは ::delete array;となる
でしょうね。全体がわからないのでこちらでコンパイルできないのです
が、もし骨格部分でもうpしてくだされば、こちらで確認してみます。
0785デフォルトの名無しさんNGNG
>>784
デバッガで追ってみたところ、 delete X とすると、自前のものではなくて
システム標準の operator delete() が呼び出されているようでした。
また、::delete X としても動作は変わりませんでした。

いくつかのC++の解説書を調べてみたところ(赤本第三版とかEffective C++とか)、
独自定義の operator new() の使用例は書いてありましたが、
operator delete() を独自に定義した場合は、システム標準と同じ引数で
例示されているものしか見あたりませんでした。

msdnオンラインのページには似たような例が載っていましたが、
operator delete()は再定義はしてあるものの、使用例が書いてないので涙。
http://www.microsoft.com/JAPAN/developer/library/vccore/vcrefcompilerwarning%28level1%29c4291.htm

骨格を切り離すのはちょっと難航中。
0786デフォルトの名無しさんNGNG
>>785
784です。すみません、ちょっとガセを書いてしまったと思います。
newは柔軟性がありますが、deleteは引数を一つしか取れないので
ちょっと面倒ですね。コンテナのdeleteはどのようにして実現している
のかを知らないと書けませんでした。すみません、力不足でした。
0787デフォルトの名無しさんNGNG
やっぱり
class foo : public myallocatio<foo>
{...};
みたいな、ModernC++な方法で……
0788デフォルトの名無しさんNGNG
>>778
p141 のことかな? 確かにここの説明では必要性がよく分からないかも
しれんなあ。次のようなテンプレートを考えてみてくれ。
template<class T> class Foo {
public:
 typename T::size_type foo( const T& x );
};
メンバ関数 foo() は、T::size_type という型の戻値を返すんだが、
コンパイラが最初にこのコードを読んだときは、まだ T に実際の型が
与えられていない。それでもコンパイラは、上のコードを構文解析だけは
しなくちゃならない。というわけで、プログラマがコンパイラに対して
「T::size_type は何らかの型である」ということを教えてやる必要が
あるわけだ。
Accelerated では、typename vector<T>::size_type となっているが、
これだと、コンパイラは既に #include <vector> を通っているはずで、
vector<T>::size_type が何かの型だということをコンパイラは知って
いてもよいはずなんだよね。だから必要性がよく分からないんだと思う。
実際、VC++ なんかだと、typename が無くてもコンパイルが通ったり
するし。
0789778NGNG
>>788
すっごく分かりやすいです。完璧理解。
ありがとうございました。
0790デフォルトの名無しさんNGNG
>>785
オーバーロードされた operator delete を使って delete pObj はできない。
オーバーロードされたものは、対応する operator new で確保した
オブジェクトのコンストラクタが例外をスローした時に呼び出されるようにコンパイラが使用する。
0791デフォルトの名無しさんNGNG
>>780
そもそも operator delete をオーバーロードしたところで、new 演算子
と違い、delete 演算子には引数を付加することができないので、それを
呼ぶことは不可能。
つまり、void operator delete( void* pointer, my_allocator& alloc )
とかを定義しても、delete p; で、この operator delete が呼ばれる
ことはありえないということ。

781 も書いているように、やるなら、大域的な new/delete ではなく、
クラス内で new/delete を上書きするべし。
class X {
private:
my_allocator *pAlloc;
public:
void *operator new( size_t size, my_allocator& alloc )
{
pAlloc = &alloc;
return alloc.allocate( size );
}

void operator delete( void* pointer, size_t size )
{
pAlloc->deallocate( pointer );
}
}; // class X

void f( my_allocator& alloc )
{
X* array = new( alloc ) X(); // 自前で定義したoperator newを呼び出す。

delete X; // 自前で定義したoperator deleteを呼び出す。
}
こんなんでどう?
0792791NGNG
あ、すげーチョンボ。
operator new の時点じゃ、まだオブジェクトが構築されてないじゃんか。
書き直し。

class X {
private:
static my_allocator *pAlloc;
public:
void *operator new( size_t size, my_allocator& alloc )
{
if (pAlloc != NULL) pAlloc = &alloc;
return alloc.allocate( size );
}
……
}; // class X

my_allocator *X::pAlloc = NULL;

これでもいまいちだけど、やりたいことは分かるよね。
0793791NGNG
たびたびすまん。今、C++の仕様書を読み返したら、
void operator delete( void* pointer, size_t size );
というシグニチャを持った operator delete は存在しないようだ。
void operator delete( void* pointer );
を使ってね。
あと、>>790 の言ってるのは、
void operator delete( void* pointer, void * );
のことだね。
0794デフォルトの名無しさんNGNG
g++でC++の勉強してるんだけど,日本語のライブラリマニュアルきぼんぬ.

書籍でも可.探したんだけど全然ない・・・
0795デフォルトの名無しさんNGNG
辞典ならあるけど
http://shopping.yahoo.co.jp/shop?d=jb&;id=30693818
0796デフォルトの名無しさんNGNG
こんなんどう?
ttp://www-scc.jst.go.jp/riyou/users/users_guide/ucoma/FJcompiler/C++/index.html
0797_NGNG
>防衛関連の試験装置又は解析用ソフトの開発。Windows上でC言語で開発。

いきなりこんな事会社で言われてしまいましたが、これからC言語を学んで
いくとして、どのくらいでお金がもらえるレベルになりますか・・・?

一応Win、エクセル&アクセスでのVBAとVBEの基礎くらいならわかります。
あと、アクセスでSQLも少しならわかるくらいです。
0798デフォルトの名無しさんNGNG
すれ違い
0799794NGNG
>>795-796サンクスコ.とくに>>796(・∀・)イイ!
0800デフォルトの名無しさんNGNG
>>793 これならうまくいったぞ。

class X;

class my_allocator : public allocator<X> {
};

class X {
private:
static my_allocator *pAlloc;
public:
void *operator new(size_t size, my_allocator &alloc) {
if (pAlloc != NULL) pAlloc = &alloc;
return alloc.allocate( size );
}
void operator delete(void *pointer, size_t size) {
pAlloc->deallocate(static_cast<X *>(pointer), size);
}
};

my_allocator *X::pAlloc = 0;

void f(my_allocator &alloc)
{
X *array1 = new(alloc) X();

delete array1;
}
}
0801デフォルトの名無しさんNGNG
800ですが、793さんの言われるとおり、
void operator delete(void *pointer, size_t size);という形式はないのですが、
なぜかコンパイルできてしまいます。
コンパイラはBorland-C++5.6です。今からgcc3.0で試してみます。
0802デフォルトの名無しさんNGNG
801です。gcc3.0でも通ってしまいました。うむむ。どなたか解説キボンヌ。
0803デフォルトの名無しさんNGNG
>>790
あー、なんとなくわかりました。

定義されているどの operator new() で確保しても、
例外発生した場合以外は、必ず operator delete( void* ) が呼び出される。

余計な引数を付け加えた operator delete() は、
あくまで例外発生時に呼び出すのが主目的であって、
ユーザーが任意に呼び出すことは出来ない、と。

わりと納得。
0804デフォルトの名無しさんNGNG
802です。Borland-C++5.6でもgcc3.0でも、deallocateの第2パラメータは
ダミーで無視されていますね。Borland-C++は::delete()、gcc3.0ではfree
を呼び出していました。
0805デフォルトの名無しさんNGNG
>>804
Effective C++ の 10項で、void operator delete(void *p, size_t size);
の形が使われてるね。そこの説明読むと、この形の operator delete も
必要だと思えるなぁ。
0806デフォルトの名無しさんNGNG
>>805
どうしてもsize_tを持ったdeleteが必要な時がありますね。もっともこれは
オーバーロードだから、実際の解放には::operator deleteかdeallocateを
使うしかないわけですが。
0807デフォルトの名無しさんNGNG
>>793
void operator delete(void *p, std::size_t size); はC++標準ではOKなはずだぞ。
今規格が手元に無いので自分では確かめてないのだが、
Exceptional C++によれば「3.7.3.3/2を参照されたい」とのこと。
0808デフォルトの名無しさんNGNG
質問なのですけど
昔から#include <iostream.h>みたいに書いていたから
今もstd使わないでこういう書き方しているんですけども、
この書き方って何か問題あるんですか?
ANSI規格で、stdを使うように推奨していることは知っていますが、
using namespace std;とか
std::cout << とか書くのが面倒くさいんですけど。
0809デフォルトの名無しさんNGNG
>>808
別に。using namespace std;書いた時点で、iostreamもiostream.hと同じ意味に
なっちゃうよ。例えば自前のcinを作りたかったら、それを my というnamespace
ででも包めばバッティングしない。
0810790NGNG
↓ここみるとだいぶわかる
http://www.google.co.jp/search?hl=ja&q=+site%3Awww.microsoft.com+%22Robert+Schmidt%22+new+delete&lr=lang_ja
0811デフォルトの名無しさんNGNG
cin,coutのcはcharacterのc?C++のC?
0812デフォルトの名無しさんNGNG
console
0813デフォルトの名無しさんNGNG
>>812
なんだ・・・
0814デフォルトの名無しさんNGNG
>>813
なんだとはなんだ
0815デフォルトの名無しさんNGNG
>>814
なんだとはなんだとはなんだ
0816デフォルトの名無しさんNGNG
>>815
なんだとはなんだとはなんだとはなんだ
0817デフォルトの名無しさんNGNG
for (int i=0;i<4;++i){
  cout << "なんだとは";
}
cout << "なんだ" << endl;
0818デフォルトの名無しさんNGNG
cout << "JAVA の授業さぼっちゃった" << endl;
0819デフォルトの名無しさんNGNG
>>817
ワロタ
0820デフォルトの名無しさんNGNG
>>807,>>810
おかげでかなり理解が深まったよ。ちょっとまとめてみる。長文すまん。

● placement-new に相当するような placement-delete 構文はない。
delete p; によって呼び出されるのは、次のどちらか一方。
void operator delete( void * );
void operator delete( void *, size_t );
前者が存在すれば、前者が呼び出される。
後者の size_t にどのような値が渡されるかは分からなかったが、
g++ で実験してみたところ、delete 演算子のオペランドとなったポインタを
dereference した型の sizeof になるようだ。

●placement-new 構文によるコンストラクト中に例外が発生した場合、
使用された operator new に対応するシグニチャを持つ operator delete が
暗黙裡に呼び出される。
例:
void *operator new( size_t, T1, T2, T3 ); に対しては、
void operator delete( void *, T1, T2, T3 ); が呼び出される。
このような operator delete を宣言しないとコンパイラが警告を出すことも
ある。

●placement な operator delete を明示的に呼び出してオブジェクトを
デストラクトしたい場合は、デストラクタを明示的に呼び出す必要がある。
例:
class X {};

class Foo {
public:
~Foo();
void *operator new( size_t, X& );
void operator delete( void *, X& );
};

X x;
Foo *p = new(x) Foo;
p->~Foo(); // デストラクタの明示的な呼び出し
Foo::operator delete( p, x ); // placement delete の明示的な呼び出し
0821デフォルトの名無しさんNGNG
ねえーこれって無理なん?
コンパイラに怒られるんだけど・・。

error C2259: 'CTest' : 抽象クラスあるいは構造体のオブジェクトが宣言されています。

class CTest
{
TestM()
{
CTest* pTest = new CTest;
};
};
0822デフォルトの名無しさんNGNG
>>821
コンパイラが怒るんなら、無理なんでしょう。書き方を変えてみる。
class CTest
{
  TestM();
};
CTest::TestM()
{
  CTest* pTest = new CTest;
}
0823821NGNG
勘違いですた、すまそん
0824 ◆Sd0g4XYw NGNG
BorlandのC++BuilderとかMicrosoftのC++とかはどう違うんですか?
MicrosoftC++しか使ったことないのでさぱ〜りです。
違いを教えてください。
0825デフォルトの名無しさんNGNG
>>824
MS C/C++ってまだ出てるの?
0826デフォルトの名無しさんNGNG
>>825
Microsoft C++ Compiler 13.0
http://www.microsoft.com/japan/msdn/visualc/
0827デフォルトの名無しさんNGNG
>>826
その名前・・・正確なんですか?マジで。
0828デフォルトの名無しさんNGNG
>>827
コマンドラインから cl とやると
Microsoft (R) 32-bit C/C++ Optimizing Compiler Version XX.XX.XXXX for 80x86
Copyright(C) Microsoft Corp XXXX-XXXX. All rights reserved.
と表示されるよ。
0829デフォルトの名無しさんNGNG
MS-Cの頃からの通番だからな
0830デフォルトの名無しさんNGNG
>>828
勉強になりました。
0831デフォルトの名無しさんNGNG
> Deletion of a pointer to an incomplete type is an unsafe programming
> practice because there is no way for the compiler to verify that the
> destructor is indeed trivial.

って書いてあるんですが、具体的にこれはどういうコードが unsafe なんでしょう?
そもそも "incomplete type" 「不完全な型」ってどういう意味なのかが分からない
んですが、どなたか教えて頂けませんでしょうか。

# やっぱり僕には boost はまだ早いですかねぇ・・・
0832デフォルトの名無しさんNGNG
>>831
incomplete type っつーのは、たとえば

struct foo;
foo* p;

みたいに、実際の定義を与えていない宣言だけの型かと。
0833831NGNG
>>832
なるほど!たしかにそーゆー型に sizeof を適用したら
"incomplete type" ってエラーメッセージが出ました。(g++ 3.0.4)
それなら話は分かります。ありがとうございました m(_ _)m
0834デフォルトの名無しさんNGNG
std::iterator_traits<int*>::value_type val;
VC6ですが、なぜこれでコンパイルエラーが出やがりますか?
0835デフォルトの名無しさんNGNG
const int
と
int const
って何か違うの?
C++ って const の意味が増えたと聞いたんだけど・・・
0836デフォルトの名無しさんNGNG
a)const int i
b)int const i
c)const int *p
d)int const *p
e)int* const p

a=b
c=d!=e
0837デフォルトの名無しさんNGNG
int const のほうが幸せ。
0838デフォルトの名無しさんNGNG
1) const int *p
2) int *const p
3) const int const *p
4) const int const *const p

訳分からんわ・・・・
0839デフォルトの名無しさんNGNG
int const * const p なら幸せ。
0840835NGNG
>>836
thx!
a==b
c==d
である事が分かればそれでいいんだ。
テストコード書いて見た限りじゃ一緒っぽかったんだけど、
一応不安だったんで聞いてみたっす。
# さすがにc != e は分かっとるよ。
0841デフォルトの名無しさんNGNG
>>838
3と4の先頭のconstは不要
0842デフォルトの名無しさんNGNG
>>839>>841
産休。何となくわかってきました。今実験中です。
0843831NGNG
えーと、皆さんにとって有用性があるかどうかはカナーリ怪しいのですが、
お世話になったお礼というわけでもないんですけど、boost に関する指摘な
メモでも書いてみました。

http://www4.tkcity.net/~toshiki/boost/index.html

まだ勉強始めたばっかりなんで、内容薄いんですけど、今後も暇があれば勉強
した事を加筆していくつもりです。ですが、なにぶん若輩者故間違ったところ
等あると思うんで、そーゆーのは指摘して頂けるとありがたいです・・・
0844デフォルトの名無しさんNGNG
前から831は大物になると踏んでたんだよね。
0845デフォルトの名無しさんNGNG
>>843
なんていうか、目次頁がEUCで中身がSJISとかいう、文字コードごちゃまぜはやめてくれる・・・? IEが混乱するのよ・・・それか各頁で文字コードを指定しておくとか
0846845NGNG
ごめ。全部EUCやね。IEがおかしかっただけでした。
0847デフォルトの名無しさんNGNG
まあでも SJIS または EUC で書くときは charset を指定して欲しいよね。
ブラウザによる自動判別にも限界があるし。
0848847NGNG
最初に文句がきちゃったみたいですまんけど、boost を読むとっかかりに
させてもらいます。
0849831NGNG
とりあえず content-type 指定しといたっす。
スマソ,スマソ。

ところで ref の使い方が分かんないんですがどなたか教えて頂けませんでしょうか。
僕の理解によると、

struct Aho : binary_function<int&, int, void>
{
void operator() (int& a, int b) const {cerr << a << " " << b <<endl;;}
};
struct Baka : binary_function<int, int, void>
{
void operator() (int a, int b) const {cerr << a << " " << b <<endl;;}
};

int main()
{
int i=30;
typedef boost::binder1st<Aho> funca;
typedef boost::binder1st<Baka> funcb;
Aho a;
Baka b;
funca fa = boost::bind1st(a, i);
funcb fb = boost::bind1st(b, boost::ref(i));
fa(0);
fb(0);
i = 20;
fa(0);
fb(0);
}

これで
30 0
30 0
20 0
20 0
と表示されるんじゃないかと思ったんですが、
30 0
30 0
20 0
30 0
ってなるんですよね。(g++ 3.0.4)
参照渡しのパラメータを持つ関数オブジェクト(Aho)でも ref 無しでも fb が
作れちゃうみたいですし、ref の効用がイマイチ分かりません。
どなたか教えて頂けませんでしょうか。
あ、Aho とか Baka っつーのは hoge とか foo みたいなもんなんで、あまりお気に
なさらずに・・・

0850デフォルトの名無しさんNGNG
>>843
next(),prior()のところ、template <class T>じゃないの?
0851841NGNG
>>850 ご指摘の通りでした。直しておきました。ただオリジナルのドキュメントのコピペなんすよ、アレ。
オリジナルが間違ってるんですよねぇ。でも英語書けないから報告は出来ないや。

ちなみに作りかけの ref を間違ってウプしとりました。見なかった事にして下さい。
0852831NGNG
>>851 は841じゃなくって831の間違いです。スマソ。 # boost::any 見てたらちょっと感動した。
# でもこれあんま使えないような・・・。
0853デフォルトの名無しさんNGNG
template<int N>struct STA{
static N;
};
void main(void)
{
int a[10]={STA<12>::N};
}
test.obj : error LNK2001: 外部シンボル ""public: static int STA<12>::N" (?N@?$STA@$0M@@@2HA)" は未解決です

・・・・・・・・・・・・・分からない、ナンデ??
0854デフォルトの名無しさんNGNG
template<int I>
struct STA {
 static int N;
};

template<int I>
static int STA::N = I;
0855デフォルトの名無しさんNGNG
>>854
サンクス♪
0856デフォルトの名無しさんNGNG
キタ━━(゚∀゚)━━ァ!
と思ったら終わってた・・・打つ
0857831NGNG
>>856
もしかしてウチの事でしょうか・・・なんか今tkcityの名前が引けないっぽい
んですよね。DNSが死んだっぽくって。まぁその内アクセス出来るようになると
思うんで・・・
# スレ汚しスマソ
0858デフォルトの名無しさんNGNG
あるクラスのメンバ変数の名前を
つけかえたいんですが、そんなことは可能でしょうか?
0859デフォルトの名無しさんNGNG
言いたいことはよくわからないけれど、
define、参照、置換、プロパティのどれかでできるとおもう
0860デフォルトの名無しさんNGNG
std::mapでもにたことができるかも
0861858NGNG
>>859
ありがとうございます。
参照で出来ました!
0862デフォルトの名無しさんNGNG
あの有名なVNCのソースを見ていて疑問がわきました。

class _OMNITHREAD_NTDLL_ omni_mutex_lock {
omni_mutex& mutex;
public:
omni_mutex_lock(omni_mutex& m) : mutex(m) { mutex.lock(); }
~omni_mutex_lock(void) { mutex.unlock(); }
private:
// dummy copy constructor and operator= to prevent copying
omni_mutex_lock(const omni_mutex_lock&);
omni_mutex_lock& operator=(const omni_mutex_lock&);
};
上記クラスのコンストラクタで引数omni_mutex&mを受け取りomni_mutexのコンストラクタに渡しています
ここでomni_mutexのコンストラクタに引数omni_mutex&を受け取る物はありません。
const omni_mutex&を受け取る物ならありますがこれはコピーコンストラクタのダミー定義だけです
omni_mutex_lock(omni_mutex& m) : mutex(m) { mutex.lock(); }のmutex(m)はエラーにならないのですか?
0863デフォルトの名無しさんNGNG
>>862
2行目をよく見てみそ
0864862NGNG
参照だとどうなるのですか?
0865デフォルトの名無しさんNGNG
教えてくんか。
これ以降はFAQだ
0866862NGNG
参照だとコンストラクタを呼ぶ必要は無いですが(と思う)
この場合mutex(m)はどう働くのですか?
教えて君で申し訳ないのですがよろしくどうぞ。
0867デフォルトの名無しさんNGNG
参照の初期化!=オブジェクトの初期化
0868デフォルトの名無しさんNGNG
int i = 10; // 普通の変数の初期化
int&j = i; // これは何でしょうね?
0869862NGNG
要するにポインタでかくと
omni_mutex *mutex;
mutex = &m;
みたいな事ですよね。
でも : mutex(m)ってのはコンストラクタを呼ぶ物じゃないんですか?
0870デフォルトの名無しさんNGNG
>>869
呼ばない
0871862NGNG
本来:mutex(m)みたいな記述はmutex=mの意味なんですか?
operator=が禁止されているのでこんな風にやるとか?
0872デフォルトの名無しさんNGNG
>>871
どうぞ
http://pc.2ch.net/test/read.cgi/tech/1018454705/865
0873デフォルトの名無しさんNGNG
int i( 10 ); // 普通の変数の初期化
int&j( i ); // これは何でしょうね?
0874デフォルトの名無しさんNGNG
>>873
あ、そっか。
初期化の=はコンストラクタ呼ぶんだ。
0875862NGNG
int i(10);なんて初期化の方法があったんですね。。知りませんでした。

参照の場合も要はポインタだから組込型と同じようにコンパイラは初期化の方法を知ってて
クラスの場合はコピーコンストラクタとかを呼ぶんですね?
0876831NGNG
なんか tkcity 氏んだままなので、移転しました。
http://members13.tsukaeru.net/toshi/
間違っとる所とか、指摘して頂けると幸いです。
# boost 関係のページは実はダミーなんですけどね(藁
0877デフォルトの名無しさんNGNG
>>875
だから呼ばんちゅうに。あんたもガンコな人だね。
0878デフォルトの名無しさんNGNG
>>877
参照=ポインタならC++には参照はいらないな。
0879デフォルトの名無しさんNGNG
>>862
omni_mutex& mx0( m );
omni_mutex mx1( m );

これら二つがまったく異なることは気がつきましたか?
ちなみに配置されているアドレスを比較すると、以下のようになるはず。

&mx0 != &mx1;
&mx0 == &m;
0880デフォルトの名無しさんNGNG
>>878
なんで 877 を指しているのかは謎だけど、機能的には、
T& foo == T* const foo
じゃないの?
0881デフォルトの名無しさんNGNG
>>880
バインドについて勉強してこい
0882デフォルトの名無しさんNGNG
>>881
ああ、シンタックス上有用、というのはそのとおり。
「機能的」と書いたのが間違い。「機構的に」と書くべきだった。
0883デフォルトの名無しさんNGNG
独立参照ですよね?
0884デフォルトの名無しさんNGNG
C#のようにクラスの中にmainを含めることはできないのですか?
0885デフォルトの名無しさんNGNG
HOGE h( 10 ); // 普通のコンストラクタ
HOGE h2=10; //これはなんでしょうね?
0886デフォルトの名無しさんNGNG
C.C.やね。
確かカーボンコピー。
0887デフォルトの名無しさんNGNG
explicit 付けなさいってこった。
0888デフォルトの名無しさんNGNG
よし!
C++のことならぜんてわかるから
質問があるならこの俺に
0889デフォルトの名無しさんNGNG
>>888
8Qeensをコンパイル時に解く方法はありますか?
0890888NGNG
うえーん(p_;)
ごめんなさい出直します
0891889NGNG
スペリングミスつてた
Qeens -> Queens
0892888NGNG
ちょっと変えます

C++の"基本的なこと"なら何でも俺に聞け!
0893デフォルトの名無しさんNGNG
・class Baseから派生したA,B,Cがある
・クライアントからはBaseしか見えない
・これらのインスタンスをソートする際の比較を、 AB、AC、BC等、
 相手クラスとの組み合わせによって、別々の方法で比較しなければならない

これに今後D,E,Fと追加される予定がある場合にも、
柔軟に対応できるよい設計方法ってないでしょうか?
できればダウンキャストを使いたくないのですが、やはり使うべきでしょうか?
0894デフォルトの名無しさんNGNG
>893
それぞれが 中間的な比較対象を生成して、それを比較するとか。
例えば、現在の内部状態を一旦数値化して、それを比べるっていうのだと
Baseに state_to_val() = 0; というのを用意しておいて、具体的な実装はA,B,C側でやる。

class A{
 //...
 bool operator< (const Base& b){
  Val val1 = this->state_to_val();
  Val val2 = b.state_to_val();
  return val1 < val2;
 }
 //...
}

Base* pb1 = new A;
Base* pb2 = new C;
if( pb1 < pb2 ) //...

…頭が回ってないので変なこと書いてたらスマソ
0895デフォルトの名無しさんNGNG
>>894
レス感謝です。これならメチャスマートですねぇ。

具体的にはA,B,Cは独自プリミティブ、ソートはZソートなんです。
894さんの言う中間的な比較対象を、Z値のmin、maxとして
引っかかった場合のみ、もにょもにょするのが良いのかな…。

できればこの、もにょもにょの部分(円と方形のコリジョン判定など)も、
中間的な比較対象として一般化したいのですが、難しいですよねぇ…。

もう少し悩んでみます。アドバイスありがとうございました。
あ…、気づいたらサッカー終わってる(´Д⊂
0896デフォルトの名無しさんNGNG
試してないから動く自信なっしんぐだけど…

bool operator< ( const Base& lhs, const Base& rhs ) {
 return lhs.isLessThanBase( rhs );
}
class Base {
 virtual bool isLessThanBase( const Base& rhs ) const = 0;
};
class D1 : public Base {
 virtual bool isLessThanBase( const Base& rhs ) const { return rhs.isMoreThan(*this); }
 template<class T>
 bool isMoreThan( const T& rhs ) const { return Compare(*this, rhs)>0; }
};
class D2 : public Base {
 virtual bool isLessThanBase( const Base& rhs ) const { return rhs.isMoreThan(*this); }
 template<class T>
 bool isMoreThan( const T& rhs ) const { return Compare(*this, rhs)>0; }
};

でごっそりとCompareを用意とか。
「ダブルディスパッチ」で検索かけてみると良いと思われ。
0897896NGNG
あーだめだ。↑それじゃ全く駄目。回線切って寝てきます。さらば。
0898デフォルトの名無しさんNGNG
>>895
共通的な比較対象に変換するというアプローチならば
すべてポリゴン(三角形リスト)に変換するというのもアリかな。
実行速度の点でダメだろうけど。
ダブルディスパッチをするのならVisitorパターンをオススメする。
ダウンキャストしない方法は多分それしかない。
Modern C++ に依存関係を最小にするVisitorパターンのやり方とか
のってるよ。
0899デフォルトの名無しさんNGNG
age age♪
0900893NGNG
だ、ダブルディスパッチすごいです!むはー、ダウンキャスト使用と拡張性は
不可避なトレードオフだとと思ってたのに、こんなエレガントな解決法があるなんて…。

今回は、比較対照である要素が2つという特殊なケースだったので、
ConcreteVisitorA〜Cを用意し、それぞれをA〜Cに関連づけ、Visitorを
B.conpare(A->VisitorA)の様に渡す事によって、実行時型チェックを避けることができました。

できれば中身は同じなのに、別のものとしているABとBAの扱いを、
同じものにできれば、ConcreteVisitorも一つにまとまり、
素晴らしそうなのですが…これは今後の課題にしたいと思います。
>>896
うちのショボーンコンパイラだと、クラス内の関数テンプレートが
うまく自動生成してくれなくて…でも今後の参考にさせて頂きます。
>>898
三角形リストでやっておいてから、もとのプリミティブに還元……と。
これも分かり易いですねぇ…。Modern C++の紹介も感謝、入手しておきます。

お二人ともレス、ありがとうございました!
0901デフォルトの名無しさんNGNG
VisitorとAcceptor(A〜C)の二人でダブルなディスパッチな訳だから
Visitorがひとつになることはないよ。
行列の行と列のようになるはず。
で、順番入れ替えは・・上の話でもう自明かと。
それからModernは(もし読んでなければ)
デザパタ本読んでからのほうが良いと思われる。
0902893NGNG
>>901
AcceptorA( VisitorB )と
AcceptorB( VisitorA )という、同じ処理なのに別の記述なとこを
どうにかできたらと思ったのですが、仰るとおりでこれやったらダブル
ディスパッチでもなんでも無くなるんですね。考えてみたらもう一枚クラスを
かませれば良いだけですし…。いやはや、素人の浅知恵でした…。

ご推察の通り、私はGoF本の分かり易いところ拾い読みした程度でして…。
今回のことで感銘を受けたので、もう一度基礎から読み直してみたいと
思います。ご忠告ありがとうございました。
0903デフォルトの名無しさんNGNG
VCだとコンパイルできるんだけど、BCCやMingwだと先頭のclassのところで
エラーになっちゃいます。なぜでしょうか?

------------------

/* Tera Term
Copyright(C) 1994-1998 T. Teranishi
All rights reserved. */

/* TTMACRO.EXE, error dialog box */

// CErrDlg dialog
class CErrDlg : public CDialog
{
public:
CErrDlg(PCHAR Msg, PCHAR Line, int x, int y);

//{{AFX_DATA(CErrDlg)
enum { IDD = IDD_ERRDLG };
//}}AFX_DATA

//{{AFX_VIRTUAL(CErrDlg)
//}}AFX_VIRTUAL

protected:
PCHAR MsgStr, LineStr;
int PosX, PosY;

//{{AFX_MSG(CErrDlg)
virtual BOOL OnInitDialog();
//}}AFX_MSG
DECLARE_MESSAGE_MAP()
};

typedef CErrDlg *PErrDlg;
0904デフォルトの名無しさんNGNG
MingwやBCCでMFC使えるようにしてるん?
0905デフォルトの名無しさんNGNG
そのくらいやってるよ。ば〜か
もっと気の利いたこといえヴォケ
0906デフォルトの名無しさんNGNG
>>904
ああ、これってMFCだったのですね。
実はC++ではろくに書いたことがなくて、さらにWindowsでプログラムを
書いたこともロクにないもんで気づきませんでした。

確かにBCCにはMFCはついてきませんね。さて、どうしたもんかなあ。
0907デフォルトの名無しさんNGNG
>906
仕事でやってるんですか?趣味でやってるんですか?
0908デフォルトの名無しさんNGNG
>>906
つか、あんた……他人のコード、名前入りで晒すなよ……
0909デフォルトの名無しさんNGNG
著作権侵害だあ
0910デフォルトの名無しさんNGNG
>>907
趣味なのです。
TeraTermにSSH2をつけようとしてて、それだけだったら
MFCと関係なくやれるのですが(だいたいできた)、
どうせならTeraTermもろとも、無料環境でコンパイルできるように
したいなと思ったのです。
0911デフォルトの名無しさんNGNG
>>903

以上Windowsプログラミングの知識0のド素人の激しくスレ違いな妄言でした。
0912デフォルトの名無しさんNGNG
>910
仕事でなくてよかったですねぇ。そのレベルで仕事だったら大変です。
以前ヴァカ上司がVC++の仕事をC++やろ?とかいって取ってきたときは地獄を見ました。
0913デフォルトの名無しさんNGNG
>>906
ftp://ftp.digitalmars.com/Digital_Mars_C++/MS/4.21/MFC4.21.zip
MFCとATL落ちてるんで拾ってきて使えるようにしよう
0914デフォルトの名無しさんNGNG
>>911
大変失礼しました。

>>912
私ごときのレベルではとてもプログラミングを業とすることはできませんね。
もっと勉強が必要なのですが、Windows関係はなんでもお金が高くついて
いけません。
0915デフォルトの名無しさんNGNG
class A {
 const int c;
public:
 A() : c(0) { }
};

class B : A { };

B b1, b2;
b1 = b2;

このコードが通りません
constメンバを持つクラスにはoperator=がデフォルトで設定されないのでしょうか?
0916デフォルトの名無しさんNGNG
age
0917デフォルトの名無しさんNGNG
>>915
operator = はコンストラクタじゃない。
コンストラクタじゃないから const メンバは変更できない。
だから暗黙の生成はされないってことでしょ。
0918デフォルトの名無しさんNGNG
>>913
Digital Mars C++用のものを無理矢理Mingwにつっこんでみましたが、
必殺Internal Compiler Errorになってしまいました。手も足も出ん。
0919デフォルトの名無しさんNGNG
>>918
修正しろって。
MFCはたいしたことやってないから、時間を掛ければ凡人にも直せる
0920デフォルトの名無しさんNGNG
>>919
他のエラーならどうにかこうにかAdHocに直せるだろうが、
Internal Compiler Errorじゃどうしていいのかわからん。
0921デフォルトの名無しさんNGNG
error message全体をコピペしないってのは単なる妄言としか思えませんが。
むしろ君の出力ではどうしていいのかわからん。
0922デフォルトの名無しさんNGNG
placement newを使うのに必要なメモリ量ってどうやって得るのでしょうか?

class A { };
BYTE b[sizeof A * 2];
A* pa = new(b) A[2];
これだとオーバーランしちゃうと思うんですが
0923デフォルトの名無しさんNGNG
>>922
alignment の問題をいってる?
0924デフォルトの名無しさんNGNG
1つのソ−スが大きくなる時
クラスのメンバ関数を別ファイルで定義してインクルードするのはありなんですか?
0925デフォルトの名無しさんNGNG
>>924
include = そのまま挿入

だから動くだろうけど読みやすいかと言えば死ぬほど読みにくい。
0926デフォルトの名無しさんNGNG
template ライブラリはしょがないじゃねかと蛙鳴く
0927デフォルトの名無しさんNGNG
Run-Time Check Failure #2 - Stack around the variable 'a' was corrupted.

.netでC++プロジェクトでコーデングしているとこのような警告ダイアログが出て止まってしまいます。
これはどういうことでしょう。スタックオーバーフローというやつでしょうか。
0928デフォルトの名無しさんNGNG
実行時のチェックの失敗ー
変数a 周辺のスタックの内容が破壊されました。

よくあるエラーだねぇ・・。
0929922NGNG
>>923
alignmentじゃないです。
たとえばdouble[2]とかでもかまいません
http://www.google.co.jp/search?q=cache:u_dSdwqiAL8C:www.eva.hi-ho.ne.jp/reki/diary/2001/20010206.htm+placement+new&hl=ja&lr=lang_ja
ここを見ると配列で取ると管理領域分余分にメモリを消費するようで、
これが規定されてるのか不満なんです
0930デフォルトの名無しさんNGNG
#include <stdio.h>
void main (void)
{
int a,b,c;
scanf("%s %s %s",&a,&b,&c);

printf("%5s\n",a);
printf("%11s\n",b);
printf("%16s\n",c);
}
コンパイルエラーはないんですが
実行するとエラーが出るのですが原因わかりますか?
メモリがどうたらこうたら初心者でスマソ
0931デフォルトの名無しさんNGNG
>>930
mainの戻り値はint
0932デフォルトの名無しさんNGNG
>>930
貴方は2つの罪を犯しています。
1つ目の罪はその質問はC質問スレですべきということで、
2つ目は罪はprintfのドキュメントをちゃんと読んでないこと、
です。%sが文字列であることを確認してからやり直しましょう。
09330927NGNG
>>928
なるほど。見直してみると配列a[10][10]の添え字の範囲を超えてアクセスしていました。
0934デフォルトの名無しさんNGNG
>>931
うーん、意味がわからない。無知でスマソ
>>932
ドキュメント?
すれ違いでしたか
逝ってきます
0935デフォルトの名無しさんNGNG
>>929
operator new() と operator new[]() は別物だよ。そのリンク先の人は、
カン違いしてるか、古い仕様の C++ コンパイラを使ってると思われる。
0936デフォルトの名無しさんNGNG
>>929
示された URL に...

> だが、管理領域のサイズはどこにも定義が無いことから、これらは
> 不定のサイズと考えるべきだ。他のコンパイラでは(場合によっては
> コンパイルオプション次第で)違うサイズの管理領域を確保している
> 可能性は十分ある。

と書かれているが...。これじゃ不満なの ?

こんなことがしたいのなら、::operator new() と ::operator delete()
を適切に定義すべき。
0937922NGNG
>>936 これじゃ不満なの ?

不定であるなら、それを求められないと必要なメモリ量が分からないから、どうすればいいの?
って質問なんですけど

0938936NGNG
>>937
だから ::operator new[]() と ::operator delete[]() を定義しろと、
書いてあるんだけど、見えないのか ?
(そう言えば、仕様変わったんだよな、忘れてたよ。サンクス。>>935)
0939935NGNG
すまん、カン違いしていたのはオレのほうみたい。
void *operator new[]() を定義した場合は、てっきり、これが返す
アドレスから配列はが始まると思っていたのだが、やっぱり、先頭部は
管理領域になるようだ。
0940デフォルトの名無しさんNGNG
boost 1.28.0 age
0941935NGNG
ただし、operator new[](size_t size, ...) の size には、
その管理領域も含めたサイズが渡ってくるので、メモリを確保するのは
そこでやればよいのかな。
0942デフォルトの名無しさんNGNG
1.28の目玉はlambdaか。
0943デフォルトの名無しさんNGNG
>>942
LISPみたいな?
0944831NGNG
>>943
こんな感じに書けるんよ。結構感動。

vector<int> v(10);
for_each(v.begin(),v.end(), _1 = 50);
for_each(v.begin(),v.end(), cerr << _1 << " ");
0945デフォルトの名無しさんNGNG
>>944
1行foreach、へぇ。
0946831NGNG
lambda の説明としてはこっちの方が適切か。

int i = 3, j = 5,k;
k = (_1 + _2)(i, j); // k = 8
0947デフォルトの名無しさんNGNG
>>944
for_each(v.begin(),v.end(), cerr << "error: " << _1 << " ");
となると素直には書けないので constant() とか使わないと
いけないのが、ちょびっとだけ悲しいんだけどね。
0948デフォルトの名無しさんNGNG
あげ
0949デフォルトの名無しさんNGNG
class CTest
{
public:
int m_i;
CTest& operator+=(const CTest& t)
{
(*this).m_i += t.m_i;
return (*this);//これは必要なのか。
}
};

operator+= にreturn(*this)は必要なんでしょうか?
なくても動くような気がするのですが、どのような場合、
return (*this); が必要なのでしょうか。
0950デフォルトの名無しさんNGNG
>>949
戻り値があることについては、
a = (b += c);
というふうに、足した結果をさらに参照できるよううに。

戻り型が値でなく非constの参照なのは、代入結果の左辺値にさらに変更を加えることを許すためじゃないすか。
(a += b) += c;
とか。
0951949NGNG
>>950
なるほど、
>a = (b += c);
のような使い方、したことなかったので、気がつきませんでした。
納得しました。ありがとうございました。
0952デフォルトの名無しさんNGNG
>>950
>> (a += b) += c;

でもそれって int とか基本型では保証されてないって聞いた覚えがあるぞ。気のせいか?
0953デフォルトの名無しさんNGNG
const CTest& operator=(const CTest& t)
0954デフォルトの名無しさんNGNG
const CTest& operator=(const CTest& t) const
なんつって
0955デフォルトの名無しさんNGNG
状態を変更するからoperator=() constはありえない
0956デフォルトの名無しさんNGNG
//例外をthrowできない関数
void Test1() throw()
{
throw 1;//Error!
}
//例外をthrowできる関数
void Test2 throw(...)
{
throw "Test2";//Ok
}
//例外をthrowできる
void Test3() throw(int)
{
throw 1;//Ok
}
throwについて調べてるんですが、
末尾につけるthrow(...),throw()は、
プログラムのミスを避けるためのものだと思うのですが、
使わないと最適化への影響や何らかの弊害があるのでしょうか?
よろしくお願いします。
0957思い出NGNG
class C{};

C obj_c();  //これでデフォルトコンストラクタ呼んでたと思ってた
0958デフォルトの名無しさんNGNG
>>956
帰ってくる例外の型を特定するための機能だよね。
0959デフォルトの名無しさんNGNG
>>958
void Test4() throw(unsigned int)
{
throw 4;
}

void TestCatch1();
{
try{
Test2();
Test3();
Test4();
}
catch(int){//型がわかる
//Test2
}
catch(unsigned int){//型がわかる
//Test4
}
}

TestCatch2() throw()
{
try{
TestCatch1();
}
catch(...){//残り
//Test3
}
}

あいまいさを解決できるということですね。納得できました。
0960デフォルトの名無しさんNGNG
そういうわけでもないんだが。
呼び出し側が捕捉すべき例外を明示するための機能。
throw(unsigned int)と指定されていれば、
throw floatは成立し得ない(プログラムが落とされる
0961デフォルトの名無しさんNGNG
>>952
気のせいだろ。というか、その程度、ちょっとコンパイラで
確認すればいい話じゃないのか?
> (a += b) += c;
このコードは、VC6SP5 , bcc5.5.1 , gcc2.95.3-6 で
コンパイルが通って、なおかつ期待通りに計算されてたぞ。
ただ、ついでに確認したhttp://www.digitalmars.com/の
コンパイラだと、コンパイルが通ってくれなかったな。
このコンパイラがヘヴォなだけだと思うんだが…。
本格的に確認したければ、プロ言C++を見るしか。

>>953>>954
operator=()の戻り値をconstにはするな、とEffective C++に
書いてある。理由は、Scott Meyersお得意の『intのように振舞え』
だったけど。
Exceptional C++にもconstにはするな、と書いてある。こっちの理由は、
STLのコンテナに入れられなくなるから、だ。
そういうわけで、constを付けちゃいけない。
0962デフォルトの名無しさんNGNG
>>960
throwする側が仕様以外の例外を返さないようにする保険のようなもんじゃないの?
0963デフォルトの名無しさんNGNG
>>962
する側じゃなくて、される側のために用意してあるもんなんだが
0964デフォルトの名無しさんNGNG
>>963
まぁ、お互いのためだ。

出す側が未定義の例外投げればコンパイルエラーになるし、出される側も飛んでくる型が特定できる。
0965デフォルトの名無しさんNGNG
もし同じ型の例外が複数きたときはどうすればいいんでしょうか?
0966デフォルトの名無しさんNGNG
>>965
その例外の値(intとか)クラスメンバ(Exception.typeみたいな)で判断するべし。
0967デフォルトの名無しさんNGNG
>>964
コンパイルエラーにはならないっしょ。例外仕様が指定されていないライブラリのために。

>>965
言ってる意味がわからん。例外は、投げるときは必ずひとつのはずだが。
0968965NGNG
>>967
よく考えてみれば、一つですね。
>>966
例外処理クラス作ります。
0969デフォルトの名無しさんNGNG
uncaught_exceptionがサポートされてない処理系(VCとか)で
スタックに確保したオブジェクトのデストラクタがthrowするとか。
0970デフォルトの名無しさんNGNG
>>969
例外のためのアンワインド中に、スタック上のオブジェクトのデストラクタが
さらに例外を投げた場合って意味か?
その場合はいきなりプログラムがあぼーんじゃなかったっけ。
だからデストラクタでは例外を投げるなよ、といろんな本に書いてあるのでは。
0971デフォルトの名無しさんNGNG
>>957
えっ?違うの・・・?
# ネタじゃありません・・・
0972デフォルトの名無しさんNGNG
ていうか
もう痔スレ立てますよ?
0973デフォルトの名無しさんNGNG
>>972
よろしこ。
0974デフォルトの名無しさんNGNG
>>972
おっと、いつのまに1000間近か…よろしく
0975デフォルトの名無しさんNGNG
>>971
関数宣言になっちゃう
0976971NGNG
>>975
ナルホドサンクスコ。
0977デフォルトの名無しさんNGNG
C++相談室 part7
http://pc.2ch.net/test/read.cgi/tech/1021787032/l50
新スレ
0978デフォルトの名無しさんNGNG
v(^・^)v
0979デフォルトの名無しさんNGNG
グッシッシ
0980デフォルトの名無しさんNGNG
v(^・^)v
0981    NGNG
C++相談室 part7
http://pc.2ch.net/test/read.cgi/tech/1021787032/l50
新スレ
0982デフォルトの名無しさんNGNG
v(^・^)v
0983デフォルトの名無しさんNGNG
v(^・^)v
0984デフォルトの名無しさんNGNG
v(^・^)v
0985デフォルトの名無しさんNGNG
v(^・^)v
0986デフォルトの名無しさんNGNG
(゚Д゚) 何見てんだゴルァ!!
0987デフォルトの名無しさんNGNG
(゚Д゚) 何見てんだゴルァ!!
0988デフォルトの名無しさんNGNG
(゚Д゚) 何見てんだゴルァ!!
0989デフォルトの名無しさんNGNG
(゚Д゚) 何見てんだゴルァ!!
0990デフォルトの名無しさんNGNG
(゚Д゚) 何見てんだゴルァ!!
0991デフォルトの名無しさんNGNG
(゚Д゚) 何見てんだゴルァ!!
0992デフォルトの名無しさんNGNG
(゚Д゚) 何見てんだゴルァ!!
0993デフォルトの名無しさんNGNG
(゚Д゚) 何見てんだゴルァ!!
0994デフォルトの名無しさんNGNG
(゚Д゚) 何見てんだゴルァ!!
0995デフォルトの名無しさんNGNG
v(^・^)v
0996v(^・^)vNGNG
Boost 感動した。よくやった。
0997デフォルトの名無しさんNGNG
997
0998v(^・^)vNGNG
1000 トルナラ イマノウチ
0999v(^・^)vNGNG
キタ━━(゚∀゚)━( ゚∀)━(  ゚)━(  )━(゚  )━(∀゚ )━(゚∀゚)━━!!!!!
1000v(^・^)vNGNG
v(^・^)v
10011001Over 1000Thread
このスレッドは1000を超えました。
もう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。