C++相談室 part55
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの名無しさん
2006/12/01(金) 14:31:34ただし質問の前にはFAQに一通り目を通してください。
IDE(VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
テンプレその他 >>2-15 付近参照
前スレ
C++相談室 part54
http://pc8.2ch.net/test/read.cgi/tech/1159340181/
0002デフォルトの名無しさん
2006/12/01(金) 14:33:01[C++ FAQ]
http://www.parashift.com/c++-faq-lite/
http://www.bohyoh.com/CandCPP/FAQ/ (日本語)
Cとその仕様を比較しながらの解説なので分かりやすい。
***** 質問の前に必ずこの二つに目を通してください *****
[C/C++ リファレンス]
http://www.cppreference.com/ (英語)
http://www.cppll.jp/cppreference/ (↑の日本語訳だけど最新は反映しない)
[禿 Stroustrup]
http://public.research.att.com/~bs/
[C++ International Standard]
http://www.iso.org/iso/en/CatalogueDetailPage.CatalogueDetail?CSNUMBER=38110&ICS1=35&ICS2=60&ICS3=
[JTC1/SC22/WG21 - C++]
http://www.open-std.org/jtc1/sc22/wg21/
ここから規格の最新(2003より新しい)ドラフトがダウンロードできる。
0003デフォルトの名無しさん
2006/12/01(金) 14:33:35amazon.com C,C++関連書籍
http://www.amazon.com/exec/obidos/tg/browse/-/3956/ref=br_bx_c_1_3/
The C++ Programming Language
ttp://www.amazon.com/exec/obidos/ASIN/0201700735/
ttp://www.amazon.co.jp/exec/obidos/ASIN/475611895X/ (翻訳)
C++ Primer (3rd Edition)
ttp://www.amazon.com/exec/obidos/ASIN/0201824701/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756140068/ (翻訳)
The C++ Standard Library
ttp://www.amazon.com/exec/obidos/ASIN/0201379260/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756137156/ (翻訳)
Effective C++
ttp://www.amazon.com/exec/obidos/ASIN/0201924889/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118089/ (翻訳)
More Effective C++
ttp://www.amazon.com/exec/obidos/ASIN/020163371X/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4756118534/ (翻訳)
Exceptional C++
ttp://www.amazon.com/exec/obidos/ASIN/0201615622/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894712709/ (翻訳)
More Exceptional C++
ttp://www.amazon.com/exec/obidos/ASIN/020170434X/
Exceptional C++ Style
ttp://www.amazon.com/exec/obidos/ASIN/0201760428/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894714663/ (翻訳)
C++ Coding Standards
ttp://www.amazon.co.jp/exec/obidos/ASIN/0321113586/
ttp://www.amazon.co.jp/exec/obidos/ASIN/4894716860/ (翻訳)
0004デフォルトの名無しさん
2006/12/01(金) 14:34:39Effective STL
http://www.amazon.com/exec/obidos/ASIN/0201749629/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714108/ (翻訳)
Modern C++ Design
http://www.amazon.com/exec/obidos/ASIN/0201704315/
http://www.amazon.co.jp/exec/obidos/ASIN/4894714353/ (翻訳)
C++ Templates
http://www.amazon.com/exec/obidos/ASIN/0201734842/
C++ Template Metaprogramming
http://www.amazon.com/exec/obidos/ASIN/0321227255/
0005デフォルトの名無しさん
2006/12/01(金) 14:35:17[Boost]
Boost http://www.boost.org/
(日本語) http://www.kmonos.net/alang/boost/
(日本語) http://shinh.skr.jp/boost/
[標準ライブラリ]
SGI-STL http://www.sgi.com/tech/stl/
STLport http://stlport.sourceforge.net/
GNU libstdc++ http://gcc.gnu.org/libstdc++/
Apache STDCXX http://incubator.apache.org/stdcxx/
STLFilt http://www.bdsoft.com/tools/stlfilt.html
(日本語) http://www005.upp.so-net.ne.jp/episteme/html/stlprog/
(日本語) http://www.wakhok.ac.jp/~sumi/stl/
[Loki]
http://sourceforge.net/projects/loki-lib/
LokiPort-MSVC6sp5 http://fara.cs.uni-potsdam.de/~kaufmann/?page=lokiport
0006デフォルトの名無しさん
2006/12/01(金) 14:44:492 http://pc.2ch.net/tech/kako/996/996640937.html
3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
8 http://pc3.2ch.net/tech/kako/1025/10250/1025010364.html
9 http://pc3.2ch.net/tech/kako/1027/10273/1027347982.html
10 http://pc3.2ch.net/tech/kako/1029/10293/1029315669.html
11 http://pc3.2ch.net/tech/kako/1032/10323/1032345774.html
12 http://pc3.2ch.net/tech/kako/1035/10350/1035005882.html
13 http://pc3.2ch.net/tech/kako/1038/10380/1038031395.html
14 http://pc5.2ch.net/tech/kako/1041/10413/1041328679.html
15 http://pc5.2ch.net/tech/kako/1043/10436/1043605481.html
0007デフォルトの名無しさん
2006/12/01(金) 14:45:2317 http://pc5.2ch.net/tech/kako/1047/10475/1047560042.html
18 http://pc5.2ch.net/tech/kako/1050/10501/1050177746.html
19 http://pc5.2ch.net/tech/kako/1052/10526/1052625846.html
20 http://pc5.2ch.net/tech/kako/1055/10551/1055162298.html
21 http://pc5.2ch.net/tech/kako/1057/10575/1057580107.html
22 http://pc5.2ch.net/tech/kako/1060/10603/1060361082.html
23 http://pc5.2ch.net/tech/kako/1062/10626/1062690663.html
24 http://pc5.2ch.net/tech/kako/1066/10665/1066546387.html
25 http://pc5.2ch.net/tech/kako/1067/10679/1067949669.html
26 http://pc5.2ch.net/test/read.cgi/tech/1070164402/ (迷子)
27 http://pc5.2ch.net/test/read.cgi/tech/1074454641/ (迷子)
28 http://pc5.2ch.net/test/read.cgi/tech/1077985164/
29 http://pc5.2ch.net/test/read.cgi/tech/1082047479/
30 http://pc5.2ch.net/test/read.cgi/tech/1084030770/
0008デフォルトの名無しさん
2006/12/01(金) 14:47:2032 http://pc5.2ch.net/test/read.cgi/tech/1088236078/
33 http://pc5.2ch.net/test/read.cgi/tech/1090180012/
34 http://pc5.2ch.net/test/read.cgi/tech/1092018643/
35 http://pc5.2ch.net/test/read.cgi/tech/1093958200/
36 http://pc5.2ch.net/test/read.cgi/tech/1096304546/
37 http://pc5.2ch.net/test/read.cgi/tech/1098543578/
38 http://pc5.2ch.net/test/read.cgi/tech/1101473340/
39 http://pc5.2ch.net/test/read.cgi/tech/1106466303/
39(実質40) http://pc8.2ch.net/test/read.cgi/tech/1106527792/
40(実質41) http://pc8.2ch.net/test/read.cgi/tech/1113408957/
41(実質42) http://pc8.2ch.net/test/read.cgi/tech/1120190961/
43 http://pc8.2ch.net/test/read.cgi/tech/1124113879/
44 http://pc8.2ch.net/test/read.cgi/tech/1128512737/
45 http://pc8.2ch.net/test/read.cgi/tech/1133007604/
0009デフォルトの名無しさん
2006/12/01(金) 14:49:3647 http://pc8.2ch.net/test/read.cgi/tech/1139931895/
48 http://pc8.2ch.net/test/read.cgi/tech/1142423595/
49 http://pc8.2ch.net/test/read.cgi/tech/1146185570/
50 http://pc8.2ch.net/test/read.cgi/tech/1149427282/
51 http://pc8.2ch.net/test/read.cgi/tech/1153079297/
52 http://pc8.2ch.net/test/read.cgi/tech/1156525695/
■関連スレ■
多すぎ。とりあえずスレタイ C++ で検索して。
以下、スレタイで見つからなさそうな関連スレ。
Boostを語れゴラァ part3
http://pc8.2ch.net/test/read.cgi/tech/1158991211/
GCCについて part7
http://pc8.2ch.net/test/read.cgi/tech/1145357824/
0010デフォルトの名無しさん
2006/12/01(金) 15:11:280011デフォルトの名無しさん
2006/12/01(金) 15:17:00注:私の有意義な発言に対し、自分の理解不足を棚に上げ煽り、1行レス
で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
0012デフォルトの名無しさん
2006/12/01(金) 15:19:52人によるだろ。
俺はBorland-C++5.6.2に -D_RTLDLL オプションを指定して、極力
ランタイムを使用するようにして使っているが、例えばstd::vectorを
使っても使わない時と比べ10cmほどしか後退してない。
0013デフォルトの名無しさん
2006/12/01(金) 15:25:230014デフォルトの名無しさん
2006/12/01(金) 15:30:01とかいうエラーが出るんだけどこれってどうすればいいの?
0015デフォルトの名無しさん
2006/12/01(金) 15:31:11好きなようにやれ。
0016デフォルトの名無しさん
2006/12/01(金) 15:37:39で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
0017デフォルトの名無しさん
2006/12/01(金) 15:46:4916 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
0018デフォルトの名無しさん
2006/12/01(金) 15:47:37後死ね。
言葉が悪いな。それで教えているつもりか。
まぁ付け毛ぐらいにはなったな。
うむごくろう。
0019デフォルトの名無しさん
2006/12/01(金) 15:48:18環境によるだろ。
俺はVC++に /Yc オプションを指定して、極力
プリコンパイルヘッダを使用するようにして使っているが、例えばboost::lambdaを
使っても使わない時と比べ10秒ほどしか増えない。
0020デフォルトの名無しさん
2006/12/01(金) 15:51:08CreateFileとかCopyFile等の動作チェック用です。
自分で作ってもいんですが、既に多機能な機能やグラフィカルなツールがあるかもしれないので探しています。
VisualStudioパッケージあるかもしれんがようわからん。
誰か知らないか?
0021デフォルトの名無しさん
2006/12/01(金) 15:52:43std恐るべし((((;゜Д゜)))
0022デフォルトの名無しさん
2006/12/01(金) 15:56:330023デフォルトの名無しさん
2006/12/01(金) 16:19:04スレ違い
0024デフォルトの名無しさん
2006/12/01(金) 16:37:04これって前スレの頭の方にあった質問だね。
テンプレに入れる事にしたのか。
0025デフォルトの名無しさん
2006/12/01(金) 16:51:04前スレ後半から新スレへくるようなお客さんが引いちゃうし、なにより飽きた。
0026デフォルトの名無しさん
2006/12/01(金) 17:02:08http://docs.sun.com/source/806-4838/Ch2.src.html
の最後にある、「テンプレート定義分離型の構成」のサンプルを
VC7.1にてビルドしてみたのですが、以下のようなエラーが出てしまいます。
error LNK2019: 未解決の外部シンボル "int __cdecl twice<int>(int)"
(??$twice@H@@YAHH@Z) が関数 _main で参照されました。
これは何が問題なのでしょうか?
もしや、VCの仕様でしょうか?
0027デフォルトの名無しさん
2006/12/01(金) 17:07:15exportキーワードがサポートされてないなら全部ヘッダに書くしかない
0028デフォルトの名無しさん
2006/12/01(金) 17:49:29もうわからん
0029デフォルトの名無しさん
2006/12/01(金) 19:48:26NGにしてるヤツが「番号が飛び飛び」「〜が見えない」とやたらNGにしてることを強調したがるのはどうしてか
A
統合失調症の恐れがあります。
何をされるかわかったもんじゃないので関わらないほうがいいです。
0030デフォルトの名無しさん
2006/12/01(金) 20:12:41書き込んだやつからの反応がほしいんじゃなくて、
自分と同様にあぼ〜んしたやつからの反応がほしいんだろう。
「〜が見えない」の意味が理解できないのは2ちゃん初心者。
SGにでも登録してください。
0031デフォルトの名無しさん
2006/12/01(金) 21:36:14で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
0032デフォルトの名無しさん
2006/12/01(金) 21:40:23/ (●)(●)(●)(●)(●))(●)(●)(●゙'‐='"(●)(●)(●) \
_ (●)(●)(●)(●)(●)(●)(●)(●)))(●)(●)(●)(●)_
/ (●)(●)(●)(●)(●))(●)(◎)(●))(●)(●)(●)(●) \
_(●)(●,,r==、(●))(●)(◎)(●))(●)(●)(●)(●)_
(●)((ii ,●l)(●))(●)(●)(●)(●)(●)(●)(●)
__(●)(●゙'‐='"((●))(●)(●)(●))(●)(●)(●)(●)__
/ (●)(●)(●)(●)(●))(●)(●,,r==、(●)(●)(●)(●) \
_ (●)(●)(●)(●)(●)(●)(●)ii ● ))(●)(●)(●)(●)_
/ (●)(●)(丿"~"i i(●)(●)(●)゙'‐='"(●)(●)(●)(●) \
_(●)(●)(",, )(X)ヽヽ(●))(●)(●))(●)(●)(●)(●)_
(●)(●)\ ヽXヽヽ(●))(●)(●)(≡)(≡)(●)(●)
__(●)(●)((●\ヽ Xヽヽ(●)((●))(●)(●)(ミ)(●)__
/ (●)(●),,r==、)( \,",",ソ●(●))(●),,r==、●)(●) \
_ (●)(●)ii ,●l)(●)(●)(●)(●)))(●ii● ;)(●)(●)_
/ (●)(●)゙'‐='"(●)(●))(●)(●)(●))((゙'‐='"(●)(●) \
_(●)(●)●)(●)(●))(●)(●)(●))(●)(●)(●)(●)_
/ (l●)(●)(●),,r==、)(●)(●)(●)(,,r==、)(●)(●l;) \
| . (l;●)(●)(● ,● ))(●))(●)(●)ii ● l)(●)(●) |
| . (0●)(●)(●゙'‐='"●))(●)(●)(゙'‐='"(●))(●)O) |
,;; (:●)●)(●)(●)(●)(●)(●)(●))(●))(●;) 。
(о●)(●))(●)(●))(●)(●)(●)(●)●》)
( ;●ξ巛:)( ;●ξ(●)(●,--'""ヽ●:( ;)
巛巛ミ巛ミミミ//二二ノ""^ソ彡
巛((ミミ((巛ヘ`\┼┼┼ ,!ヽ
巛王 \"ヽ-;:,,,,,,ノ /'
\,,,,,__,,,ノ
0033デフォルトの名無しさん
2006/12/01(金) 23:18:17で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
0034デフォルトの名無しさん
2006/12/02(土) 03:18:4633 名前:あぼ〜ん[あぼ〜ん] 投稿日:あぼ〜ん
0035デフォルトの名無しさん
2006/12/02(土) 05:12:400036デフォルトの名無しさん
2006/12/02(土) 08:59:210037デフォルトの名無しさん
2006/12/02(土) 09:14:370038デフォルトの名無しさん
2006/12/02(土) 11:09:480039デフォルトの名無しさん
2006/12/02(土) 11:55:050040デフォルトの名無しさん
2006/12/02(土) 15:14:110041デフォルトの名無しさん
2006/12/02(土) 18:16:27どうすれば良いんでしょうか。
0042デフォルトの名無しさん
2006/12/02(土) 18:33:58template < typename T>
T func() ;
#include "MyFunc.cpp"
export? 何それ食えるの?
0043デフォルトの名無しさん
2006/12/02(土) 19:02:56まあフレンドなんて使うなってことだろうが
0044デフォルトの名無しさん
2006/12/02(土) 19:23:42とa = 1;、y(); のところでエラーとなってしまいます。this->a = 1;、
this->y();のようにすれば問題ないのです。出来ればthisをつけないようにし
たいのですが、どうすれば良いでしょうか?
template<class T1, class T2>
class A
{
int a;
void y();
};
template<class T1, class T2>
class B
{
void x();
};
template<class T1, class T2>
void B<T1, T2>::x()
{
a = 1;
y();
}
0045デフォルトの名無しさん
2006/12/02(土) 19:26:01何これ
BはAを継承してるのか?
0046デフォルトの名無しさん
2006/12/02(土) 19:29:07privateメンバはサブクラスからはいじれないとかそのへんのことじゃね?
0047デフォルトの名無しさん
2006/12/02(土) 19:31:26004844
2006/12/02(土) 19:33:59template<class T1, class T2>
class A
{
public:
int a;
void y();
};
template<class T1, class T2>
class B: public A<T1, T2>
{
void x();
};
template<class T1, class T2>
void B<T1, T2>::x()
{
a = 1;
}
0049デフォルトの名無しさん
2006/12/02(土) 19:35:15がない時は明示しなければならない
template <class T1, class T2>
class A
{
protected:
int a;
void y() { std::cout << a << std::endl; }
};
template <class T1, class T2>
class B : public A<T1, T2>
{
public:
void x();
};
template <class T1, class T2>
void B<T1, T2>::x()
{
A<T1, T2>::a = 1;
A<T1, T2>::y();
}
005044
2006/12/02(土) 19:36:56丁寧なレス有り難うございます。
005144
2006/12/02(土) 19:41:51うなものをつける必要があるのはどういった理由からでしょうか?ポインタだ
けでも教えていただけるとうれしいです。
0052デフォルトの名無しさん
2006/12/02(土) 19:47:55気のせいかな
0053デフォルトの名無しさん
2006/12/02(土) 19:57:310054デフォルトの名無しさん
2006/12/02(土) 19:58:20扱いを難しくしてるのは、gccだけだけどなw
0055デフォルトの名無しさん
2006/12/02(土) 20:06:280056デフォルトの名無しさん
2006/12/02(土) 20:08:14プログラマをへたらせるだけだと思うんだが
0057デフォルトの名無しさん
2006/12/02(土) 20:13:170058デフォルトの名無しさん
2006/12/02(土) 20:15:30規格の不可解な点には必ず理由があると思ってた。
>>49のように書かなければいけないのも(typedefすればすっきりするが)
何か理由があるのだろう。基底クラスが一意に決定できるのにわざわざ
修飾しなければならないのは。
0059デフォルトの名無しさん
2006/12/02(土) 20:30:22Aが特殊化されてるかもしれない。
0060デフォルトの名無しさん
2006/12/02(土) 21:28:59もちっとましな規格にならんもんかしら
0061デフォルトの名無しさん
2006/12/02(土) 21:34:27ttp://d.hatena.ne.jp/mb2sync/20061123#p1
0062デフォルトの名無しさん
2006/12/02(土) 21:42:05そこで書かれているのは typename が要らなくなる,ではなくて
現在の仕様だと typename を書くことが禁止されていた場所に
typename を書いても許されるようになる,ということだけだと思います.
この規格の変更で 60 さんの不満が解消することは恐らくないかと.
0063デフォルトの名無しさん
2006/12/03(日) 10:30:18two stage lookup ってやつだろ。
B<T1, T2>::x() の定義の前にグローバルな int a; なんて宣言があった場合、
>>48 だとテンプレートのインスタンス化前に行われる名前解決で ::a = 1 と
決定されてしまう。
ここでは a がテンプレートのインスタンス化を行うまで確定しないことを
コンパイラに伝える必要がある。 >>49 はその方法のうちの一つ。
this->a のほうがお勧めだけど。
0064デフォルトの名無しさん
2006/12/03(日) 11:22:12メンバ関数の中でstatic変数使ってるんですけど、これは他のオブジェクトとも共有されるんですかね
0065デフォルトの名無しさん
2006/12/03(日) 11:31:48void func() {
static int a = 0;
printf("a = %d\n", ++a);
}
}
int main(int argc, char*argv[])
{
foo f1, f2;
f1.func();
f2.func();
return 0;
}
0066デフォルトの名無しさん
2006/12/03(日) 11:51:36メンバ変数にすることにします
静的変数ってグローバル変数とほとんど変わらないんですね
0067デフォルトの名無しさん
2006/12/03(日) 20:28:33C++組込型において、格上げの規格について教えてください。
signed short s = 0xFFFF;
unsigned long ul = static_cast<unsigned long>(s);
cout << hex << ul << endl;
とした場合、結果は
ffffffff
となりました。
符号有り型から、符号無し型へ格上げした場合、変換後の値は変換先の型に入るだけのビット数を変換前から抜き出したものになる。とプログラミング言語C++第3版 p945には書いてあるのですが、これは違った結果になりました。
最上位bitが1なら、上位ビットは1で埋まるというのは、規格で決まっているのでしょうか?
コンパイラは、Visual C++ 2005 Express edition です。
0068デフォルトの名無しさん
2006/12/03(日) 20:43:40cout << (ul==s) << endl;
とやってみてから考えれば?
0069デフォルトの名無しさん
2006/12/03(日) 20:47:00cout << ul << endl;
cout << s << endl;
007067
2006/12/03(日) 20:58:254294967295
-1
となりました。うーん、ちょっとまだよく分からないのですが。
何かプログラミング言語C++を読み違えてるんでしょうね・・もう少しジックリ読んでみます。
ありがとう。
0071デフォルトの名無しさん
2006/12/03(日) 21:12:08それからビット数が多い整数から少ない整数に変換する話であって本は間違ってない。
0072デフォルトの名無しさん
2006/12/03(日) 21:15:24> signed short s = 0xFFFF;
signed short の最大値が 0xFFFF 以上じゃないと、この時点で値は実装依存だよ。
007367
2006/12/03(日) 21:22:56符号拡張というんですね。
さっそくググってみます。
>>72
あ、すいません。-1とするべきでしたね。
ご丁寧に、ありがとうございました。
0074デフォルトの名無しさん
2006/12/03(日) 21:24:44それを書くなら符号拡張だろ。
だが、ここで関係するのは汎整数拡張だ。int/unsigned intより小さい型の値は、
演算前にintか、intで表すことができなければunsigned intへ拡張されることになっている。
0075デフォルトの名無しさん
2006/12/03(日) 21:39:39モンテカルロクラスのコンストラクタに、計算対象の純粋仮想クラスへの参照を渡して
計算させたいのですが、下記のようにするとコンパイルエラーとなってしまいます。
class MonteCalro
{
public:
explicit MonteCalro(Calculatable& c){cp=c;};
double calc(const int count);
private:
MonteCalro();
Calculatable& cp;
double getRandomValue(const double range) const;
};
上記の&を*にするとうまくいきますが、
オブジェクトの内容を書き換えられるのがいやなので
なるべくでしたら参照型で渡したいのですが。。
どうしたらよいのでしょうか?
0076デフォルトの名無しさん
2006/12/03(日) 21:43:29-?explicit?MonteCalro(Calculatable&?c){cp=c;};
+?explicit?MonteCalro(Calculatable&?c):cp(c){};
0077デフォルトの名無しさん
2006/12/03(日) 21:47:040078デフォルトの名無しさん
2006/12/03(日) 21:57:22>>77 「参照メンバー 'MonteCalro::cp' は初期化されていない」とエラーになっていました・・
それと、どこにconstをつけたらいいか良く分かりません。
const Calculatable& cp;
とすると、警告 W8037 montecarlo.cpp 9: const オブジェクトに対して 非 const 関数 'Calculata
ble::getYrange()' が呼ばれた(関数 MonteCalro::calc(const int) ) とでます。。
C++ むずかしい・・・
0079デフォルトの名無しさん
2006/12/03(日) 22:12:16Calculatable::getYrange()っていう関数でメンバ変数を書き換えるコードがかかれてない?
constつけるとそういうのはコンパイルエラーになる
0080デフォルトの名無しさん
2006/12/03(日) 22:22:29Caluculatableクラスに下記のようにconstつけてみたのですが、
まだ、警告 W8037 montecarlo.cpp 13: const オブジェクトに対して 非 const 関数 'Calculat
able::isInside(const double,const double)' が呼ばれた(関数 MonteCalro::calc(cons
t int) )
とエラーが出ます。isInsideにconstをつけると、継承したクラスで
エラー E2353 main.cpp 17: クラス 'Circle' は抽象クラス('Calculatable::isInside(
const double,const double) = 0' のため)(関数 main(int,char * *) )
とエラーが出ます。がびーん
class Calculatable
{
public:
virtual bool isInside (const double x,const double y)=0;
double getXrange() const{return xrange;}
double getYrange() const{return yrange;}
protected:
double xrange;
double yrange;
};
0081デフォルトの名無しさん
2006/12/03(日) 22:24:00getYrange() に const 付け忘れてんだろ。
0082デフォルトの名無しさん
2006/12/03(日) 22:25:31isInside() と、それをオーバーライドするクラスでの宣言全部に const が必要。
片方だけ付けるとオーバーライドとみなされない。
0083デフォルトの名無しさん
2006/12/03(日) 22:34:42ありがとうございます。うまくいきました。
各クラス1個1個const付けつつコンパイルしてたので失敗していました。。。
0084デフォルトの名無しさん
2006/12/03(日) 23:22:000085デフォルトの名無しさん
2006/12/04(月) 10:56:180086デフォルトの名無しさん
2006/12/04(月) 10:56:540087デフォルトの名無しさん
2006/12/04(月) 20:00:54やっぱ詰め込みすぎですかね?
ソース整理してくれって言われてて
とりあえずライン数集計したんだけど。
0088デフォルトの名無しさん
2006/12/04(月) 20:16:420089デフォルトの名無しさん
2006/12/04(月) 20:48:38009087
2006/12/04(月) 21:32:55うーん、詳しくはいえないんだけど、
数値計算系の業務用プログラムなんだ。
入ったばっかで何やってるかわからないから、
10Kが妥当かどうかも判断つかないよ。
0091デフォルトの名無しさん
2006/12/04(月) 21:41:500092デフォルトの名無しさん
2006/12/04(月) 21:43:010093デフォルトの名無しさん
2006/12/04(月) 21:51:36クラス同士の結合も相当強いし。。
しかし、数値計算に必要といわれればそれまでwww
0094デフォルトの名無しさん
2006/12/04(月) 23:38:50困るねそういうの。
0095デフォルトの名無しさん
2006/12/05(火) 00:15:35(どうもconst変数の値がいつのまにか変わっちゃうらしい)
全クラスでコピーコンストラクタとコピー代入演算子が書かれてないんだ。
(デストラクタも宣言しただけ)
このあたりって、関係あるかな???
0096デフォルトの名無しさん
2006/12/05(火) 00:23:580097デフォルトの名無しさん
2006/12/05(火) 00:32:42あ、それもありうるかも
なんせソースが長いからどっかでやってるかな。。
明日調べてみます。ありが�d!!!
0098デフォルトの名無しさん
2006/12/05(火) 00:39:58多くのgetter/setterはmember変数に対しての操作になると思います。
例えば、int GetX() constとvoid SetX(int)です。
で、逆に、member変数に対して操作しないような関数は、
GetやSetっていう名前をつけるのは避けたほうがいいんでしょうか。
今制御のprogram書いてるんですけど、
制御する機器の状態(シリアル接続)を問い合わせるのに、
GetMode()とかやってどういうモードで稼働しているかとか、
そういう関数にGetを使うのは慣習違反ではないですか?
0099デフォルトの名無しさん
2006/12/05(火) 00:46:11むしろメンバ変数かそうでないかでgetってつけるかつけないか
決めちゃったらカプセル化という意味でも変だと思う
0100デフォルトの名無しさん
2006/12/05(火) 02:40:39そのクラスが
外からみてどう振舞って欲しいか、どんな操作があればよいか
というのと、
メンバ変数としてどう持つか
というのは分けて考える。
そうすれば疑問は沸かない。
広い意味でのインターフェースと実装の分離、だよ。
0101デフォルトの名無しさん
2006/12/05(火) 07:14:01public:
A(){};
void F(){ ... };
};
というクラスを作り、
A a1;
A a2();
とインスタンス化したのですが、
a2の方は「プロトタイプされている関数が呼び出されませんでした」と警告が出ました
続けて、
A a2();
a2.F();
とやると、Fが定義されてないとなってコンパイルエラーがでました。
以前、コンストラクタで()をつけても、つけなくても同じと聞いたのですが、やはり違うんですか?
VisualStudio.2003を使ってます
0102デフォルトの名無しさん
2006/12/05(火) 07:18:47それだと「引数を受け取らず、Aを返す関数の宣言」と解釈されてしまってる。
0103デフォルトの名無しさん
2006/12/05(火) 10:17:03標準ライブラリに習って、メンバの状態取得には何もつけない。
[オブジェクト].名詞(); // げった
[オブジェクト].動詞(値) // せった。 若しくは [オブジェクト].set_名詞(値)
でアクセス。たとえば mode なら
int md = object.mode();
object.change_mode(md);
サイズなら、
size_t sz = object.size();
object.resize(sz);
みたいな。
0104デフォルトの名無しさん
2006/12/05(火) 10:20:26void member(type value);
でいいじゃん。
0105デフォルトの名無しさん
2006/12/05(火) 13:49:47bind に渡すときとか面倒なうえに可読性もガタ落ちするんで、やめてください。
010698
2006/12/05(火) 14:47:40特にこれといった流儀はなさそうですが、
>>99-100
そのclassを使う側からしてみれば、
member変数なのかも分からないですもんね。
そうすると、member変数が持つ状態のか、
制御する装置自身が持っている状態なのか、
気にする必要はないような気がします。
>>103
こっちでも確かにそうだなーと思ってしまう。
どっちにするか未定ですが、参考になりました。
>>104
きもす。
0107デフォルトの名無しさん
2006/12/05(火) 16:16:10newで動的に領域を確保しているのですが、
この領域をいくつものクラス間で利用しているため、
どのクラスでdeleteすればいいかが分かりません。
最後に使用しているクラスを判断するみたいな関数とか
ありませんでしょうか?
0108デフォルトの名無しさん
2006/12/05(火) 16:19:23その領域を使用しているクラスを表すカウンタを作る
0109デフォルトの名無しさん
2006/12/05(火) 16:21:03ってのはともかく、スマートポインタとかリファレンスカウントとかって言葉で調べろ。
0110デフォルトの名無しさん
2006/12/05(火) 16:21:30その手があったか!!
サンクス
0111デフォルトの名無しさん
2006/12/05(火) 16:25:41すみません、まだC++始めたばっかりで
理解できていない部分が多くて(´Д⊂グスン
精進しますm(_ _)m
0112デフォルトの名無しさん
2006/12/05(火) 17:40:40ttp://www.techreview.com/InfoTech/17831/
0113デフォルトの名無しさん
2006/12/05(火) 17:46:230114デフォルトの名無しさん
2006/12/05(火) 17:57:00「このネタ面白いでしょでしょ?」なバカが。
氏ねばいいのに
0115デフォルトの名無しさん
2006/12/05(火) 18:38:420116デフォルトの名無しさん
2006/12/05(火) 19:45:17とありますが、ファイル入出力で一番処理効率がいいのって
fopen系ですよね?
fstream系のオブジェクトで数メガのファイルを開くとどうもモッサリします…
普通にこんな感じなんですが。
ifstream in("file", ios::binary);
in.seekg(ios::end);
int size = in.tellg();
in.seekg(ios::beg);
char pbuf = new char[size];
in.read(pbuf, size);
in.close();
delete []pbuf;
0117デフォルトの名無しさん
2006/12/05(火) 20:04:10実装による
0118デフォルトの名無しさん
2006/12/05(火) 20:07:31そうですよねぇ…
VC++6.0なんですけど、>>116コードがかなりモッサリしてたんで…
0119デフォルトの名無しさん
2006/12/05(火) 20:24:100120デフォルトの名無しさん
2006/12/05(火) 22:41:13>>112はいつものネタじゃないぞw
ttp://slashdot.jp/~El-ahrairah/journal/384164
日本語訳
0121デフォルトの名無しさん
2006/12/05(火) 22:57:06「プログラミング言語C」 難しい、分からない
「初めてのC」 全然分からない
「新・詳説C言語」 分かりやすくてサイコー
こんな感じだったんだけど。
「新・詳説C言語」のようなC++の解説サイト(日本語限定)、なかなか見つからない。
色々ぐぐってみて、javaでは今のところ、
Javaの道(Java入門・リファレンス)
ttp://www.javaroad.jp/
が一番イメージに近いんだけど。
0122デフォルトの名無しさん
2006/12/05(火) 22:59:56〜だけど。〜だけど。
何が言いたいのか分からない。
0123デフォルトの名無しさん
2006/12/05(火) 23:22:44絶対必要になるし。
0124デフォルトの名無しさん
2006/12/06(水) 04:13:200125デフォルトの名無しさん
2006/12/06(水) 04:16:000126デフォルトの名無しさん
2006/12/06(水) 13:37:44例えば、これ。
class A;
void Func(A obj);
int main() {
Func( A() ); //コンストラクタを直接呼んで一時オブジェクトを生成
return 0;
}
後、一時オブジェクトはスタックに作られるんでしょうか?
0127デフォルトの名無しさん
2006/12/06(水) 13:45:08必ずコピーが発生しないわけではない。
詳細は覚えてないけど、ダイレクトで渡してもいいよっていうルールがあるだけ。
場合によってはレジスタ上にしか存在しないなんて例外もあるかもしれんが、
基本的に一時オブジェクトはスタック上に作られる。
0128デフォルトの名無しさん
2006/12/06(水) 13:59:280129126
2006/12/06(水) 14:18:24>必ずコピーが発生しないわけではない。
ということは、一時オブジェクトからさらに引数のために
スタックにコピーされることもあるってことですよね。
そうなると、引数にするものが存在するのにコピーして無駄
な作業してるじゃないですか。
0130デフォルトの名無しさん
2006/12/06(水) 15:54:14そして>>127へ戻る。
最適化で無駄なコピーを除去してよいという規則がある。
0131126
2006/12/06(水) 16:32:33回答ありがとうございました。
0132デフォルトの名無しさん
2006/12/06(水) 21:18:33どちらにするかの判断はコンパイラに任されている。
0133デフォルトの名無しさん
2006/12/06(水) 21:45:300134126
2006/12/06(水) 22:30:35でも、テストコードを作るために直接コンストラクタを呼んで一時オブジェクト使えばコードを書く量が減るから
いいなぁ〜って思ったけど、あまりやらない方がいいですね。
0135デフォルトの名無しさん
2006/12/06(水) 22:51:45わかりやすさを損ねない限り
0136デフォルトの名無しさん
2006/12/06(水) 23:04:110137デフォルトの名無しさん
2006/12/07(木) 10:16:50その辺は次の標準ではやり方が変わる可能性が高い。
rvalue reference, move semantics辺りで。
0138デフォルトの名無しさん
2006/12/07(木) 11:04:590139デフォルトの名無しさん
2006/12/10(日) 13:37:08http://www002.upp.so-net.ne.jp/mif/cpp/
0140デフォルトの名無しさん
2006/12/10(日) 14:14:28それでなくても C PreProcessor との曖昧さが問題だろ。
0141デフォルトの名無しさん
2006/12/10(日) 17:29:51{
int a()
{
retrun 0;
}
}
using A::a();
int main()
{
a();
retrun 0;
}
こう書いてるノートがあるんですが、
これって間違いですよね。
正しくは
using A::a;
じゃないんですか?
0142デフォルトの名無しさん
2006/12/10(日) 17:42:270143デフォルトの名無しさん
2006/12/10(日) 17:47:50using A::a();
でコンパイルできなくて
A::a;
だとできたので聞いたんです。
0144デフォルトの名無しさん
2006/12/10(日) 17:52:300145デフォルトの名無しさん
2006/12/10(日) 17:54:32オマエのコンパイラは retrun がコンパイルできるんだな。それ C++ じゃないよ。
0146デフォルトの名無しさん
2006/12/10(日) 17:58:52return の間違いだろ。スルーしとけばよくね?
0147デフォルトの名無しさん
2006/12/10(日) 18:00:02return の間違いです。
0148デフォルトの名無しさん
2006/12/10(日) 18:12:06いや、誉めてもらいたいんだよきっと
0149デフォルトの名無しさん
2006/12/10(日) 18:34:12分からないにも関わらず、C++の仕事やんなきゃいけなくって、
困ってます。助けてください。(ほんとにわけわかってません)
[質問]
MFCでつくったDLLって、MFCでつくったEXEからしか
呼べないんでしょうか? MFC以外のC++のEXEから呼ぶ
方法があれば、教えて下さい。
0150デフォルトの名無しさん
2006/12/10(日) 18:39:40スレ違い。
バカはプログラムするな。分からないと自覚してるんなら仕事は断れ。
0151デフォルトの名無しさん
2006/12/10(日) 18:41:09■MFC相談室 mfc17d.dll■
http://pc8.2ch.net/test/read.cgi/tech/1164073111/
0152デフォルトの名無しさん
2006/12/10(日) 18:49:01#include <iostream>
using namespace std;
namespace x
{
a(int,int);
int i;
int j;
int k;
}
int x::a(int k, int j)
{
cout << k+j << endl;
return 0;
}
int main()
{
return 0;
}
これがコンパイルできるのですが、
関数宣言したとき、戻り値書かなかった場合、自動的にintになるんですか。
0153デフォルトの名無しさん
2006/12/10(日) 18:54:58暗黙の宣言でググれ。
Cやその前身のBの頃の名残り。
0154デフォルトの名無しさん
2006/12/10(日) 18:56:50シーはネトゲに向いてますか?
どんなネトゲに使われてますか?
将来ネトゲ作るために、少しふれておきたいです
どれがいいのか悩んでます
0155デフォルトの名無しさん
2006/12/10(日) 18:57:04もしお客だったとして、こんな奴の作ったもの使いたくない
0156デフォルトの名無しさん
2006/12/10(日) 18:57:440157デフォルトの名無しさん
2006/12/10(日) 19:11:00typedef struct tree{
int value;
..any
struct tree *next;
struct tree *child;
struct tree *parent;
struct tree *prev;
}Tree;
このようなデータ構造をC++側でラップする場合みんなどうやってラップしますか?
0158デフォルトの名無しさん
2006/12/10(日) 19:17:57コンパイラ何使ってる? C++ では暗黙の型指定は無くなってるはず。
0159デフォルトの名無しさん
2006/12/10(日) 19:18:43ラップする目的がわからないと、何も決まらない。
0160デフォルトの名無しさん
2006/12/10(日) 19:29:03AIXとHPでほぼ同じ構造体を持つライブラリがあります。
わざわざ呼び出すのに、ライブラリに依存して呼び出したくないので
ラップして、隠蔽したいなぁと考えています。
0161デフォルトの名無しさん
2006/12/10(日) 19:45:57共通のインターフェースを純粋仮想関数としたクラスを書いて、
それぞれの実装(派生クラス)にラップする構造体を持たせる
って感じが基本かなぁ。
0162デフォルトの名無しさん
2006/12/10(日) 19:46:05Borland C++ 5.5.1
拡張子で判断してくれてるんだと思ってたけど、
なんかオプション必要?
0163デフォルトの名無しさん
2006/12/10(日) 19:48:39namespace でエラーが出ないなら、 C++ としてコンパイルしてるはず。
どうせ C の実装をそのまま使いまわしちゃってるんだろう。
ここはソースを直すべき。
0164デフォルトの名無しさん
2006/12/10(日) 20:16:52どうも。
0165デフォルトの名無しさん
2006/12/10(日) 21:40:38「標準準拠のプログラムと区別がつかない限り、コンパイラは標準の
技術的要求と異なることをしても良い」
とあるのですが、意味がよく分かりません。
例えばコンストラクタで画面に文字を出力しているときなどでは、
コピーが省略されると結果が変わってくると思うのですが
0166デフォルトの名無しさん
2006/12/10(日) 21:53:460167デフォルトの名無しさん
2006/12/10(日) 22:01:27第何項の話?
0168デフォルトの名無しさん
2006/12/10(日) 22:02:57http://cpptips.hyperformix.com/cpptips/ret_val_opt.txt
>>165
その辺りの非効率改善と意味論的錯綜は、
RVOで何とか誤魔化そうとしたけど、誤魔化しきれなかったので、
次の規格で、move semantics, rvalue referenceってのを入れようとしてます。
A Brief Introduction to Rvalue References
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n2027.html
0169デフォルトの名無しさん
2006/12/10(日) 22:03:57書籍のことを言っているのなら187P
0170デフォルトの名無しさん
2006/12/10(日) 22:06:3212.8.15じゃん。
12.8 Copying Class Objects
0171デフォルトの名無しさん
2006/12/10(日) 22:07:37要するにいい加減になってるということですか?
(rvalue referenceは是非とも入ってほしいですね)
0173デフォルトの名無しさん
2006/12/10(日) 22:10:39まああなたの>>165の疑問は正しい感覚であるということになると思います。
良く考えて読んでいる証拠かと。
12.8.15も読んどいてください。JIS規格はただで読めるので。
0174デフォルトの名無しさん
2006/12/10(日) 22:25:20ごめんなさい.英語版しか持ってないんです…….
>172
曖昧な質問ですいません.書籍の項目番号を聞いてるつもりでした.
>165
上のレスで挙げられた規格の項目 12.8/15 にありますけれど
"even if the copy constructor and/or destructor for the object have side effects."
でも [N]RVO は許されていて
>例えばコンストラクタで画面に文字を出力しているとき
では RVO が機能しているかどうかで画面出力が変化します.
逆に,画面出力の回数で RVO が効いているかどうかを確認することができます.
ただし constructor/destructor に副作用があるかどうかで,コンパイラの
RVO に関する判断が変わる可能性も否定できませんけれど.
0175デフォルトの名無しさん
2006/12/10(日) 22:30:33私も書いた後でそんな気がしてましたw
「最適化と効率」の「24.constによる最適化」という項の、
Guru質問3の解説にあります
0176デフォルトの名無しさん
2006/12/10(日) 22:38:42今,該当の項目読みましたけれど,ここは RVO とは直接の関係が無いと思います.
なので書いてあるとおり, z のコピーコンストラクタで副作用が発生するなら
copy を省略することはできないです (ここが RVO との差異).
0177デフォルトの名無しさん
2006/12/11(月) 12:41:05関数の引数に渡されたインスタンスが、
ある複数のクラスを継承しているかをRTTIも用いずに判別する方法はあるでしょうか?
その判別が可能であれば、その後に各クラスのインタフェースでメソッドを呼びたいのです。
今のところ、苦肉の策として
class Hoge : public A , B;というクラスの場合、
void Func(A a,B b) のように含まれる型分の引数を増やした関数を作り、
全てに同じインスタンスオブジェクトを指定してもらうようにしています。
0178デフォルトの名無しさん
2006/12/11(月) 13:11:54MFCだとRUNTIME_CLASSなんてのがあったね。
0179デフォルトの名無しさん
2006/12/11(月) 13:13:32「複数のクラス」が全部空のインターフェースクラスなら、
単純にまとめたインターフェースクラスを取ればいいんだろうなぁ。
現状で実装が混ざってるんなら、そいつら切り離したら良いんじゃない?
あるいは、
class AB
{
virtual A& A() = 0;
virtual B& B() = 0;
};
で
class Hoge : public A, B, AB
にして
void Func(AB&);
とか。
0180デフォルトの名無しさん
2006/12/11(月) 13:42:36B b;
};
class B{
A a;
};
としたいんですが、やはりコンパイルエラーです。
どうすれば良いんでしょうか。
0181デフォルトの名無しさん
2006/12/11(月) 13:57:31それ無限入れ子になるから無理
0182デフォルトの名無しさん
2006/12/11(月) 14:01:42B*b;
};
class B{
A*a;
};
実はこれがしたいのを適当に省略してしまいました。
voidで我慢しないといけないんでしょうか。
0183デフォルトの名無しさん
2006/12/11(月) 14:04:29class A{
B*b;
};
class B{
A*a;
};
0184デフォルトの名無しさん
2006/12/11(月) 14:05:010185デフォルトの名無しさん
2006/12/11(月) 21:29:28class Q { public: virtual bool QueryClass( uintptr_t cid, void * & pSelf ) = 0; }
template<typename T> uintptr_t CLSID()
{
static T * dummy = 0;
return reinterpret_cast<uintptr_t>(&dummy);
}
class A { public: static uintptr_t CID() { return CLSID<A>() } ... };
class B { public: static uintptr_t CID() { return CLSID<B>(); } ... };
class AB : public A, public B, public Q {
public:
static int CID() { return CLSID<AB>(); }
bool QueryClass( uintptr_t cid, void * & pSelf ){
pSelf = 0;
if( cid == A::CID() || cid == B::CID() || cid == AB::CID() )
pSelf = this;
return pSelf != 0;
}
};
0186デフォルトの名無しさん
2006/12/11(月) 22:47:22流石template
0187デフォルトの名無しさん
2006/12/12(火) 01:21:12小さい頃からプログラマーになりたくて中学校のときに中学生なりに勉強はしてたけど
普通の勉強が嫌いでプログラムの勉強ばっかりしてたら工業高校にいけなくて結局普通高に行った
学校は普通の授業ばかりでやる気も出ずに中退
プログラマーの夢も諦めてしばらくNEETやってたけどやっぱり親に頼りっきりってのも問題だと思って
もう一度プログラムの勉強始めてみた
でも中卒でプログラマーやPC関連の職に就けるとは思えない・・・
もし望みがまったく無いなら今のうちに諦めて別の職業を探そうかなと・・・
今から勉強をがんばったとして望みはありますか?
大検も一応受けようと思ってます
0188デフォルトの名無しさん
2006/12/12(火) 01:26:26数学も英語も必要になるのでどうにかなっただろう
君はバカなのだ
逆説的だが君はプログラマに向いている
望みはある
0189デフォルトの名無しさん
2006/12/12(火) 01:52:26数学も英語も一応使う部分は勉強して理解してたけど
その時の授業で使われないから意味が無かった・・・
好きなことに関しては勉強意欲もあるし長時間できるけど
国語や社会などの勉強は10分も出来ない・・・やる気が出ない・・・極端すぎた
就職する望みがあるならこのまま勉強続けたいと思います
とりあえずCとJavaかな・・・
ありがとうございましたw
0190デフォルトの名無しさん
2006/12/12(火) 02:14:220191デフォルトの名無しさん
2006/12/12(火) 02:27:080192デフォルトの名無しさん
2006/12/12(火) 02:35:30正攻法で行っても、実力を評価される前に「足切り」されるのがオチ。
就職希望なら自分の実力を相手にはっきり示せる武器をまずは用意しろ、話はそれからだ。
あと、なにも就職することだけが職業プログラマへの道ではない。
0193デフォルトの名無しさん
2006/12/12(火) 02:46:57QueryClass の結果は戻り値使えばいいんじゃないの?
CLSID にある dummy の型は char const で十分だね。
uintptr_t を使ってる意味が分からない。 void const* を typedef すれば十分じゃないの?
とか、いろいろ突っ込みどころがあって気になったけど、面倒になったからあとはいいや。
>>186
これ、たぶん無駄な記述が多いから真似しないほうがいいよ。
0194デフォルトの名無しさん
2006/12/12(火) 07:32:29動的に3次元配列のメモリをauto_ptr<>を使って確保したんですけど、
どうしたらいいのか、わかりません。
どうしたらいいんでしょうか?
0195デフォルトの名無しさん
2006/12/12(火) 07:44:40確保したんだったら、利用すれば?
利用するために確保したんでしょ?
0196デフォルトの名無しさん
2006/12/12(火) 07:51:220197デフォルトの名無しさん
2006/12/12(火) 09:32:34boostにmulti_arrayというのがある
boost::multi_array<int, 3> ary(boost::extents[10][20][30]);
ary[0][1][2] = 123;
こんな感じで使える
0198デフォルトの名無しさん
2006/12/12(火) 11:47:040199デフォルトの名無しさん
2006/12/12(火) 11:52:38我慢せずにどうぞ
0200デフォルトの名無しさん
2006/12/12(火) 12:23:14template<int _I>とかって存在理由がよくわからない。
テンプレートクラスなんかでもメンバ変数かなんかに保持してちゃだめなのかな。
0201デフォルトの名無しさん
2006/12/12(火) 12:58:32boost::lambdaでも読んで勉強してはどうか?
0202デフォルトの名無しさん
2006/12/12(火) 13:05:48配列の要素数のような定数式が要求される部分でもパラメータ化できる。
0203デフォルトの名無しさん
2006/12/12(火) 16:43:17引数に渡された配列の要素数がゲットできる。
0204デフォルトの名無しさん
2006/12/12(火) 17:18:160205デフォルトの名無しさん
2006/12/12(火) 18:15:24めんどくさがらずに書いていただきたい。
0206デフォルトの名無しさん
2006/12/12(火) 18:16:050207デフォルトの名無しさん
2006/12/12(火) 18:26:00コンパイラに無茶な仕事をさせ、コンパイル時間を大幅に引き伸ばすことができる。
0208デフォルトの名無しさん
2006/12/12(火) 21:30:15C++学習者に意味のわからない奇妙な構文を浴びせ、
混乱に陥れる事が出来る。
0209デフォルトの名無しさん
2006/12/13(水) 00:44:04じゃ、書いてみる。
定型になっている CID() の定義を繰り返すのは無駄だろ。
QueryClass() の実装と継承関係に関連が無いのでまったく信用できない。
というわけで、そもそも >>177 への回答になっていなかったわけだ。
どうでもいいぜ。
0210デフォルトの名無しさん
2006/12/13(水) 02:15:49何か問題解くためのソースをゼロから書きたいって思ったとき
完成するまでどのくらいの時間かかってんの?
たとえば、どんな問題でもいいけど、ソートとか。
やっぱり頭の中で簡単にアルゴリズムからソース生成できるのかな。
0211194
2006/12/13(水) 02:59:06わかりました!
ありがとうございました!
boostですか。初めて見ましたw
これからそれについて勉強してみます。
ありがとうございました!
0212デフォルトの名無しさん
2006/12/13(水) 10:50:10void型をサポート可能にしてしまうと、operator*()が実装出来ずに困っています。
error C2182: '*' : 'void' 型が不適切に使用されています。
どのように解決すればよいでしょうか?ご教授下さい。
0213デフォルトの名無しさん
2006/12/13(水) 11:11:530214デフォルトの名無しさん
2006/12/13(水) 12:14:07なるほと、こんなときの特殊化でしたね。
ありがとうございました。
0215デフォルトの名無しさん
2006/12/13(水) 15:50:23ソートだと、STLとかのライブラリに頼り切ってるから
全部自分で書こうとすると悩むかも。クイックソートってどうやるんだっけ?とか。
簡単な問題なら、大まかなアルゴリズムがパッと思い浮かぶ。
で、もっとスマートにできないかとか、これで合ってるのかとかちょっと考える。
アルゴリズムが固まればコードに落とすのは簡単。その通りに書けばいいだけだし。
0216デフォルトの名無しさん
2006/12/13(水) 17:10:32スレ違いです。
0217デフォルトの名無しさん
2006/12/13(水) 17:54:54template<typename T> int function(vector<T> vec)
{
・・・
return 0;
}
int main(){
vector<int> vec;
function<int>(vec);
return 0;
}
このような感じだと
「function(class vector<int,alloc<int>>)が定義されていない」
といった感じのエラーが出てしまいます。
型がまだわからないvectorを引数に取る関数を定義するには
どうすればいいのでしょうか?
0218デフォルトの名無しさん
2006/12/13(水) 18:15:02コンパイルできたけど?
includeかnamespace忘れてない?
0219デフォルトの名無しさん
2006/12/13(水) 19:11:37ちなみにコンパイラは何でしょう?
#include <vector>
using namespace std;
と冒頭で打ってるので大丈夫だと思うのですが。
0220デフォルトの名無しさん
2006/12/13(水) 19:16:43LinuxでC++を使う場合、開発環境はEcrips一択でしょうか?
他に便利なものがあれば教えてください
0221デフォルトの名無しさん
2006/12/13(水) 19:17:05gcc,vc,bcc
エラーがでる最小限のソース晒してくれ
0223219
2006/12/13(水) 20:11:00#include <vector>
using namespace std;
// default
template<typename T>
int func(T data);
// int
template<>
int func<int*>(int* data);
// vector
template<typename A>
int func<vector<A>*>(vector<A>* data);
// int
int func<int*>(int* data){
return 0;
}
// vector
template<typename A>
int func(vector<A>* data){
return 0;
}
int main(){
vector<int> ivec;
func(&ivec);
vector<float> fvec;
func(&fvec);
int i;
func(&i);
return 0;
}
0224219
2006/12/13(水) 20:12:01test.cpp(12) : error C2768: 'func' : 明示的なテンプレート引数を使用することはできません。
となってしまいます。
型未定ベクタの特殊化をしたいのでが、うまい方法が分からないです。
何かいい方法はありませんでしょうか?
0225デフォルトの名無しさん
2006/12/13(水) 20:21:410226デフォルトの名無しさん
2006/12/13(水) 20:28:38誘導
http://pc8.2ch.net/test/read.cgi/linux/1039282447/
0227デフォルトの名無しさん
2006/12/13(水) 20:35:57templateの特殊化はよく知らないのだけど、コンパイルできるように変えてみた
ただコンパイル通るようにしただけで、たぶん求めてるものと違うと思う
#include <vector>
using namespace std;
// default
template<typename T>
int func(T data);
// int
template<>
int func<int*>(int* data){
return 0;
}
// vector
template<typename A>
int func(vector<A>* data){
return 0;
}
int main(){
vector<int> ivec;
func(&ivec);
vector<float> fvec;
func(&fvec);
int i;
func(&i);
return 0;
}
0228219
2006/12/13(水) 20:57:12それでコンパイル通りました。そんな感じで色々試してみます。
携帯からなのでアンカー省略しますが、みなさんありがとうございました。
0229デフォルトの名無しさん
2006/12/13(水) 21:08:560230デフォルトの名無しさん
2006/12/13(水) 21:11:140231デフォルトの名無しさん
2006/12/13(水) 21:14:51ここの話題とは外れているんですけど・・・
0232デフォルトの名無しさん
2006/12/13(水) 21:21:21ここでやれ
http://pc8.2ch.net/test/read.cgi/tech/1160751859/
0233デフォルトの名無しさん
2006/12/13(水) 21:23:570234デフォルトの名無しさん
2006/12/13(水) 21:53:36物理メモリ1GBのマシンで走らせると、
スワップで死ぬほど遅くなります。。
スワップ走らせないで、物理メモリのみを確保するにはどうしたらいいんですか?
WinXPです
0235デフォルトの名無しさん
2006/12/13(水) 21:55:44XPは、カーネルが、100MB以上のメモリを必要とするが、どこから1GBのメモリは湧き出てくるのかね?
0236デフォルトの名無しさん
2006/12/13(水) 21:56:52仮想メモリを切っておく
ってのは冗談としてWin32API使わないと出来ないかも
0237デフォルトの名無しさん
2006/12/13(水) 22:30:02会社の共有スペースにメモリが落ちてます
>>236
そうですか。。。すれ違いですみません
0238デフォルトの名無しさん
2006/12/13(水) 22:54:13AWEはあまり使いやすいとは思えない。
大抵の用途ではオーバースペックだし。
そもそもAWEを有効にするには、BOOT.INIを変更する必要があるし。
0239デフォルトの名無しさん
2006/12/13(水) 22:55:080240デフォルトの名無しさん
2006/12/13(水) 23:15:58PCの知識が不足気味な奴って結構いるよな
0241デフォルトの名無しさん
2006/12/13(水) 23:25:41ぷりぷり
0242デフォルトの名無しさん
2006/12/13(水) 23:28:12クズは死になさい
0243デフォルトの名無しさん
2006/12/13(水) 23:32:01ありがとうございます。
AWE調べてみます。
>>240さん
糞に糞と言われたくありません。
0244デフォルトの名無しさん
2006/12/13(水) 23:37:19うんこ
0245デフォルトの名無しさん
2006/12/13(水) 23:41:08( ・∀・)つ三三三三三● ウンコクラエ!!
0246デフォルトの名無しさん
2006/12/13(水) 23:51:100247デフォルトの名無しさん
2006/12/13(水) 23:51:410248デフォルトの名無しさん
2006/12/13(水) 23:52:33いちいち構うな。
0249デフォルトの名無しさん
2006/12/13(水) 23:57:58●
0250デフォルトの名無しさん
2006/12/13(水) 23:59:000251デフォルトの名無しさん
2006/12/14(木) 00:00:27だれがうまい事ry
0252デフォルトの名無しさん
2006/12/14(木) 00:01:300253デフォルトの名無しさん
2006/12/14(木) 00:12:41責任は取りなさい。
0254デフォルトの名無しさん
2006/12/14(木) 00:17:480255デフォルトの名無しさん
2006/12/14(木) 00:27:000256デフォルトの名無しさん
2006/12/14(木) 01:02:55> といった感じのエラーが出てしまいます。
ずばりエラーメッセージそのものを張りなよ。
0258デフォルトの名無しさん
2006/12/14(木) 14:49:25*.hpp, *.cpp
のファイルはboostと同じ命名方法でclassを書いた
.hxx, cxx
適当な命名規則でむちゃくちゃ
が混在していて
A.hxx
A.hpp
A.cpp
で2つのヘッダーに分けるか2重に名前定義するか迷ってるんだけど
なにかいい解決方法ない?
0259デフォルトの名無しさん
2006/12/14(木) 19:52:11よくわからんが、「適当な命名規則でむちゃくちゃ」を捨てればいいんじゃね?
0260sage
2006/12/14(木) 22:46:09int* num;
はポインタですよね、
int& num;
の意味は何でしょうか?
0261デフォルトの名無しさん
2006/12/14(木) 22:50:050262デフォルトの名無しさん
2006/12/14(木) 22:55:080263デフォルトの名無しさん
2006/12/14(木) 23:03:30あと、クラスのconstメンバや参照メンバ
の初期化ってどうすればいいのでしょうか?
0264デフォルトの名無しさん
2006/12/14(木) 23:07:390265デフォルトの名無しさん
2006/12/14(木) 23:14:20申し訳ないです。
明日図書館に行ってみます。
0266デフォルトの名無しさん
2006/12/14(木) 23:19:35お前以外にも山ほど同じような疑問を抱くやつは出てくるから答えるほうだって飽きてくる。
0267デフォルトの名無しさん
2006/12/14(木) 23:24:40コンストラクタの初期化リストで行う
というか行わないとエラーになるだろ
0268デフォルトの名無しさん
2006/12/14(木) 23:37:26コンストラクタ・デストラクタの中ではconstがないものとして扱われるはず。
勿論なるべく初期化リスト使うべきだろうが。
0269デフォルトの名無しさん
2006/12/14(木) 23:47:220270263
2006/12/14(木) 23:55:24明日図書館で調べてみます。
迷惑かけてしまって本当にすみませんでした。
0271デフォルトの名無しさん
2006/12/14(木) 23:58:00おい、嘘付くな。
コンストラクタ内でconstに代入しようとしたら当然のごとく
コンパイルエラーになったぞ。
staticでないconstは初期化リスト、staticの場合は外部で
定義するか、static const intだけは直接書いてもいいけど、
コンストラクタ内ではだめだろ。
0272268
2006/12/15(金) 00:21:48オブジェクト自身にconstが付いている場合とごっちゃにしていた。○| ̄|_
0273デフォルトの名無しさん
2006/12/15(金) 00:38:44>オブジェクト自身にconstが付いている場合とごっちゃにしていた。○| ̄|_
どういうこと?
0274デフォルトの名無しさん
2006/12/15(金) 03:23:43異常終了っていうんでしょうか?強制的に終了しました。
int data[1418544]も一気に確保する事ってできないようになってるんでしょうか?
0275デフォルトの名無しさん
2006/12/15(金) 03:42:04お前がMS-Windowsを使っているなら、デフォルトのスタックは1MBだ。
後は分かるな?
0276デフォルトの名無しさん
2006/12/15(金) 04:14:41?! そうだったんですか!
分けなくてはならないって事でしょうか?
どうしたらいいんでしょうか?
0277デフォルトの名無しさん
2006/12/15(金) 05:00:380278デフォルトの名無しさん
2006/12/15(金) 05:19:20ありがとうございました!
0279デフォルトの名無しさん
2006/12/15(金) 13:16:01基礎とその基礎を使った問題が載ってる本てあるんでしょうか?
何かお勧めの本あったら教えてください
0280デフォルトの名無しさん
2006/12/15(金) 13:25:150281デフォルトの名無しさん
2006/12/15(金) 13:42:560282デフォルトの名無しさん
2006/12/15(金) 15:45:020283デフォルトの名無しさん
2006/12/15(金) 16:02:30ポインタを渡しても自動的にポインタが指すインスタンスが
シリアライズされますよね?
あれってどうやって、ポインタか否か判別してるんですか?
0284デフォルトの名無しさん
2006/12/15(金) 16:43:37ソース嫁。
0285デフォルトの名無しさん
2006/12/15(金) 17:03:290286デフォルトの名無しさん
2006/12/15(金) 17:23:590287デフォルトの名無しさん
2006/12/15(金) 18:12:56読んでみました。
extended_type_infoとかあやしいんですが、
ややこしいですね…
>>285
ブースト内検索してみましたが
出てこなかったです。
>>286
う〜ん。見た感じserialize関数はテンプレート使ってないです。
最初それでやってたんですが、記述量が無駄に増えてスマートにならなかったので、
boostはどうしてるのか気になったんです。
0288デフォルトの名無しさん
2006/12/15(金) 18:14:180289デフォルトの名無しさん
2006/12/15(金) 18:19:13ありがとです。
調べてみます。
0290デフォルトの名無しさん
2006/12/15(金) 20:05:18画面に
continue finish
のようなのを用意しておき、方向キーの「←」「→」で、
選択した方されたほうを、括弧([ ])で
continue [finish]
のように表示させて、enterキーを押すと
決定される(上の場合はループを抜ける)ようにしたいのですが、
どうしたらいいのでしょうか?
#include <iostream>
using namespace std;
void main()
{
char cInput = 'n';
do {
cout << "終了する場合は y を入力\n";
cin >> cInput;
} while ( cInput != 'y' );
return 0;
}
0291デフォルトの名無しさん
2006/12/15(金) 20:13:090292デフォルトの名無しさん
2006/12/15(金) 20:16:16はい。
0293デフォルトの名無しさん
2006/12/15(金) 20:16:400294デフォルトの名無しさん
2006/12/15(金) 20:35:380295デフォルトの名無しさん
2006/12/15(金) 22:27:38template< class T, class T2 > class Hoge {
public:
map< T, T2 > _map;
map< T, T2 >::iterator GetBegin(){ return _map.begin(); }
};
と書くと、"expected ';' before GetBeginとエラーになります。
map< T, T2 >::iteratorって文法違反なのでしょうか?
0296デフォルトの名無しさん
2006/12/15(金) 22:29:260297デフォルトの名無しさん
2006/12/15(金) 22:31:40出来ました。typename必要だったのですね・・
VSだとiterator前にtypename無くてもOKだったので気づきませんでした
0298デフォルトの名無しさん
2006/12/16(土) 05:22:59分かりやすくMakefileの書き方が載ってるサイトがあれば教えてください
0299デフォルトの名無しさん
2006/12/16(土) 06:25:55スレ違い……いや、鼬害だ。
Makefileは言語に関係なく書式が決まっている。先ずはmakeのマニュアルページでも見たまえ。
0300デフォルトの名無しさん
2006/12/16(土) 10:56:12UNIXプログラミングスレで答えておきました。
0301デフォルトの名無しさん
2006/12/16(土) 14:09:31鼬害(?)失礼しました。
>>300
ありがとうございました。
0302デフォルトの名無しさん
2006/12/16(土) 17:01:21ttp://pc8.2ch.net/test/read.cgi/tech/1029599472/
俺はmakeわけわかめだったからもうビルドツール自作した。
0303マリー
2006/12/17(日) 12:08:550304デフォルトの名無しさん
2006/12/17(日) 12:36:020305デフォルトの名無しさん
2006/12/18(月) 12:51:27が使ってるライブラリのどこかにあるみたいなんだけど
(max)って書くと避けられるとも聞いたのだが
(max) = #define max のこと?
0306デフォルトの名無しさん
2006/12/18(月) 12:53:570307デフォルトの名無しさん
2006/12/18(月) 13:33:03#undef max
でいいんじゃないか?
0308デフォルトの名無しさん
2006/12/18(月) 14:42:47()をつけるとマクロ展開が抑制される。
0309デフォルトの名無しさん
2006/12/18(月) 15:02:050310デフォルトの名無しさん
2006/12/19(火) 01:56:19引数つきの奴だけ、な。
0311デフォルトの名無しさん
2006/12/19(火) 09:02:06どうすればいいのでしょうか?
0312デフォルトの名無しさん
2006/12/19(火) 09:17:420313311
2006/12/19(火) 09:27:19本当にありがとうございました。
pubsetbuf、clearとかそれらしいものみてたけど
str()で取得できるのは知ってたんで
まさかstrで設定もできるとは...orz
io関係の命名則、意地悪すぎ...
0314デフォルトの名無しさん
2006/12/19(火) 18:15:310315デフォルトの名無しさん
2006/12/19(火) 18:20:46デバックのために、計算の途中結果を図でみたくなることがよくある
例えば
std::vector<double> a(100)
のヒストグラムを図でみたくなったりする
こういう場合に図示するのに使えるライブラリーとかないのでしょうか?
例えばこんな感じです
std::vector<double> a(100)
....
plot_hist(a);
wait_key(0);
0316デフォルトの名無しさん
2006/12/19(火) 18:36:07C++を使わずにRを使いましょう。
0317デフォルトの名無しさん
2006/12/19(火) 20:04:25enum{id_0,id_1,id_2};
static const std::map<int,char*> m ={
{id_0,"val0"},{id_1,"val1"},{id_2,"val2"}
};
キーと値のマッピング情報はコンパイル時に確定しているので、
わざわざ動的にmapを生成するのは無駄の様な
気がします・・
0318デフォルトの名無しさん
2006/12/19(火) 21:05:380319デフォルトの名無しさん
2006/12/19(火) 21:11:33vectorじゃなくてmapなんだから、きっとこんなenumなんだよ。たぶん。
enum ID {id_1= 10001, id_2 = 10001} ;
0320317
2006/12/19(火) 21:21:58今までは
struct foo{ int key,char* val };
foo[]={ {1,"one"},{3,"tree"},{5,"five"}};
してループでサーチしたりしてたんですが
せっかく標準で用意されてるんだからmap(set)を使えばサーチが楽じゃね?
と思ったわけです
0321デフォルトの名無しさん
2006/12/19(火) 21:36:060322デフォルトの名無しさん
2006/12/19(火) 23:19:32コピーコンストラクタとコピー代入演算子はどう書けばいいんでしょう。。。
0323デフォルトの名無しさん
2006/12/19(火) 23:27:16俺ならそのクラスをrm
0324デフォルトの名無しさん
2006/12/19(火) 23:40:10設計からやりなおせ
0325デフォルトの名無しさん
2006/12/19(火) 23:45:56設計やり直しって、
本当に効果あったことあります?
0326デフォルトの名無しさん
2006/12/19(火) 23:46:180327デフォルトの名無しさん
2006/12/19(火) 23:49:16先ずそのクラスの100個のメンバを4個に分けてそれぞれクラスとする。
次にその4個のクラスの平均25個のメンバを5個に分けてそれぞれクラスとする。
更に、20個+4個+1個のクラスについてコピーコンストラクタを用意すればいい。
0328デフォルトの名無しさん
2006/12/19(火) 23:52:22えーまじーー???
100個書くのは変わんないじゃんwww
0329デフォルトの名無しさん
2006/12/20(水) 00:01:310330デフォルトの名無しさん
2006/12/20(水) 00:03:57当然ある。
0331デフォルトの名無しさん
2006/12/20(水) 00:06:28メソッドは virtual void func() = 0; の様に宣言するとしても
コンストラクタはどうすればいいのでしょうか?
特定の型を引き受けるコンストラクタ、というのを用意しようとしたとき
その実装をサブクラスに要求するにはどうすればいいか、という事なんですが・・・
0332デフォルトの名無しさん
2006/12/20(水) 00:07:44コンストラクタは継承されないから、
変わりにgetInstanceとかを用意するとかかね
0333デフォルトの名無しさん
2006/12/20(水) 00:08:18全く同じ知識経験の人間がもう一度設計しても同じものになるのは当たり前。
問題点を把握してればそれなりに意味はある。
0334デフォルトの名無しさん
2006/12/20(水) 00:13:32C++の機能とか予約語の事じゃなくて
「欲しい型のデータを取るメソッドを用意しろ」ってことですよね、
要するにコンストラクタは使わないと
やっぱりそれしかないですか・・・
0335デフォルトの名無しさん
2006/12/20(水) 00:30:08public:
Hoge(int foo) {}
private:
Hoge(); //no implement
};
じゃダメ? >>334
0336デフォルトの名無しさん
2006/12/20(水) 01:09:59どうせ template で使うんだろ?なら concept を定義するんだ。
今のところ言語は何も助けちゃくれないけどな。
0337デフォルトの名無しさん
2006/12/20(水) 01:54:16これって規格ではどうなんですか?安全が保障されてます?
void *p = NULL;
delete p;
free(p);
0338デフォルトの名無しさん
2006/12/20(水) 01:55:210339デフォルトの名無しさん
2006/12/20(水) 02:02:12じゃあNULL判定しなくてもいいな。どうも。
0340デフォルトの名無しさん
2006/12/20(水) 02:10:010341デフォルトの名無しさん
2006/12/20(水) 02:16:50delete NULL; はコンパイルエラーになりましたよ。
(VC++6.0 Pro SP6)
0342デフォルトの名無しさん
2006/12/20(水) 07:32:28よーくかんがえろ。C++では
#define NULL 0
なので、文脈によってはポインタとして扱われない。キャストが要る。
0343デフォルトの名無しさん
2006/12/20(水) 08:49:480344デフォルトの名無しさん
2006/12/20(水) 09:09:200345デフォルトの名無しさん
2006/12/20(水) 09:16:010346デフォルトの名無しさん
2006/12/20(水) 18:02:50set<X> a;
a.insert(b);
のようなことをやると、
Core was generated by `XYZXYZ'.
Program terminated with signal 11, Segmentation fault.
#0 0x400000000002f320 in std::_Rb_tree<X, X, std::_Identity<X>, std::less<X>, std::allocator<X> >::insert_unique ()
(gdb) backtrace
#0 0x400000000002f320 in std::_Rb_tree<X, X, std::_Identity<X>, std::less<X>, std::allocator<X> >::insert_unique ()
#1 0x4000000000002aa0 in main??unw ()
のような感じでエラーになってしまうようです。
(完全に再現性のある小さいコードを用意することが
出来ませんでした。すみません。)
コンパイラはicc9.0で、gccだと問題なく動作します。
個人的にはsetのinsertでcoreを吐くというのは、
あまりないような気がするのですが、どういうことを
念頭におきながらデバッグすればよいでしょうか?
0347デフォルトの名無しさん
2006/12/20(水) 18:26:22すみません、どうやらスレ違いみたいですね。
ttp://pc8.2ch.net/test/read.cgi/tech/1160821240/l50
で質問させていただきます。
0348デフォルトの名無しさん
2006/12/20(水) 19:45:45CMyClassというクラスのcppファイル内で
#define FILEPATH L"C:\Test\File"
(中略)
void CMyClass::test
{
CString ss = FILEPATH;
}
というコードを記述してコンパイルすると
error C2065: 'INIFILEPATH' : 定義されていない識別子です。
というエラーが出てきてしまいます。#defineの使い方を
間違っているのでしょうか?であるならば正しい使い方を教えてください。
よろしくお願いします。
0349デフォルトの名無しさん
2006/12/20(水) 20:04:000350348
2006/12/20(水) 20:07:40すみません、名前間違っていたのを直しました。
ですがそれでも同じエラーが出てきてしまったんですけど
根本的になにか間違っているんでしょうか?
0351デフォルトの名無しさん
2006/12/20(水) 20:23:220352デフォルトの名無しさん
2006/12/20(水) 20:24:280353348
2006/12/20(水) 20:42:47ソースではなくヘッダーに記述したところ
コンパイル通りました。
お騒がせいたしましたm(_ _)m
0354デフォルトの名無しさん
2006/12/20(水) 20:46:320355デフォルトの名無しさん
2006/12/21(木) 01:16:59C++で定数つかうならconstで
あとVC++みたいなので
const WCHAR *const FILEPATH = L"C:\Test\File";
0356デフォルトの名無しさん
2006/12/21(木) 01:21:19const WCHAR *const FILEPATH = L"C:\\Test\\File";
だろう
0357デフォルトの名無しさん
2006/12/21(木) 02:08:59で返す方が多いようですが、そのような方はスレの皆様を混乱させるだけでなく
スレの雰囲気を崩しかねないのでお黙り下さい。
また質問者は回答者に知識を披露する場を与える貴重な存在なので、
質問者を見下した回答、あまりにも儀礼を欠いた回答も厳重に禁止いたします。
忙しい中、少ない時間の合間を縫って質問しに来てるわけですので、
その辺ご承知下さい。なお、当方が質問に対して有意義な答えであると
判断した方には評価いたしますので各自よく調べ、よく考え正確な回答をするように。
0358デフォルトの名無しさん
2006/12/21(木) 02:35:300359デフォルトの名無しさん
2006/12/21(木) 03:09:200360デフォルトの名無しさん
2006/12/21(木) 07:52:21const WCHAR FILEPATH[] = L"C:\\Test\\File";
だろう
0361デフォルトの名無しさん
2006/12/21(木) 15:15:07で.返.す.方.が.多.い.よ.う.で.す.が.、.そ.の.よ.う.な.方.は.ス.レ.の.皆.様.を.混.乱.さ.せ.る.だ.け.で.な.く
ス.レ.の.雰.囲.気.を.崩.し.か.ね.な.い.の.で.お.黙.り.下.さ.い.。
ま.た.質.問.者.は.回.答.者.に.知.識.を.披.露.す.る.場.を.与.え.る.貴.重.な.存.在.な.の.で.、
質.問.者.を.見.下.し.た.回.答.、.あ.ま.り.に.も.儀.礼.を.欠.い.た.回.答.も.厳.重.に.禁.止.い.た.し.ま.す.。
忙.し.い.中.、.少.な.い.時.間.の.合.間.を.縫.っ.て.質.問.し.に.来.て.る.わ.け.で.す.の.で.、
そ.の.辺.ご.承.知.下.さ.い.。.な.お.、.当.方.が.質.問.に.対.し.て.有.意.義.な.答.え.で.あ.る.と
判.断.し.た.方.に.は.評.価.い.た.し.ま.す.の.で.各.自.よ.く.調.べ.、.よ.く.考.え.正.確.な.回.答.を.す.る.よ.う.に.。
0362デフォルトの名無しさん
2006/12/21(木) 18:57:23template<class T> class Hoge{ /* ... */ };
template<class T, class U> class Hoge<T(U)>{ /* ... */ };
というコードを見たんですが、
T(U)という書き方はC++標準に適合しているのですか?
0363デフォルトの名無しさん
2006/12/21(木) 20:12:01とりあえずメソッド呼べるんだねー
(もちろんメンバにアクセスしないメソッドだけだけど)
0364デフォルトの名無しさん
2006/12/21(木) 20:22:59鼻から悪魔が出てるぞ
0365デフォルトの名無しさん
2006/12/21(木) 20:24:13T(U)は、U型を引数に取りT型を返す関数型。
>>363
静的メンバがなかった頃には、それで代用していたらしい。
今の規格では、たぶんそれをやるとどうなるかは未定義にしていると思う。
0367デフォルトの名無しさん
2006/12/21(木) 20:34:46newで確保したメモリに対して、
2回delete走らせると死ぬのはなぜですか?
0368デフォルトの名無しさん
2006/12/21(木) 20:40:240369デフォルトの名無しさん
2006/12/21(木) 20:42:03標準ライブラリのオンラインマニュアルはどのようにしたらみれるのでしょうか?
(日本語でも英語でも構いません)
0370デフォルトの名無しさん
2006/12/21(木) 20:45:10強いて言えば8.3.5@JIS X 3014:2003
>>365
deleteされても、deleteしたポインタを指す変数は、そこを指していると言う状態のままである。
そこで、2度目のdeleteを行うと、deleteされたはずの場所をdeleteしようとして、あらぬことになる。
原理的には1度目のdeleteの後で、そこを指す変数に0を代入しておけば2度目のdeleteでは、
ヌルポインタをdeleteすることになって落ちない(ヌルポインタのdeleteは何も起きないと定められている)。
勿論実際には、2度もdeleteするなと言う話になるが。
0371デフォルトの名無しさん
2006/12/21(木) 20:53:59丁寧なご説明
ありがとうございました。
0372デフォルトの名無しさん
2006/12/21(木) 20:55:27(メモリ直接上書きとconst_cast以外で)
0373デフォルトの名無しさん
2006/12/21(木) 20:57:030374デフォルトの名無しさん
2006/12/21(木) 20:59:45http://gcc.gnu.org/onlinedocs/libstdc++/libstdc++-html-USERS-3.4/index.html
0375デフォルトの名無しさん
2006/12/21(木) 21:16:35const_castは実際にはconstでないオブジェクトへのconstポインタのconstを外すのに使われるだけ
つまり、
int a = 0;
void f(const int* a){
*const_cast<int*>(a) = 1;
}
これはおk
const int a = 0;
void f(const int* a){
*const_cast<int*>(a) = 1;
}
未定義
0376デフォルトの名無しさん
2006/12/21(木) 21:20:19そこで auto_ptr ですよ。
0377デフォルトの名無しさん
2006/12/21(木) 23:56:10WinXP Pro
VC2005 SP1
RaiseException にて発生させたエラーを、ただの try でキャッチしたいのですが、
try {
0378377
2006/12/21(木) 23:59:20RaiseException にて発生させたエラーを、ただの try でキャッチしたいのですが、
catch (...)
だとキャッチ出来ます。さらに詳しい情報が欲しいため、catch の () の中に書くべき
コードがわかりません。そもそも、仕様上無理なものなのでしょうか?
ちなみに、__except では成功しました。
WinXP Pro
VC2005 SP1
コンパイルオプションで、「SEH の例外あり (/EHa)」を指定しています。
0379デフォルトの名無しさん
2006/12/22(金) 00:27:360381デフォルトの名無しさん
2006/12/22(金) 00:39:23Windowsの構造化例外をC++例外に変換する方法があるが
環境依存なのでスレ違い
0383デフォルトの名無しさん
2006/12/23(土) 14:57:35VC++6.0 WinXPProで開発を行っております。
ダイアログアプリの開発を行っており、そのアプリ上で、XPログオン用のユーザ名とパスワード
を利用者に打ち込ませています。このパスワードが正しいかどうかを、開発したプログラム上で
確認したいと思っているのですが、どのようにすればよろしいでしょうか。
0384デフォルトの名無しさん
2006/12/23(土) 15:06:20strcmp() でいいんじゃね?
っていうか、まずは自分で書け。
それで困ったことがあったら相談してもいいから。
0385デフォルトの名無しさん
2006/12/23(土) 15:12:02正しいアカウントとパスワードであるかどうかを確認したいんじゃないのか。
しかし、そんなAPIはエクスポートされているのかね。
0386デフォルトの名無しさん
2006/12/23(土) 15:13:13strcmpだと、Windowsパスワードとの比較ができません。
そもそも、Windowsパスワード自体知らないわけで、知らない文字列との比較は……
0387デフォルトの名無しさん
2006/12/23(土) 15:15:21APIで、パスワードが「必ずある」ならLogonUserあたりかもしらん
自PCパスワードつきのアカウント1個もないからわからんけど
0388デフォルトの名無しさん
2006/12/23(土) 15:19:43ぐぐったら一発でヒットしたぞ。
面倒そうではあるが。
ttp://support.microsoft.com/kb/180548
というわけで終了。
0389383
2006/12/23(土) 15:52:220390デフォルトの名無しさん
2006/12/25(月) 00:02:490391デフォルトの名無しさん
2006/12/25(月) 00:55:50クリスマスに失禁とはとんだ茶番だな
0392デフォルトの名無しさん
2006/12/25(月) 01:00:54なんだかHDに優しくないような気がしてきました。
もっと外道でないやり方はありますか?
0393デフォルトの名無しさん
2006/12/25(月) 01:03:13シークする必要はどうしてあるの?どういう格納方法になってるんだ?
0394デフォルトの名無しさん
2006/12/25(月) 01:03:500395デフォルトの名無しさん
2006/12/25(月) 01:11:30バッファリングされているから問題ない
0396デフォルトの名無しさん
2006/12/25(月) 01:13:33std::getline()でstd::stringにファイルを一括して読み込み、それを元に
std::stringstreamを作成し、そこから変数を読み取る。
シークの部分はstd::stringstreamではseekpとseekgの意味が異なるので
移植に注意。
0397デフォルトの名無しさん
2006/12/25(月) 01:15:20ベンチマーク取って遊びたくなってきた。
どちらが速いのか?あーでもファイルはディスクキャッシュを無効に
したりいろいろしないといけないので面倒だな。
0398デフォルトの名無しさん
2006/12/25(月) 02:59:35C で作ったライブラリにこんな関数あるんだけど、こいつにクラスの
インスタンスを食わせたいとき、
class C {
public: void foo() { register_callback(this, callback); }
private: static void callback(void* this_);
};
こんなふうに書いてたんだ。コンパイルも通るし、動作にも問題ない。
でも実は extern "C" の中にある関数の型と C++ で普通に宣言した
関数じゃ型が違うらしいんだ。つまり register_callback() に渡す
関数は extern "C" で宣言しないとダメってことね。
それじゃぁってことで、
extern "C" void callback(void* this_);
class C {
public: void foo() { register_callback(this, callback); }
private: friend void callback(void* this_);
};
としたんだけど、これだと callback() が外部シンボルになってしまう。
じゃぁ static つければ内部リンケージになるだろうと思ったけど、
static extern "C" void callback(void* this_);
はコンパイル通らなかった。
どうすればいいと思う?
0399デフォルトの名無しさん
2006/12/25(月) 03:01:18extern "C" の関数にthisポインタを渡さないようにする。これで解決。
0400デフォルトの名無しさん
2006/12/25(月) 08:34:12何がダメだったのかが分からない
0401デフォルトの名無しさん
2006/12/25(月) 09:29:55C++側で、Cの流儀に合わせる願望がダメ。
0402デフォルトの名無しさん
2006/12/25(月) 10:08:480403デフォルトの名無しさん
2006/12/25(月) 11:54:03規格の 7.5p1 より
"Two function types with different language linkages are distinct types even if they are otherwise identical."
ということで C++ language linkage を持つ C のメンバ関数 callback() は
C language linkage を持つ register_callback() の引数 callback とは型が違うことになる。
型が違えばエラーになるはずなんだが、コンパイルが通る。ってことは
暗黙の変換か何か行われるのかと思うけど、規格にそんな記述は無い。
型を合わせるために extern "C" をつければいい( >>402 の方法ね)んだけど、
そうすると外部リンケージを持つことになるんで名前付けが面倒。そもそも
別のソースから呼び出したいわけじゃない。
0404デフォルトの名無しさん
2006/12/25(月) 12:14:14and to objects defined in C++ from other languages is
implementation-defined and language-dependent. Only
where the object layout strategies of two language
implementations are similar enough can such linkage
be archived.
0405デフォルトの名無しさん
2006/12/25(月) 12:35:49http://gcc.gnu.org/bugzilla/show_bug.cgi?id=2316
規格に沿って修正するとえらいことになってしまう罠。
pthread_create() に C++ の関数渡してるコードなんて
山ほどある。 qsort() や bsearch() もヤバイ。
0406デフォルトの名無しさん
2006/12/25(月) 12:47:15それとは違うでしょ。
同じ名前使ってるんじゃなくて、
リンケージの違うものを渡して型は大丈夫なのかって話だから。
大丈夫でしょ。
callbackにstatic修飾は必要なの?
0407デフォルトの名無しさん
2006/12/25(月) 12:51:09extern "C" と extern "C++" で関数の型を区別するかどうかってことで、
関連はあるだろう。
static つけないとプログラム全体で完全にユニークな名前をつける必要が
あるんで、面倒になる。
0408デフォルトの名無しさん
2006/12/25(月) 13:09:06void (*)(void*) と見做されているみたいだが。> g++
0409デフォルトの名無しさん
2006/12/25(月) 13:23:01そんなことはみんな知ってて話してる。
0410デフォルトの名無しさん
2006/12/25(月) 14:15:33当たり前だろwwwwボケはすっこんでろwwwwwwww
0411デフォルトの名無しさん
2006/12/25(月) 14:17:040412フォルトの名無しさん
2006/12/25(月) 15:12:44本当にメリークリスマスでした
0413デフォルトの名無しさん
2006/12/25(月) 15:40:26規格でも認められてる。よく読め。
0414デフォルトの名無しさん
2006/12/25(月) 17:59:57int n=10;
int & nRef = n;
上記のような宣言が行われているとして、あるタイミングで
変数nRefに別の参照を設定したいのですが、
int i=8;
nRef = i;
としてみても変わらず変数nを参照してしまいます。
どうしたらよいのでしょうか?
0415デフォルトの名無しさん
2006/12/25(月) 18:03:150416デフォルトの名無しさん
2006/12/25(月) 18:06:520417413
2006/12/25(月) 18:17:13レスどうもです。
ポインタですか・・・。まだあまりポインタ理解できていないので
使いたくはなかったのですが、これもいい機会だと思って勉強します。
ありがとうございました。
0418デフォルトの名無しさん
2006/12/25(月) 18:18:340419414
2006/12/25(月) 18:18:340420デフォルトの名無しさん
2006/12/25(月) 18:29:560421デフォルトの名無しさん
2006/12/25(月) 23:53:51#define WORKPATH "c:\\temp\\aaa"
const string g_WORKPATH = WORKPATH;
0422デフォルトの名無しさん
2006/12/26(火) 00:02:560423デフォルトの名無しさん
2006/12/26(火) 02:23:000424デフォルトの名無しさん
2006/12/26(火) 02:25:42なぜそんなことをしたいのかわからないが、問題ないと思う。
0425デフォルトの名無しさん
2006/12/26(火) 06:19:240426デフォルトの名無しさん
2006/12/26(火) 06:59:02Pimplイディオムを使う意義はありますか?
0427デフォルトの名無しさん
2006/12/26(火) 08:37:420428デフォルトの名無しさん
2006/12/26(火) 08:41:520429426
2006/12/26(火) 09:17:09気にせず常にPimpl使おうと思います
0430デフォルトの名無しさん
2006/12/26(火) 09:47:450431デフォルトの名無しさん
2006/12/26(火) 09:57:08今まではprivateなメンバが一つの時とかはどうしようか迷ってたんで
0432デフォルトの名無しさん
2006/12/26(火) 15:10:15ゼロになるかも(ry
0433デフォルトの名無しさん
2006/12/26(火) 23:23:17に適用できるデザインパターンて何かな
まあ、普通に全メソッドにクリティカルセクションかけりゃいいけど
なんかいいの無いかな
0434デフォルトの名無しさん
2006/12/26(火) 23:25:29つかそんなんじゃワカラン
0435デフォルトの名無しさん
2006/12/26(火) 23:43:13ありがトンございます
ともあれデザパタ本買います
0436デフォルトの名無しさん
2006/12/26(火) 23:45:23アマゾンで検索したのですがJAVAしか出てきません
0437デフォルトの名無しさん
2006/12/26(火) 23:51:59素直にJava勉強してその本読んだ方が良いかと
0438デフォルトの名無しさん
2006/12/26(火) 23:56:38デザパタを前面に押し出しているわけじゃないし
POSAの第2巻とか?あれはC++に限ってないけれど
あとはJavaな本をC++の言葉に噛み砕いて読むくらいかな
437に書かれているような言語機能の違いからC++特有の苦労が必要になるけれど
0439デフォルトの名無しさん
2006/12/27(水) 00:25:14そうですね。とりあえず基本的なクラスの設計は
Javaと共通の部分があると思うのでJava本買おうと思います。
レスありがとうございました。
0440デフォルトの名無しさん
2006/12/27(水) 02:29:29thread local specifier, __threadってのが多くのベンダのコンパイラで使えて、
標準になりそうなので、調べてといて。
http://www.open-std.org/jtc1/sc22/wg21/docs/papers/2006/n1966.html
0441デフォルトの名無しさん
2006/12/27(水) 02:54:25>>C++でデザパタ
「プログラムデザインのためのパターン言語」って本はサンプルがC++だったよん
すこしsmalltalkもあったけど。
あとネット上なら
http://www002.upp.so-net.ne.jp/ys_oota/mdp/index.htm
とか
http://www.01-tec.com/document/cpp_design_pattern.html
とか。
ハテナダイアリでちょこっと検索するとブログで書かれてるのが出てきたりもする
0442デフォルトの名無しさん
2006/12/27(水) 15:35:56#defineにとっての#undefに相当することを
usingに対してやりたいんだけど、
namespaceを一個作成してその中でusingするしかないんでしょうか
0443デフォルトの名無しさん
2006/12/28(木) 12:38:58using ...;
}
0444デフォルトの名無しさん
2006/12/28(木) 15:57:57というのも指導教官に「それはよくない。美しくない」と指摘されたのですが、
実用性を重視するなら、ありといえばありですよね?
みなさんが直面された重要な困難があれば教えて欲しいです。
0445デフォルトの名無しさん
2006/12/28(木) 16:06:30スレ違い
0446デフォルトの名無しさん
2006/12/28(木) 16:16:550447デフォルトの名無しさん
2006/12/28(木) 20:19:28案外C++な話題かも?
void foo(void)
{
struct local {
static void func(void) {
// do something
};
};
local::func();
local::func();
}
ある関数内でのみ可視な関数を使いたいときに便利。
0448デフォルトの名無しさん
2006/12/28(木) 20:41:38別に美しくないとは思わない
その教官のセンスがおかしいだけ
0449デフォルトの名無しさん
2006/12/28(木) 20:56:51じゃあお前もおかしいな、センスとか
0450デフォルトの名無しさん
2006/12/28(木) 21:01:06>センスがおかしいだけ
0451デフォルトの名無しさん
2006/12/28(木) 22:15:31これ、いいですね。ありがとん
0452デフォルトの名無しさん
2006/12/29(金) 10:22:220453デフォルトの名無しさん
2006/12/29(金) 17:19:04C++で、ファイルの内容を一度にstd::stringに読み込む方法は
ないでしょうか?
いろいろ調べてみたのですが、std::getline()では改行文字まで
しか読み取らないし、他にはread()で何バイトかずつ読み込んで
stringに足すか、get()で一文字ずつ読み込んで足す、位の方法
しか思いつきません。
rdbuf()を使ってstd::stringstreamに読み込もうとしたら、fstreamとは
違ってコンストラクタがないんですね。
0454デフォルトの名無しさん
2006/12/29(金) 17:45:04std::ifstream fin;
std::copy(std::istreambuf_iterator<char>(fin),std::istreambuf_iterator<char>(),std::inserter(str,str.begin()));
0455デフォルトの名無しさん
2006/12/29(金) 17:54:24ありがとうございます。これならスマートになりますね。
速度的には1文字ずつ読んでいるのであまり変化ないかもしれませんが、
一行で書けるという点が魅力です。
istreambuf_iteratorを使うという所が私には盲点でした。
さっそく使わせていただきます!
0456デフォルトの名無しさん
2006/12/29(金) 17:55:30std::istreambuf_iterator<char> first(file);
std::istreambuf_iterator<char> last;
std::string fileData(first, last);
0457デフォルトの名無しさん
2006/12/29(金) 17:58:29std::string fileData((std::istreambuf_iterator<char>(file)), std::istreambuf_iterator<char>());
しかし分かりにくいので>>456のように書いた方がよい
>>455-456のやり方は>>454のように1文字ずつの代入ではなく初期化なので効率は少しはマシになるはず
0458デフォルトの名無しさん
2006/12/29(金) 18:03:47度々ありがとうございます。
私も書いてみました。これでも行けるようです。
s.insert(s.begin(), std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>());
0459デフォルトの名無しさん
2006/12/29(金) 18:09:42あと、stringのコンストラクタにistreambuf_iteratorを取る形式ですと、
遅延評価を行っているのかよくわかりませんが、私の環境では直後の
std::istringstream strstr(s);
で "istreambuf_iterator *を取るコンストラクタが見つからない"という
エラーが出てしまいます。ちょっと謎です。
環境はBCC5.8.2、Dinkumwareです。
0460デフォルトの名無しさん
2006/12/29(金) 18:13:380461デフォルトの名無しさん
2006/12/29(金) 18:16:100462デフォルトの名無しさん
2006/12/29(金) 18:18:40文字列が空の場合この方がよいと思う。
(空で無い場合意味が異なる)
s.assign(std::istreambuf_iterator<char>(ifs), std::istreambuf_iterator<char>());
0463デフォルトの名無しさん
2006/12/29(金) 18:21:59それはコンパイルエラーになりました。
C++標準ライブラリという本にも、assignメンバ関数にはイテレータを
取る形式は書いてありませんでした。
0464デフォルトの名無しさん
2006/12/29(金) 18:23:090465デフォルトの名無しさん
2006/12/29(金) 18:24:39>>459でも書いたように、コンストラクタにイテレータを使う形式ですと、
そのstringでistringstreamを構築するとエラーが出てしまうので、
今回は使えないのです。
0466デフォルトの名無しさん
2006/12/29(金) 18:35:48そんな本とコンパイラなんて窓から投げ捨ててしまえ。
0467デフォルトの名無しさん
2006/12/29(金) 18:49:39結構凄いことなってる。助言とかお願いします
http://ex17.2ch.net/test/read.cgi/news4vip/1167379476/
0468デフォルトの名無しさん
2006/12/29(金) 19:00:55なんかそれ変だな
以下のソースでどんなコンパイルエラーが出る?
#include <fstream>
#include <iterator>
#include <string>
#include <sstream>
using namespace std;
int main () {
ifstream ifs ("hoge");
string s ((istreambuf_iterator <char> (ifs)), istreambuf_iterator <char> ());
istringstream strstr (s);
return 0;
}
0469デフォルトの名無しさん
2006/12/29(金) 19:41:53なんか一言あったほうがいいかもしれないけど、説明が面倒だな。
0470デフォルトの名無しさん
2006/12/29(金) 19:43:49いえ、これは通りました。
どうもstringを定義している位置で出たり出なかったりするようです。
間違いなくコンパイラのバグだと思います。
0471デフォルトの名無しさん
2006/12/29(金) 19:45:04その本持ってます。確か「関数と見なせるものは関数とみなす」
という意味で、防止法は、括弧で囲む事でしたね。それでちょっと
試してみます。
0472デフォルトの名無しさん
2006/12/29(金) 19:47:42済みません、本当にありがとうございました。
Effective STLの第6項、P32そのままの問題でした。
コンパイラのバグではありませんでした。
本は読んでいましたが、実際に遭遇したのは初めてです。
覚えておきます。
0473デフォルトの名無しさん
2006/12/29(金) 19:49:260475デフォルトの名無しさん
2006/12/29(金) 20:31:00実は>>457の第一パラメータに括弧が付いているのを見落として
いたんです。申し訳ありません。
0476デフォルトの名無しさん
2006/12/29(金) 21:34:120477デフォルトの名無しさん
2006/12/29(金) 22:03:000478デフォルトの名無しさん
2006/12/29(金) 22:43:04かも。
0479デフォルトの名無しさん
2006/12/29(金) 23:57:000480デフォルトの名無しさん
2006/12/30(土) 00:03:02string s(istreambuf_iterator<char>(ifs), istreambuf_iterator<char>());
が s という名前の関数宣言と見なされてしまうという問題で、これを
回避するために
string s((istreambuf_iterator<char>(ifs)), istreambuf_iterator<char>());
これで ifs のファイル内容で初期化された string型の変数 s が出来る。
0481デフォルトの名無しさん
2006/12/30(土) 00:12:03が何で関数宣言にみなされるの?
0482デフォルトの名無しさん
2006/12/30(土) 00:16:08string s(istreambuf_iterator<char> ifs, istreambuf_iterator<char>);
とみなされるから。これで分からなければ是非本を読んでね。
0483デフォルトの名無しさん
2006/12/30(土) 00:20:040484デフォルトの名無しさん
2006/12/30(土) 00:26:01最初の引数はistreambuf_iterator<char>型で、名前はifs。
2番目の引数は、「引数をとらずistreambuf_iterator<char>型を返す関数」へのポインタ。
・・・とコンパイラは解釈する。
0485デフォルトの名無しさん
2006/12/30(土) 00:34:34あ、そうだった。
string s(istreambuf_iterator<char> ifs, istreambuf_iterator<char>());
こうですね。本を持っててもちゃんと読んでいないとこんなもんです。
0486デフォルトの名無しさん
2006/12/30(土) 00:39:16何と"C Primer Plus fifth"だった。まあ内容的にはC99の事も
取り上げられていていいのだが。
注文せんと入れてくれんかなぁ。
0487デフォルトの名無しさん
2007/01/01(月) 02:25:28class mystrfnc{
std::string str;
mystrfnc(const std::string &str):str(str){}
public:
friend mystrfnc operator--(const std::string &str,int i){return mystrfnc(str);}
mystrfnc *operator--(int i){return this;}
std::string func(){return "["+str+"]";}
};
int main(){
std::string str="STRING";
std::cout<<str----->func()<<std::endl;
return 0;
}
もちろん、個人で組んでる趣味のコードですが
0488デフォルトの名無しさん
2007/01/01(月) 02:39:02何がしたいのかわからん。
邪道だと思うんならやめればいい。
個人だ趣味だと予防線を張るくらいなら好きにすればいい。
0489487
2007/01/01(月) 03:10:54本当にしたいこと:stringにsubstr系のメソッドを追加したい
std::stringを継承するのは大変そうなのでやりたくない
関数にするよりメソッドっぽくしたい(元のstringの部分が長いのでを()で囲みたくない)
こうゆう状況で、
「んなことするよりこうする方が見やすくてええやん」
「それはこうゆうときにこんなことがおこるから素直にこうしとけ!」
の様な意見あるかを聞きたいわけです
0490デフォルトの名無しさん
2007/01/01(月) 03:13:310491デフォルトの名無しさん
2007/01/01(月) 03:35:30何じゃこりゃ!新年早々気持ち悪いプログラムを見てしもた。
後置演算子として解釈されているのか。
((str.operator--(str, int)).operator--(int))->func() と読めばいいのか。
0492デフォルトの名無しさん
2007/01/01(月) 04:19:400493デフォルトの名無しさん
2007/01/01(月) 04:24:34鍛えられるが養えない。
昔VAX11用のコードでスゲェ、キタコレーなのがあったなぁ(遠い目
0494デフォルトの名無しさん
2007/01/01(月) 04:44:43なぜか無限の可能性を感じずにはいられない。
0495デフォルトの名無しさん
2007/01/01(月) 05:00:520496487
2007/01/01(月) 05:15:09mystrfnc *operator->(){return this;}
で
str--->func()
に減らせたーー!
0497デフォルトの名無しさん
2007/01/01(月) 11:23:55まあ趣味ならBoostも気兼ねなく使えるだろう。
#include <iostream>
#include <string>
#include <cassert>
#include <boost/function.hpp>
#include <boost/bind.hpp>
std::string do_func(const std::string& str) {return "[" + str + "]";}
enum func_type {
func
};
boost::function<std::string ()> operator->*(const std::string& str, func_type fn) {
switch (fn) {
case func:
return boost::bind(do_func, str);
default:
assert(0);
return boost::function<std::string ()>();
}
}
int main() {
std::string str = "STRING";
std::cout << (str->*func)() << std::endl;
}
0498デフォルトの名無しさん
2007/01/01(月) 13:55:350499デフォルトの名無しさん
2007/01/01(月) 14:32:29> 本当にしたいこと:stringにsubstr系のメソッドを追加したい
std::string::substr() は既にあるわけだが。
0500487
2007/01/01(月) 16:01:39すごく面白そうですが、最終的に()で括ってるのが悲しいです。
boostよく知らないんでちょっとした修正で()外せたりするのかもしれませんが
>>499
本当にしたいこと:stringに元の文字列の部分文字列を返すメソッドを何種類か追加したい
こう言えば解ってもらえますかね
0501デフォルトの名無しさん
2007/01/01(月) 16:09:200502487
2007/01/01(月) 16:31:54関数だと
=func1(func2(func1(func1(str1))+func1(str2)));
こんな使い方をされる物を想定しているわけですよ
これを単純に左から右へ処理される順番に並べて読みやすくできないかという思惑です
0503デフォルトの名無しさん
2007/01/01(月) 19:03:23もっと具体的な最終目的をちゃんと書いてくれると
それが最適なやり方かどうかも含めて議論できるんだが
0504デフォルトの名無しさん
2007/01/01(月) 19:14:50あるのですが、C++でコンパイルすると未定義の関数と表示されてしまいます(CならOK)
C++で_stprintfに対応する関数は何になるのでしょうか教えてください。
コンパイラはbcc32です。
0505487
2007/01/01(月) 20:06:50ファイルのパスを管理したい。
↓
フルパスからファイルの親の親ディレクトリ部分のみを取り出したり
パスなしのファイル名から拡張子部分のみを取り替えたりとかしたい
↓
下手にパスを分解してクラスのメンバに入れたりとかするより、
stringそのままを切り貼りした方が扱いやすいんじゃないか
↓
切り貼りの貼りは+でいいとして
切りの部分はstringにメソッドを追加したいなー
↓
せめてメソッドっぽく見えればなー
こんな感じです
0506デフォルトの名無しさん
2007/01/01(月) 20:31:590507デフォルトの名無しさん
2007/01/01(月) 20:47:47_stprintfはsprintfのtchar版
これでわからないなら最初にsprintfについて調べて動作を理解してから自分のコード読み直してみるといい。
0508!dama !omikuji 株価【35】
2007/01/02(火) 10:15:15->*演算子は関数呼出の()演算子よりも優先順位が低いからどうしようもない。
>>501
そういうことなら、Oven Range Libraryなんてどうだろう。
ttp://p-stade.sourceforge.net/oven/
こいつは|演算子でパイプ処理のように書くことができるライブラリ。そしてstd::stringに限らず幅広いオブジェクトを対象にしている。
これを使わないとしても、|演算子で並べていくというアイデアは参考になると思う。
と、思ったんだけど、505なら506の言うとおりBoost.Filesystemを推すなあ。
>>504
<tchar.h>をインクルードしているか。
0509デフォルトの名無しさん
2007/01/02(火) 19:17:39>std::stringを継承するのは大変そうなのでやりたくない
http://tricklib.com/cxx/dagger/xstring.h
こいつでもベースに使えば楽だよ。
0510デフォルトの名無しさん
2007/01/04(木) 11:03:36ライブラリとして使うつもりなら、
メンバ関数でなければいけない特別な理由がない限り、
メンバ関数にするのはやめたほうがいい。
(C++ Coding Standards 項目44)
名前が長いなら、参照を使えばいいわけで、メンバにする理由もないし。
template< typename StrT > inline StrT & remove_filespec( StrT & in ) {
in.substr( ... ).swap(in);
return in;
}
string & ref = remove_filespec( my_application_filepath );
0511デフォルトの名無しさん
2007/01/04(木) 11:14:590512デフォルトの名無しさん
2007/01/04(木) 11:44:46行分けちゃアカンの?
0513デフォルトの名無しさん
2007/01/04(木) 16:12:380514デフォルトの名無しさん
2007/01/04(木) 16:42:44あるんじゃなかったっけ。
0515487
2007/01/04(木) 23:51:25まぁ、邪道なのは百も承知しているのですが、
それでも
「本当のスパゲティコードを書いたことがなければ構造化のありがたみは解らない」
という自説の延長線上で
「意外に便利なものが見つかったらめっけもの」
という勢いですので、生暖かい目で見守ってやってください。
0516デフォルトの名無しさん
2007/01/05(金) 00:09:45そうならないようC++のNULLは0と定義されている。
0517デフォルトの名無しさん
2007/01/05(金) 12:05:470518デフォルトの名無しさん
2007/01/05(金) 15:25:190519デフォルトの名無しさん
2007/01/05(金) 15:38:500520デフォルトの名無しさん
2007/01/09(火) 18:10:410521デフォルトの名無しさん
2007/01/09(火) 22:47:29どういう時によろしくない挙動を示すんでしょうか
0522デフォルトの名無しさん
2007/01/10(水) 00:34:130523デフォルトの名無しさん
2007/01/10(水) 21:03:130524デフォルトの名無しさん
2007/01/10(水) 22:02:340525デフォルトの名無しさん
2007/01/10(水) 22:47:36これなんてどうだろう?
http://en.wikipedia.org/wiki/Argument_dependent_name_lookup#Criticism
0526デフォルトの名無しさん
2007/01/10(水) 23:19:220527デフォルトの名無しさん
2007/01/10(水) 23:20:313つ以上、思い当たる点があればアナタの性格はひん曲がっており、ネガティブ負け組人生を歩んでいます。
□派遣先の社員の意見にはたとえ間違っていても反対しない
□派遣先から「いつまでもここで仕事してくださいね」と言われるようになりたい
□自社に仕事を持ち帰れるように言われるとムカつく
□自社で仕事なんてできるわけがない
□派遣/受託の差異を指摘する人間はムカつく
□派遣先には仕事だけでなく自分のプライベートについても指示して欲しい
□自分の月額金額を知らない
□派遣先社員より自分の生涯収入が低いのは当然だ
□派遣先に尻尾を振り、いつまでも一緒に仕事をすることが大切だ
□今のプロジェクトが終わっても同じ派遣先に常駐したい
0528デフォルトの名無しさん
2007/01/11(木) 21:17:37ないでしょうか?コドンからアミノ酸変換、疎水性インデックスのような簡単な
ものでいいのですが。
0529デフォルトの名無しさん
2007/01/11(木) 21:47:16もうマジうぜー、javaの100倍うぜえわ
コンパイルの仕方がわからん。リンクくらい貼っとけ
0530デフォルトの名無しさん
2007/01/11(木) 21:50:440531デフォルトの名無しさん
2007/01/11(木) 23:16:09開発環境とかはスレ違いだから
0532デフォルトの名無しさん
2007/01/12(金) 05:02:42遅レスだが.
> rdbuf()を使ってstd::stringstreamに読み込もうとしたら、fstreamとは
> 違ってコンストラクタがないんですね。
ふつーに
std::stringstream ss;
ss << std::cin.rdbuf();
とかできんか?
0533デフォルトの名無しさん
2007/01/12(金) 15:12:11boost ML にbio infomatics のやつは投稿されてたけど
0534デフォルトの名無しさん
2007/01/12(金) 17:15:40std::istringstreamではなくてstd::stringstreamを使って
入出力両用にすればそれはできますね。
0535デフォルトの名無しさん
2007/01/13(土) 10:46:50std::string s("abc");
s = s.substr(3);
assert(s == "");
0536デフォルトの名無しさん
2007/01/13(土) 13:24:24は、もしpos > size()ならout_of_rangeを投げるはず・・・。
0537デフォルトの名無しさん
2007/01/13(土) 13:25:320538デフォルトの名無しさん
2007/01/13(土) 15:27:48pos == sizeだから問題ないね。
0539デフォルトの名無しさん
2007/01/13(土) 15:36:560540デフォルトの名無しさん
2007/01/13(土) 16:04:582 Throws: out_of_range if pos > size().
って書いてあるな。
0542デフォルトの名無しさん
2007/01/14(日) 02:06:46News 2007-01-13: The C++ Standard Library Issues List (Revision 46) is available
0543デフォルトの名無しさん
2007/01/14(日) 22:33:24例えばこんな感じで
class Hoge {
private:
int num;
} hoge;
main() {
int *i = reinterpret_cast<int *>(&hoge);
*i = 123;
}
0544デフォルトの名無しさん
2007/01/14(日) 22:37:480545デフォルトの名無しさん
2007/01/14(日) 22:40:000546デフォルトの名無しさん
2007/01/14(日) 23:35:450547デフォルトの名無しさん
2007/01/14(日) 23:42:51そこまでして自分の足を撃たなくても……
reinterpret_castは実装依存だよ。
0548デフォルトの名無しさん
2007/01/15(月) 00:34:260549デフォルトの名無しさん
2007/01/15(月) 00:36:42こうすれば確かにいちいち
#define private public
とかしなくてもOKだよな。目からウロコだぜ
0550デフォルトの名無しさん
2007/01/15(月) 00:41:05もっとも、キーワードを置き換えてる時点で鼻からスパゲッティだが
0551デフォルトの名無しさん
2007/01/15(月) 10:33:15API的関数(それぞれが無関係な関数)を何個か作ってるんですけど、
こういうのって、やはり「API的関数群」のような名前のクラスを作って、
すべてをstaticなメンバ関数にするべきなのでしょうか?
それとも、Cのようなグローバル関数群にしてしまうべきなのでしょうか?
0552デフォルトの名無しさん
2007/01/15(月) 10:39:40namespace使うとか
0553デフォルトの名無しさん
2007/01/15(月) 10:51:19まずAPIの意味調べような?
漏れは便利系メソッドは全部namespace utilityに突っ込んでる。
しかしほとんどの便利系メソッドはよく探せばWin32APIとか
使えるならboostとかにほとんど揃ってるんで
utility名前空間が膨れ上がる事はまずない。
0554デフォルトの名無しさん
2007/01/15(月) 11:07:33即レスありがとうございます。
namespaceを使うということは、基本的には
「staticメンバ関数クラス」ではなく「グローバル関数群」のほうになるのですよね。
0555デフォルトの名無しさん
2007/01/15(月) 11:20:04__Z11とか__M11とかが頭にあるものが出てくるのですが、
これはどんな種類のシンボルなのですか。
0556デフォルトの名無しさん
2007/01/15(月) 11:23:01ソースを一行ずつ動くようなやつ
visual c++ とかボーランドで出来る?
0557デフォルトの名無しさん
2007/01/15(月) 11:35:48普通にできるから。
0558デフォルトの名無しさん
2007/01/15(月) 11:46:08教えてクレー
0559デフォルトの名無しさん
2007/01/15(月) 12:12:310560デフォルトの名無しさん
2007/01/15(月) 14:43:14つ[c++filt]
0561デフォルトの名無しさん
2007/01/15(月) 16:46:24っデマングル
っextern "C"
0562デフォルトの名無しさん
2007/01/15(月) 21:14:34なんか意味があるのでしょうか?
0563デフォルトの名無しさん
2007/01/15(月) 21:23:210564デフォルトの名無しさん
2007/01/15(月) 21:39:48まず名前空間の意味調べような?
>基本的には「staticメンバ関数クラス」ではなく「グローバル関数群」のほう
意味わからん。基本的って何や。基本でない場合どうなるんや。
しいて言うなら「utility関数群」。グローバル名前空間は汚染されない。
0565デフォルトの名無しさん
2007/01/15(月) 21:40:10・classは閉じていてnamespaceは開いている
・classはアクセス制御できる
という違いがあるから、そこを良く考えて選ぶと良いよ。
0566デフォルトの名無しさん
2007/01/16(火) 18:55:44なんとなく実行速度が遅いような気がして、小耳に挟んだ話だと逐一HDDにアクセスしていることが起因しているそうなのですが、
計算結果を貯めておいて、最後に一度に書き出すにはどうすればいいのでしょうか?
C++暦は1ヶ月程度ですが、参考サイト等教えていただければ幸いです。
どうかよろしくお願いいたします。
0567デフォルトの名無しさん
2007/01/16(火) 18:57:51とりあえずファイルにどう出力しているか書いて。
0568デフォルトの名無しさん
2007/01/16(火) 19:39:410569デフォルトの名無しさん
2007/01/16(火) 20:00:02std::ostreamやらstdioやらを使ってるんならライブラリでバッファリングされるし
それでなくとも今時のOSならOSレベルでバッファリングされる
実際に逐一ディスクI/Oが発生することは無いはずよ
0570デフォルトの名無しさん
2007/01/16(火) 20:08:40int _tmain(){
ofstream fout("data1.txt");
for(int c=0 ; c<100 ; c++){
fout<<c<<"回目です。"<<endl;}
fout.close();}
のような感じです。見やすさを考慮して実際の数値計算式は省いています。
>568
OSはXPProです。申し訳ありません、私にはわかりません。
>569
なるほど。だとすると私程度のレベルでは特に意識する必要はなさそうですね。
レスありがとうございます。
0571デフォルトの名無しさん
2007/01/16(火) 20:09:36#include <math.h>
#include <stdio.h>
#include <fstream>
#include <iostream>
#include <complex>
#using <mscorlib.dll>
using namespace System;
using namespace std;
書き忘れました。すいません。
0572デフォルトの名無しさん
2007/01/16(火) 20:15:310573デフォルトの名無しさん
2007/01/16(火) 20:15:42必要がなければcloseなんて自分で呼ぶ必要はないぞ。
デストラクタで勝手にcloseされる。
0574デフォルトの名無しさん
2007/01/16(火) 20:40:46早速試してみます。
>573
それは初耳でした。以降そのように記述します。
アドバイスありがとう。
0575デフォルトの名無しさん
2007/01/16(火) 20:44:19だとしたら'\n'に変えて動作速くなる可能性は高そう
0576デフォルトの名無しさん
2007/01/16(火) 21:02:29どーでもいいがなんだってmscorlib.dllなんて使ってるんだ
managed C++か?
そのコードなら別に.NET非依存で完全にnativeだから、そんなものは要らないぞ
0577デフォルトの名無しさん
2007/01/16(火) 21:15:54次は長時間の計算で比較してみたいと思います。
>576
C++の基本事項を参考にしたサイトが使用していたため、そのままコピペで使っていました。
省略しても問題なく動き、コンパイル時間が短縮できました。ありがとうございます。
0578デフォルトの名無しさん
2007/01/16(火) 21:23:45始めたばかりならC++の言語仕様やその他にも学ぶべき有意義なことが沢山あるはず。
0579デフォルトの名無しさん
2007/01/16(火) 21:35:04そもそもファイルに書き込まないと速くなるのかね?
君のへちょい数値計算が遅い可能性は皆無?
0580デフォルトの名無しさん
2007/01/16(火) 21:49:56そうですね。仰るとおりです。一通り扱えるよう勉強します。
>579
すいませんが、わかりません。
もちろん私の書いたものが遅い可能性もあります。
みなさんありがとうございました。これほど親身になってアドバイスいただけるとは思っても見ませんでした。
私の知識不足もあり、質問には答えられないところもありましたがどうか容赦下さい。
当面は幅広くC++を学んでいきたいと思います。また機会がありましたらよろしくお願いいたします。
0581デフォルトの名無しさん
2007/01/16(火) 21:57:330582デフォルトの名無しさん
2007/01/16(火) 21:59:31プロファイルを取るべきだな
0583デフォルトの名無しさん
2007/01/16(火) 22:26:27まだ他に学ぶべきことがいっぱいあるだろうから気にすることも無いと思うけどね。
0584デフォルトの名無しさん
2007/01/16(火) 22:50:420585デフォルトの名無しさん
2007/01/16(火) 23:25:16>すいませんが、わかりません。
えええ… ファイルの書き込みしてる部分コメントアウトすればいいじゃない…
0586デフォルトの名無しさん
2007/01/16(火) 23:30:53fout << ss.rdbuf(); すると少しは速くなるかもしれない。
実験してないけど。
0587デフォルトの名無しさん
2007/01/16(火) 23:31:280588デフォルトの名無しさん
2007/01/16(火) 23:33:51>>582
0589デフォルトの名無しさん
2007/01/17(水) 00:02:08あぁそういう意味でしたか。よくわかっていませんでした。確かにそれで差を見るのが一番根本的だなと
気がつきました。夜は電力来ないのでまた明日詳しく試してみます。ありがとう。
ファイルに記述するにしてもいろいろな方法があるのだなとただただ驚くばかりです。
ただ、折角英知を頂いても私があまり理解できないのが残念です。
頂いたコメントは全て保存しておき後日理解が深まってから再度確認させていただきます。
皆様ありがとうございました。
0590デフォルトの名無しさん
2007/01/17(水) 01:21:10やってみな。
#include <iostream>
#include <fstream>
#include <sstream>
#include <windows.h>
int main()
{
std::stringstream ss;
const int N = 100000;
DWORD d;
std::ofstream ofs("1.txt");
d = timeGetTime();
for (int i = 0; i < N; i++)
ofs << i << "回目です。" << std::endl;
std::cout << (timeGetTime() - d) << "ms." << std::endl;
ofs.close();
ofs.open("2.txt", std::ios::out | std::ios::binary);
d = timeGetTime();
for (int i = 0; i < N; i++)
ss << i << "回目です。" << std::endl;
ofs << ss.rdbuf();
std::cout << (timeGetTime() - d) << "ms." << std::endl;
}
0591デフォルトの名無しさん
2007/01/17(水) 01:23:27おっとっと。バイナリモードで開くと、0x0d0aにならずに0x0aにしか
ならないのでテキストモードで開く必要があるな。
#include <iostream>
#include <fstream>
#include <sstream>
#include <windows.h>
int main()
{
std::stringstream ss;
const int N = 100000;
DWORD d;
std::ofstream ofs("1.txt");
d = timeGetTime();
for (int i = 0; i < N; i++)
ofs << i << "回目です。" << std::endl;
std::cout << (timeGetTime() - d) << "ms." << std::endl;
ofs.close();
ofs.open("2.txt");
d = timeGetTime();
for (int i = 0; i < N; i++)
ss << i << "回目です。" << std::endl;
ofs << ss.rdbuf();
std::cout << (timeGetTime() - d) << "ms." << std::endl;
}
0592デフォルトの名無しさん
2007/01/18(木) 07:02:21News 2007-01-16: C++ Standard Core Language Issues List (Revision 45) is available
0593デフォルトの名無しさん
2007/01/18(木) 14:24:08namespace detail
ってどう使い分けるのが普通なのでしょうか?
0594デフォルトの名無しさん
2007/01/18(木) 14:30:580595デフォルトの名無しさん
2007/01/18(木) 22:23:59どうなんでしょうか
0596デフォルトの名無しさん
2007/01/18(木) 22:48:350597デフォルトの名無しさん
2007/01/19(金) 19:10:17http://www.genpaku.org/realprogrammerj.html
0598デフォルトの名無しさん
2007/01/19(金) 21:20:57これを読んでビールが飲みたくなった。
0599デフォルトの名無しさん
2007/01/19(金) 23:53:03ふが
もげ
ぱも
むも
ぴよよ
こんな感じでインデントされたテキストを
インデントごとに構造体に読み込みたいんですが
さっぱりわかりません
struct text{
char* str;//行のデータ
text* childs;//自分よりも一つだけインデントされているデータ
};
読み込みは
while(ifs.getline(buf,_MAX_PATH)){}
みたいなループなのに、データ構造は再帰的なので
もしかしてスタックとか使わないといけないんでしょうか
何か方針でもいいので教えていただけませんか
お願いします
0600デフォルトの名無しさん
2007/01/19(金) 23:59:43そう思うんならスタック使って書けよ。
0601デフォルトの名無しさん
2007/01/20(土) 00:23:030602デフォルトの名無しさん
2007/01/20(土) 00:54:06どう見てもツリーになるんだから、その構造ではダメだろ、考え直せ
0603デフォルトの名無しさん
2007/01/20(土) 01:49:20.で.返.す.方.が.多.い.よ.う.で.す.が.、.そ.の.よ.う.な.方.は.ス.レ.の.皆.様.を.混.乱.さ.せ.る.だ.け.で.な.く
.ス.レ.の.雰.囲.気.を.崩.し.か.ね.な.い.の.で.お.黙.り.下.さ.い.。
.ま.た.質.問.者.は.回.答.者.に.知.識.を.披.露.す.る.場.を.与.え.る.貴.重.な.存.在.な.の.で.、
.質.問.者.を.見.下.し.た.回.答.、.あ.ま.り.に.も.儀.礼.を.欠.い.た.回.答.も.厳.重.に.禁.止.い.た.し.ま.す.。
.忙.し.い.中.、.少.な.い.時.間.の.合.間.を.縫.っ.て.質.問.し.に.来.て.る.わ.け.で.す.の.で.、
.そ.の.辺.ご.承.知.下.さ.い.。.な.お.、.当.方.が.質.問.に.対.し.て.有.意.義.な.答.え.で.あ.る.と
.判.断.し.た.方.に.は.評.価.い.た.し.ま.す.の.で.各.自.よ.く.調.べ.、.よ.く.考.え.正.確.な.回.答.を.す.る.よ.う.に.。
0604デフォルトの名無しさん
2007/01/20(土) 01:52:32>.ス.レ.の.雰.囲.気.を.崩.し.か.ね.な.い
>>603
まさにお前のことだなw
0605デフォルトの名無しさん
2007/01/20(土) 02:05:320606デフォルトの名無しさん
2007/01/21(日) 16:28:100608デフォルトの名無しさん
2007/01/21(日) 16:38:430609デフォルトの名無しさん
2007/01/21(日) 22:19:58ファイルの途中の行を編集する関数ってありますか?
例えば10行あるうちの3行目だけを置換できるもの
やっぱり入力ファイルを読みながら出力ファイルに書き込むしか
方法はないんですか?
教えて下さい
0610デフォルトの名無しさん
2007/01/21(日) 22:29:48C++ 5.5.1 ってなんだ?
とりあえず答えは、全部書くしかない。10行のテキストぐらいならまったく問題ないだろう。
0611デフォルトの名無しさん
2007/01/21(日) 22:47:241行ずつリストに突っ込んで3行目のを消して別の突っ込めば
0612デフォルトの名無しさん
2007/01/21(日) 23:04:12レスどうもです
残念ですが頭からやります
0613デフォルトの名無しさん
2007/01/21(日) 23:43:480614デフォルトの名無しさん
2007/01/22(月) 02:12:51サイズが変わらないならね
0615デフォルトの名無しさん
2007/01/22(月) 03:12:06(.hに定義して、.cppで処理を書いてます).
この関数が定義された、同じソースファイル内では使えますが、
他のファイルで使うと、コンパイルは成功しますが、リンクに失敗します(外部参照が未解決
inlineを使わないと成功します。
inlineを使った場合、同じソース内のみで使用可能ということですか?
それとも、定義等の仕方が悪いのでしょうか。
0616デフォルトの名無しさん
2007/01/22(月) 03:15:560617デフォルトの名無しさん
2007/01/22(月) 04:41:14ヘッダに関数の処理がないとだめですお。
0618デフォルトの名無しさん
2007/01/22(月) 08:39:450619デフォルトの名無しさん
2007/01/22(月) 08:50:05そう思うんなら inline にしなければいい。
0620デフォルトの名無しさん
2007/01/22(月) 08:50:130621デフォルトの名無しさん
2007/01/22(月) 09:03:42ファイル間最適化能力のあるコンパイラを使え。
#詳細は該当スレにて。
0622デフォルトの名無しさん
2007/01/23(火) 23:16:39C++だと例外クラスとか作ったりするのが一般的なのかな?
0623デフォルトの名無しさん
2007/01/24(水) 03:30:11はい。 std::exception を継承して作ってください。
よくある例外は標準ヘッダ stdexcept で定義されていますので、
そちらを使われるのがよいかもしれません。
0624デフォルトの名無しさん
2007/01/24(水) 20:52:47stlからの例外も一緒に取得で便利ってことですか?
0625デフォルトの名無しさん
2007/01/24(水) 21:07:44大本のところで全ての例外をcatchしたようなとき、
どんな例外が投げられるかわかっていないと、
例外が投げられたかとしか情報が得られないけど、
std::exceptionから派生していれば何がしかのメッセージは得られるから。
つまり、>>622の作ったライブラリを使う人にとって都合がいいから。
0626デフォルトの名無しさん
2007/01/24(水) 21:15:090627デフォルトの名無しさん
2007/01/24(水) 21:40:170628デフォルトの名無しさん
2007/01/24(水) 21:44:140629デフォルトの名無しさん
2007/01/24(水) 21:59:180630デフォルトの名無しさん
2007/01/24(水) 22:30:13柔軟性が増して良いと思う。
>>629
例外発生時に別の例外を発生させ得ない操作だけを行うなら問題ない。
0631デフォルトの名無しさん
2007/01/24(水) 23:10:510632デフォルトの名無しさん
2007/01/24(水) 23:19:41どっかのスレッドで起きた例外を
別のスレッドで取得することってできるの?
例外が発生したスレッドを殺したいのだが。。。
0633デフォルトの名無しさん
2007/01/24(水) 23:22:16できない。
スレッド関数の根っこで catch(...) して終了させとけばいいだけじゃないの?
0634デフォルトの名無しさん
2007/01/24(水) 23:27:44やっぱりできないですか。
既にあるシステムで、スレッド関数たくさんあるから
そいつら全部に例外処理いれんの面倒だなーーーーとか
思ってたんで的外れとは思いましたけど質問させていただきました。
0635デフォルトの名無しさん
2007/01/24(水) 23:29:24スレッドの起動に使ってる関数を、最悪マクロで置き換えて、
実際に起動する関数は引数で渡された関数をラップするようにすれば
いいんじゃないか?
0636デフォルトの名無しさん
2007/01/24(水) 23:40:02なんか今、えらい人たちがそれについて
いろいろ考えてるみたいだ。俺には分からんがな
0637デフォルトの名無しさん
2007/01/24(水) 23:43:39それは頭良いですね。
ちょっとトリッキーだけど。。検討してみます
0638デフォルトの名無しさん
2007/01/24(水) 23:45:23王道はスレッドをラップするクラスを作ることだろ
ThreadとかRunnableとかさ
0639デフォルトの名無しさん
2007/01/24(水) 23:48:23Windowsだと
thisポインタが問題にならない?
_beginthreadでクラスのメンバ関数呼べるんだっけ?
ってスレ違いかな
0640デフォルトの名無しさん
2007/01/24(水) 23:49:33staticメンバ関数も知らないのか
C++を一から勉強しなおせよ
0641デフォルトの名無しさん
2007/01/24(水) 23:52:37いや、staticメンバ関数は知ってるけど。
>>638のいうThreadクラスを継承すんのかなと思ったから
Javaみたいに。
0642デフォルトの名無しさん
2007/01/24(水) 23:55:19static_cast<Thread*>(ptr)->run();
}
_beginthreadex( ...,thunk, static_cast<void*>(this),... );
定石だぜ?
0643デフォルトの名無しさん
2007/01/24(水) 23:57:38おおーーーすげーーーー
定石なのかー
何の本に載ってんの?
恥ずかしながら初めて見ました
0644デフォルトの名無しさん
2007/01/25(木) 00:00:36コード嫁よ
0645デフォルトの名無しさん
2007/01/25(木) 00:00:440646デフォルトの名無しさん
2007/01/25(木) 00:05:54ライブラリはあんま読んだことないけど
自分よりスキルある人が作ってんだから勉強になるだろうな
今度読んでみます
0647デフォルトの名無しさん
2007/01/25(木) 00:07:200648デフォルトの名無しさん
2007/01/25(木) 00:12:38ちょー便利そうなんだけど
0649デフォルトの名無しさん
2007/01/25(木) 00:38:350650デフォルトの名無しさん
2007/01/25(木) 00:42:39C++ でスレッドやるときは大抵皆そういうことしてると思うんだけど。
Windows だったら各種のコールバック(lpParamとかとる奴)でも同じ
技法を使うことが多いと思う。
0651デフォルトの名無しさん
2007/01/25(木) 01:28:120652デフォルトの名無しさん
2007/01/25(木) 06:06:590653デフォルトの名無しさん
2007/01/25(木) 08:20:520654デフォルトの名無しさん
2007/01/25(木) 13:01:36ドライアイですか?
0655デフォルトの名無しさん
2007/01/25(木) 14:22:030656デフォルトの名無しさん
2007/01/25(木) 19:31:330657デフォルトの名無しさん
2007/01/25(木) 21:27:33ポリモルフィズムしたいのですが
どうすればいいですか?
0658デフォルトの名無しさん
2007/01/25(木) 21:34:230659デフォルトの名無しさん
2007/01/25(木) 21:40:510660デフォルトの名無しさん
2007/01/25(木) 21:42:42ポリモルするクラスAを作って、仮想関数内でstatic関数を呼ぶ
0661デフォルトの名無しさん
2007/01/25(木) 21:59:530662デフォルトの名無しさん
2007/01/25(木) 22:14:420663デフォルトの名無しさん
2007/01/25(木) 22:44:140664デフォルトの名無しさん
2007/01/25(木) 23:32:34ありがとうございました。解決しました
0665デフォルトの名無しさん
2007/01/25(木) 23:36:100666デフォルトの名無しさん
2007/01/25(木) 23:39:540667デフォルトの名無しさん
2007/01/26(金) 01:51:170668デフォルトの名無しさん
2007/01/26(金) 03:12:140669デフォルトの名無しさん
2007/01/26(金) 05:28:230670デフォルトの名無しさん
2007/01/26(金) 10:19:44C++についてや、中級者向けの踏み込んだ知識が欲しいと思ってます。
レビューなどを調べまわった結果、EffectiveC++がいいかなと思っているのですが
よろしければ助言を頂けないでしょうか
0671デフォルトの名無しさん
2007/01/26(金) 10:50:43とりあえず「憂鬱なプログラマのためのオブジェクト指向開発講座」でも読んどけ。
つか、Effective C++はある程度C++知ってる人間が読まんと意味ない本だぞ。
0672デフォルトの名無しさん
2007/01/26(金) 12:52:52遅レスすみません
先にオブジェクト指向勉強しないと駄目なんですね
それを読んだ後に独習C++を読んでみることにします
ありがとうございます<(_ _)>
0673デフォルトの名無しさん
2007/01/26(金) 13:01:17デッサンした数が実力にモロに影響する。
0674デフォルトの名無しさん
2007/01/26(金) 13:04:38ではさっそく裸体をデッサンしてみます。
0675デフォルトの名無しさん
2007/01/26(金) 13:21:08ごめん言ってみたかっただけ
0676デフォルトの名無しさん
2007/01/26(金) 14:27:45ポリモル 横山智佐
インヘリット 丹下桜
コンスト 折笠愛
ハゲ 若本規夫
0677デフォルトの名無しさん
2007/01/26(金) 16:00:10双子キャラのバインド・ファースト、バインド・セカンドは田中理恵で。
0678デフォルトの名無しさん
2007/01/26(金) 16:30:26ポリモル
OOの国から偽装派遣されてきた魔法少女。
OO厨を増やそうと悪事に励むが失敗ばかり。
インヘリット
真のOOの継承者。
OOの国とは敵対関係にありながら
ポリモルを改心させようとOOの真実を説く。
コンスト
OOの国の創造主。
崩壊の進むOOの国を救うため
指揮命令系統を無視してOO厨の獲得をポリモルに命じる。
0679デフォルトの名無しさん
2007/01/26(金) 16:45:470680デフォルトの名無しさん
2007/01/26(金) 17:04:04株式会社すとらうすとらっぷ
の提供でお送りします。
0681デフォルトの名無しさん
2007/01/26(金) 17:05:100682デフォルトの名無しさん
2007/01/26(金) 17:26:370683デフォルトの名無しさん
2007/01/26(金) 18:14:520684デフォルトの名無しさん
2007/01/26(金) 19:09:47スタチック=キャスト
厳格でお節介な禿キャラ
リ・インタープリット=キャスト
乱暴者でトラブルメイカーな禿キャラ
コンスト=キャスト
殺意の波動に目覚めた禿キャラ
ダイナミック=キャスト
物知りな禿キャラ
0685デフォルトの名無しさん
2007/01/26(金) 20:33:44ワロタ
0686デフォルトの名無しさん
2007/01/26(金) 20:38:23shared_ptrを使うか迷っているのですが。
0687デフォルトの名無しさん
2007/01/26(金) 20:45:24でも、例外安全を考えるとstd::vector<boost::shared_ptr<> >か、boost::ptr_vector<>がお勧め。
0688デフォルトの名無しさん
2007/01/26(金) 20:52:09http://pc10.2ch.net/test/read.cgi/prog/1169812216/
0689デフォルトの名無しさん
2007/01/26(金) 21:11:57C++ Coding Standardsという本にshared_ptrが良いと書いてあったものでお聞きしました。
何の不具合がおきるかは書いていなかったのですが。
boostにしてみます
0690デフォルトの名無しさん
2007/01/26(金) 22:30:45継承したクラスから呼べないんじゃリークするじゃん??
ポリモルタン教えて?
0691デフォルトの名無しさん
2007/01/26(金) 22:31:340692デフォルトの名無しさん
2007/01/26(金) 22:39:320693デフォルトの名無しさん
2007/01/26(金) 22:42:000694デフォルトの名無しさん
2007/01/26(金) 22:45:30protected/private継承にしておけば、基底クラスへの変換は封じられるので問題ない。
0695デフォルトの名無しさん
2007/01/26(金) 22:46:13どんなときにprotected非仮想にするのか分かりません。
使い方も分からない。
0696デフォルトの名無しさん
2007/01/26(金) 22:47:360697デフォルトの名無しさん
2007/01/26(金) 23:10:370698デフォルトの名無しさん
2007/01/26(金) 23:39:39protected: 継承することが前提
非仮想: 多態して使わない。仮想テーブルを使用しない。
と言う事で、protected非仮想destructorは
そのクラスから派生して使用する(基本クラスにする)けれども、
そのクラスのポインタとしては(多態的には)deleteしない
つうことですな。
さらに言うと、仮想関数を使用しない場合は仮想関数テーブルをまったく使用しないため
インスタンスのサイズがコンパクト&メソッドが高速というメリットもありんす
0699デフォルトの名無しさん
2007/01/26(金) 23:50:10俺もprotected非仮想なデストラクタを持つクラスなんて、
作ったこともないし見たこともない(と思っているだけで気付いていないだけかもしれないが)。
0700デフォルトの名無しさん
2007/01/27(土) 00:10:09確かにポリシー的な使い方がほとんどですな。
使う時はprotected非仮想コンストラクタとセットかな。
0701デフォルトの名無しさん
2007/01/27(土) 00:56:10protected非仮想デストラクタなインスタンス。
0702デフォルトの名無しさん
2007/01/27(土) 01:22:31基本クラスから継承させるけど、
Base* b=new Derived();
じゃなくて、
Derived* d=new Derived();
って使えということですか。なるほど。ややこしいですね
>>701
意味がよく分かりません....
0703デフォルトの名無しさん
2007/01/27(土) 01:39:19いや、それはOK……というよりもそうしなきゃ基本クラス使う意味無いじゃない。
Base* b=new Derived();
delete b;
がNGなだけ。
0704デフォルトの名無しさん
2007/01/27(土) 02:16:58レスありがとうございます
となると、bはどうやって解放したらよいのですか?
0705デフォルトの名無しさん
2007/01/27(土) 02:28:26まあ俺はそういうクラスに触る機会ないからわかんないけど
0706デフォルトの名無しさん
2007/01/27(土) 02:35:54ttp://cppemb.blog17.fc2.com/blog-entry-23.html
ここの後半あたり読むといいかも
0707デフォルトの名無しさん
2007/01/27(土) 02:41:15ttp://www.zeroscape.org/cgi-bin/wiki/wiki.cgi?page=shared_ptr+minor+features
あとこことか
まさに>>703の状態をsmartポインタで回避できるのはなぜかがかかれてる.
0708デフォルトの名無しさん
2007/01/27(土) 03:02:07ありがとうございました。よく分かりました。
shared_ptr deleterのテンプレートの使い方にびびりました
すごい
0709デフォルトの名無しさん
2007/01/27(土) 05:34:56この宣言があってるのか、疑問なんですが、
4次元配列を動的に確保したのですが、どうしたらいいのかわかりません。
どうしたらいいのでしょうか?
言語はC++です。
0710デフォルトの名無しさん
2007/01/27(土) 05:44:57・a[num]もしくはa[num][num]が指すのは(int**)型。
・*a[num]が指すのは(int*)型。
・**a[num]はint型。
0711デフォルトの名無しさん
2007/01/27(土) 05:55:31int ****a,i;
const static int
_0=20,
_1=50,
_2=90,
_3=12;
a=new int***[_0];
for(i=0;i<_0;++i){
*a=new int**[_1];
}
for(i=0;i<_1;++i){
**a=new int*[_2];
}
for(i=0;i<_2;++i){
***a=new int[_3];
}
0712デフォルトの名無しさん
2007/01/27(土) 07:38:41ありがとうございます!わかりました〜
0713デフォルトの名無しさん
2007/01/27(土) 08:59:060714デフォルトの名無しさん
2007/01/27(土) 09:46:260715デフォルトの名無しさん
2007/01/27(土) 10:16:320716デフォルトの名無しさん
2007/01/27(土) 11:27:150717デフォルトの名無しさん
2007/01/27(土) 11:38:10むちゃくちゃやな、これ。
0718デフォルトの名無しさん
2007/01/27(土) 13:00:06vector<vector<vector<vector<int> > > >
サイズはresizeで確保するのが簡単ですな。
0719デフォルトの名無しさん
2007/01/27(土) 13:05:03これはひどい
0720デフォルトの名無しさん
2007/01/27(土) 13:15:01IOCCCでやれ
0721デフォルトの名無しさん
2007/01/27(土) 14:33:44Cは忘れてC++やれと勧めるべきか…。
0722デフォルトの名無しさん
2007/01/27(土) 15:03:28再帰を使えばもっときれいになるのか?
#include <iostream>
using namespace std;
int main()
{
int n1=5,n2=10,n3=15,n4=20;
int v=0;
int**** a;
a=new int***[n1];
for(int i=0;i<n1;i++){
a[i]=new int**[n2];
for(int j=0;j<n2;j++){
a[i][j]=new int*[n3];
for(int k=0;k<n3;k++){
a[i][j][k]=new int[n4];
for(int l=0;l<n4;l++){
a[i][j][k][l]=v++;
}
}
}
}
return 0;
}
0723デフォルトの名無しさん
2007/01/27(土) 15:12:00こんなの
a['takahashi'][id]=n
a['takahashi'][age]=50
0724デフォルトの名無しさん
2007/01/27(土) 15:12:55PHPを使えばおk
0725デフォルトの名無しさん
2007/01/27(土) 15:19:12std::map
0726デフォルトの名無しさん
2007/01/27(土) 15:21:170727デフォルトの名無しさん
2007/01/27(土) 15:31:220728wankuma
2007/01/27(土) 15:35:580729ららら
2007/01/27(土) 17:28:50どうしたらいいでしょうねぇ。
SomeClass some;
MethodCaller<SomeClass>::Class(some, &SomeClass::Func);
SomeClass::Func がオーバーロードされている場合、
コンパイルエラーになってしまうんです。
0730ららら
2007/01/27(土) 17:30:19ごめんなさい。関数名が分かりにくいので訂正。
× MethodCaller<SomeClass>::Class(some, &SomeClass::Func);
○ MethodCaller<SomeClass>::Call(some, &SomeClass::Func);
0731デフォルトの名無しさん
2007/01/27(土) 18:03:310732デフォルトの名無しさん
2007/01/27(土) 18:09:150733ららら
2007/01/27(土) 18:11:07た・と・え・ば、の話。
役に立つコードかどうかは別の話ということで。
0734デフォルトの名無しさん
2007/01/27(土) 18:12:56void ChildClass::Method() {
this->ParentClass::Method();
}
ですか?
0735デフォルトの名無しさん
2007/01/27(土) 18:16:06ParentClass::Method()
inherited::Method()とか書けたら良かったのに
0736デフォルトの名無しさん
2007/01/27(土) 18:24:44そうだよ
0737ららら、むじんくん♪
2007/01/27(土) 18:25:570738デフォルトの名無しさん
2007/01/27(土) 18:27:180739デフォルトの名無しさん
2007/01/27(土) 19:07:330740デフォルトの名無しさん
2007/01/27(土) 20:22:32単なるデータ構造を定義する場合は構造体を用いると思いますが、
構造体内に簡単なデータチェックやユーティリティー関数を定義する場合、クラスとするべきなのでしょうか?
例えば、
struct Date {
int nMonth;
SetMonth( int nParamMonth ) {
if ( nParamMonth < 0 || nParamMonth > 12 ) {
nMonth = DEFAULT_MONTH;
} else {
nMonth = nParamMonth;
}
};
int nDay; //以下略。。。
};
みたいな場合は、クラスと「すべき」なんでしょうか。
0741デフォルトの名無しさん
2007/01/27(土) 20:33:24基本的には好きにしろボケの一言。
メンバ変数が0でoperator()しかないファンクタの類をstructにするとか普通だし。
0742デフォルトの名無しさん
2007/01/27(土) 20:33:29構造体で良いのではないだろうか。
0743デフォルトの名無しさん
2007/01/27(土) 20:34:31それはいちいちpublic書きたく無いからじゃないかね>ファンクタ
0744デフォルトの名無しさん
2007/01/27(土) 20:39:35好きにさせて頂きます。
0745デフォルトの名無しさん
2007/01/27(土) 20:52:20俺もclass+publicとstructが同じって概念があれば構わないと思う。
だからインタフェースをstructで定義するもありだと思ってる。
0746デフォルトの名無しさん
2007/01/27(土) 21:12:360747デフォルトの名無しさん
2007/01/27(土) 21:20:39struct hoge
{ };
つまり one keyword, one functionalityということだ
まあ正直どうでもいいと思う
0748デフォルトの名無しさん
2007/01/27(土) 21:56:40#include <iostream>
int main()
{
std::cout << "Hello!" << std::endl;
}
ていうのを書いてあるとおりにしたらエラーなんですけど何が違うのでしょうか?
いきなり挫折しそうです(汗)
0749デフォルトの名無しさん
2007/01/27(土) 22:05:310750デフォルトの名無しさん
2007/01/27(土) 22:21:23エラー E2290 hello.cpp 7:型限定子'std'がクラス名または名前空間ではない(関数
main())
エラー E2379 hello.cpp 7:ステートメントにセミコロン(;)がない(関数 main())
これが中身なんですけど・・・
0751デフォルトの名無しさん
2007/01/27(土) 22:24:55が全ての原因。
開発環境が絡んでくるので環境依存スレへ
0752デフォルトの名無しさん
2007/01/27(土) 22:25:29インクルードパスが通ってない
0753デフォルトの名無しさん
2007/01/27(土) 22:33:100754デフォルトの名無しさん
2007/01/27(土) 22:49:22http://pc10.2ch.net/test/read.cgi/tech/1169039760/
0755デフォルトの名無しさん
2007/01/27(土) 22:51:18がないな。
いや、出ているエラーの原因とは関係ないが。
0756デフォルトの名無しさん
2007/01/27(土) 23:04:29755>
'bcc32hello.cpp'は、内部コマンドまたは外部コマンド、
操作可能なプログラムまたはバッチファイルとして認識されてません。
・・・というのがきました
0757デフォルトの名無しさん
2007/01/27(土) 23:23:43それ用の入門者用ページを最初から100回ぐらい見直した方がいいよ。
0758デフォルトの名無しさん
2007/01/27(土) 23:27:08bcc32 と hello.cpp の間にスペースを入れてないとか?
0759デフォルトの名無しさん
2007/01/27(土) 23:30:58多重継承したときどうするかということ、そして何より自分でtypedefすればすむ(言語仕様に手を加えずにすむ)ということで、
そのような機能は入れなかったとD&Eには書いてある。
0760デフォルトの名無しさん
2007/01/28(日) 00:56:38意味が分かりません
0761デフォルトの名無しさん
2007/01/28(日) 01:08:52VC++には、__superなる独自仕様があるんだよな。
しかし、個人的にはいらない。明示的にベースクラスを修飾するほうが分かりやすい。
曖昧にもならないし。
MSのVC開発チームもなぜこんな仕様を盛り込んだのか。
0762デフォルトの名無しさん
2007/01/28(日) 02:10:460763デフォルトの名無しさん
2007/01/28(日) 02:36:18適当な名前にtypedefしてからならOK
0764デフォルトの名無しさん
2007/01/28(日) 09:30:25boost::int64_t
0765デフォルトの名無しさん
2007/01/28(日) 10:31:47VC++ 7.1 (.NET 2003)以降ならlong longが使える。
その他のコンパイラで、Boostが嫌なら、<windows.h>のLONGLONGもしくはINT64がある。
0766デフォルトの名無しさん
2007/01/28(日) 10:40:030767デフォルトの名無しさん
2007/01/28(日) 10:44:120768デフォルトの名無しさん
2007/01/28(日) 10:51:220769デフォルトの名無しさん
2007/01/28(日) 10:54:06実行時コストを最小にして高レベルプログラミングを実現する目的があったからです。
0770デフォルトの名無しさん
2007/01/28(日) 10:55:46関数と同じことが出来る。
ただコールバックとして呼び出すような場合
関数ポインタを渡すのと違いインライン化できるので
関数呼び出しのオーバーヘッドが無くて高速化できる。
典型的な例がqsortとstd::sortの違い。
あとは関数内にインナー関数のように定義できるとかそんなところか。
0771デフォルトの名無しさん
2007/01/28(日) 11:30:34Cとの互換性をできるだけ確保する必要があったということも多分あると思う。
0772デフォルトの名無しさん
2007/01/28(日) 12:24:44の_tってどんな意味ですか?
0773デフォルトの名無しさん
2007/01/28(日) 12:29:21禿に聞いてくれ。
といっても、ワイド文字あたりの仕様を考えたのは、禿じゃないだろうけど。
たしか禿も、7bit文字圏の人だし。
Wide Character Typeってところじゃないの。せいぜい。
0774デフォルトの名無しさん
2007/01/28(日) 12:34:190775デフォルトの名無しさん
2007/01/28(日) 12:48:070776デフォルトの名無しさん
2007/01/28(日) 13:01:120777デフォルトの名無しさん
2007/01/28(日) 13:03:52Shift+-が面倒なの?
0778デフォルトの名無しさん
2007/01/28(日) 13:08:500779デフォルトの名無しさん
2007/01/28(日) 13:09:170780デフォルトの名無しさん
2007/01/28(日) 13:16:07Cで wchar_t は確かにtypedefed typeだったが
C++では予約語になった
という歴史的経緯
0781デフォルトの名無しさん
2007/01/28(日) 15:34:24#はいらないだろ
0782デフォルトの名無しさん
2007/01/28(日) 15:46:210783デフォルトの名無しさん
2007/01/28(日) 15:48:040784デフォルトの名無しさん
2007/01/28(日) 15:52:250785デフォルトの名無しさん
2007/01/28(日) 15:54:140786デフォルトの名無しさん
2007/01/28(日) 16:06:400787デフォルトの名無しさん
2007/01/28(日) 16:14:060788デフォルトの名無しさん
2007/01/28(日) 16:32:330789デフォルトの名無しさん
2007/01/28(日) 16:36:18foo( const Bar & object, int arg = object.Something() );
できたらいいなあと思うんですが。
0790デフォルトの名無しさん
2007/01/28(日) 16:48:55戻り値の型がありません。
0791デフォルトの名無しさん
2007/01/28(日) 16:51:05T foo( const Bar & object, int arg );
inline T foo( const Bar & object ) { return foo(object, object.Something()); }
0792デフォルトの名無しさん
2007/01/28(日) 16:55:230793デフォルトの名無しさん
2007/01/28(日) 16:57:34すみません。忘れていました。
>>791
ありがとうございます。
でもデフォルト引数が増えていくと定義も増えるので
それで少し面倒かなと思いまして。
T foo( const Bar & object, int arg1 = object.get1(), int arg2 = object.get2(), int arg3 = (以下略
面倒がらずに書いていきたいと思っております…。
0794デフォルトの名無しさん
2007/01/28(日) 17:07:14[問題]
class A
{
a;
aa;
};
class B
{
b;
bb;
};
class B1 : public B{};
class B2 : public B{};
class B3 : public B{};
...
ここで、A, B, B1, B2, B3,...のメンバ
a, aa, B1.b, B1.bb, B2.b, B2.bb,...
を全て継承しているクラスSumを定義したい。
このとき、Sumはどのように書けばよいのでしょうか?
非常に低次元な内容で申し訳ありません。
0795デフォルトの名無しさん
2007/01/28(日) 17:09:570796デフォルトの名無しさん
2007/01/28(日) 17:10:360797デフォルトの名無しさん
2007/01/28(日) 17:20:120798デフォルトの名無しさん
2007/01/28(日) 17:29:26そうですね、一つにまとめる振る舞いは良くないかもしれません…。
設計も見直してみたいと思います。
0799デフォルトの名無しさん
2007/01/28(日) 17:29:36仮想継承しないと曖昧エラーが出るような希ガス
0800デフォルトの名無しさん
2007/01/28(日) 17:37:21その場合、Sumのインスタンスに対して、例えばB1.bとB2.bを区別するにはどうすればいいですか?
Sum obj;
Sum.B1.b
などではうまくいかないようですが
>>799
詳しく教えてくれませんか?
0801デフォルトの名無しさん
2007/01/28(日) 17:37:360802794=800
2007/01/28(日) 17:39:09あと、細かいことですが>>800は
Sum obj;
obj.B1.b;
でした。どっちにせよあてずっぽうで書いたものなのでどうでもよいですが。
0803デフォルトの名無しさん
2007/01/28(日) 17:41:36class B1 : virtual public B {}
........
のように書けば、Bの実体は一つに絞られ曖昧エラーは出ない。
また、仮想継承を使いたくない時は
Sum::B1::b のように限定すれば、B1、B2、B3毎にBの実体が
作られているので、曖昧を回避する事ができる。
0804デフォルトの名無しさん
2007/01/28(日) 17:42:480805デフォルトの名無しさん
2007/01/28(日) 17:43:280806デフォルトの名無しさん
2007/01/28(日) 17:46:55いるため、
public:
using B::b;
などとしてpublicに引っ張り出さないと、クラス外からアクセス
できない。
0807デフォルトの名無しさん
2007/01/28(日) 18:13:43class Sum : public A, public B1, public B2, public B3
とやれば using は不要だわな
それにしてもこの多重継承のパズルはいつ見ても嫌だ
0808デフォルトの名無しさん
2007/01/28(日) 18:17:41class C : public B {};
class D : public B, public C {};
とやってしまうと、Dの基底クラスBに曖昧さなしでアクセスする
事は不可能になってしまうね。大抵のコンパイラでは警告が
出るようだけど。
0809794
2007/01/28(日) 18:24:39B1.bをメンバとして持つクラスSumを定義し、かつB1.bにSumのメンバ関数からアクセスできるようになりました。
(get、set関数はソース省略、コンパイルして動作確認済み)
これを基本形としてコードを書いてゆくことに、特に問題はなさそうでしょうか?
class A
{
a;
public:
get_a();
set_a();
};
class B
{
b;
public:
get_b();
set_b();
};
class B1 : public B{};
class B2 : public B{};
...
class Sum : public A, public B1, public B2,...{};
obj.B1::set_b();
obj.B1::get_b();
0810794
2007/01/28(日) 18:26:39obj.B1::set_b();
のところで、
error C2247: 'B::b' はアクセスできません。'Sum' は 'private' で 'B1' からの継承で使われています。
とのエラーが出ます。
>>807
>それにしてもこの多重継承のパズルはいつ見ても嫌だ
多重継承の方法はあまりよいやり方ではないということでしょうか?
0811デフォルトの名無しさん
2007/01/28(日) 18:31:37class Sum : public B1
のようにpublic継承したら問題はないはず。
多重継承はJavaのような言語にはないのは設計ミスを生じやすい
から取り消されたと聞いているけど、多重継承を使わないと解決
できない問題も存在するのは事実。
ただ他の方法でもできるのに無理に多重継承を使うのはお勧めしない。
訳のわからないエラーに悩まされる事になる。
0812デフォルトの名無しさん
2007/01/28(日) 18:43:31class A : B{
はprivate継承でしたっけ?
0813デフォルトの名無しさん
2007/01/28(日) 19:14:32スマートに解決できない問題というのも確実に存在する。
だからjava系にはinterfaceに限って多重継承を認めてるし、Rubyには限定されたMix-inがあるわけだ。
0814デフォルトの名無しさん
2007/01/28(日) 19:34:14threadを継承した時点で終わるw
0815デフォルトの名無しさん
2007/01/28(日) 21:07:44その通り
0816デフォルトの名無しさん
2007/01/28(日) 21:11:092005はできない。i のスコープの解釈の違いによるものだけど、
どっちが正しいんですか?
for(int i=0; i<100;i++)
{
//do something
}
cout << i ;
0817デフォルトの名無しさん
2007/01/28(日) 21:21:312003でコンパイル出来るとは初耳だ。
VC6でしょ?
2003は何かオプションを付けないとエラーになるだろ。
0818デフォルトの名無しさん
2007/01/28(日) 21:22:25VCは伝統的にそれを破ってたのだが、
VC2005からはデフォルトで規格通りに
振る舞うようになった
0819デフォルトの名無しさん
2007/01/28(日) 21:29:03VC6で作ったものをVC2003でそのままコンパイルしたら通りました
で、VC2003でコンパイルしたものを2005でコンパイルしたら×でした。
0820デフォルトの名無しさん
2007/01/28(日) 21:30:34ありがとうございます。分かりました。
0821デフォルトの名無しさん
2007/01/28(日) 21:43:03VC6:コンパイルできる。/Zcでエラーにできるが、Windows.hとかがエラーだしまくるので使えない
VC7:コンパイルできる(規定)。エラーにするオプションもある。
VC8:コンパイルできない(規定)。/Zc:forScope-でコンパイルできる
だったかなたしか。
0822デフォルトの名無しさん
2007/01/28(日) 21:59:05なるほど、歴史的な経緯がかいまみれますね。
ありがとうございました。
0823デフォルトの名無しさん
2007/01/28(日) 21:59:30気持ち悪いな。標準C++以前の文法じゃん。
0824デフォルトの名無しさん
2007/01/28(日) 22:23:43VC6でコンパイルするときは
#define for if(0);else for
を宣言しておけ。
0825デフォルトの名無しさん
2007/01/28(日) 23:26:47使う機会はまずないと思うが、何故?
0826デフォルトの名無しさん
2007/01/28(日) 23:30:110827デフォルトの名無しさん
2007/01/28(日) 23:40:23string使ってるなら気をつけなよ
マルチプロセッサマシンで死ぬから
0828デフォルトの名無しさん
2007/01/28(日) 23:45:03C++標準に合わせてfor文の中の変数のスコープを制限するため。
そもそも>>816みたいなことが出来ちゃうこと自体が変。
http://www.fides.dti.ne.jp/~oka-t/vc-mfc.html#quirks
0829デフォルトの名無しさん
2007/01/29(月) 00:26:490830デフォルトの名無しさん
2007/01/29(月) 01:07:390831デフォルトの名無しさん
2007/01/29(月) 01:11:55何でtypedefするひつようがありますか?
0832デフォルトの名無しさん
2007/01/29(月) 01:12:06{
MyClass c;
c.DoSomething();
}
のように、敢えてブロックで囲って、デストラクタを呼び出させることはできないということですか?
0833デフォルトの名無しさん
2007/01/29(月) 01:15:11は?何言ってんの?馬鹿?
0834デフォルトの名無しさん
2007/01/29(月) 01:17:250835デフォルトの名無しさん
2007/01/29(月) 01:23:52環境依存依存の型名なので、他の環境に移植した場合最小限の修正で済むように。
0836デフォルトの名無しさん
2007/01/29(月) 01:36:22VC6,2003だと
for(int i=0 ....)
{ }
のiがforループのブロックの外にもスコープを持つ
2005だと持たない。
あくまでfor文の話
0837デフォルトの名無しさん
2007/01/29(月) 06:40:03変じゃない。VC6の頃は標準C++自体が策定段階で、仕様が過渡期だった。
0838デフォルトの名無しさん
2007/01/29(月) 06:42:15その頃の話をしてるんじゃない。今の話をしている。
0839デフォルトの名無しさん
2007/01/29(月) 07:50:34まぁいいや。
・VC6は当時の事情によりそうなっていたが、今となっては変。
・VC6を使うなら、>824のような対策をとることお勧め。
ってことで。
0840デフォルトの名無しさん
2007/01/29(月) 09:00:080841デフォルトの名無しさん
2007/01/29(月) 10:02:050842デフォルトの名無しさん
2007/01/29(月) 10:02:330843デフォルトの名無しさん
2007/01/29(月) 10:07:27MFCなくてもGUI作れる?
0844デフォルトの名無しさん
2007/01/29(月) 10:13:450845デフォルトの名無しさん
2007/01/29(月) 11:03:54つーか、スレ違いだがね。
0846デフォルトの名無しさん
2007/01/29(月) 11:04:370847デフォルトの名無しさん
2007/01/29(月) 12:37:09なんか問題あるか?
0848デフォルトの名無しさん
2007/01/29(月) 12:43:380849デフォルトの名無しさん
2007/01/29(月) 14:25:53MFC使うくらいなら、↓使えよ。
http://www.torjo.com/win32gui/
0850デフォルトの名無しさん
2007/01/29(月) 14:31:38いや、スマン、疑問に思う根底の部分に何か思い当たる部分があるのか聞きたかっただけ。
0851デフォルトの名無しさん
2007/01/29(月) 17:43:580852デフォルトの名無しさん
2007/01/29(月) 17:47:570853デフォルトの名無しさん
2007/01/29(月) 17:55:360854デフォルトの名無しさん
2007/01/29(月) 19:12:000855デフォルトの名無しさん
2007/01/29(月) 19:15:27期待ageなライブラリだな
0856デフォルトの名無しさん
2007/01/29(月) 20:32:160857デフォルトの名無しさん
2007/01/29(月) 21:06:030858デフォルトの名無しさん
2007/01/29(月) 21:24:43クラスXの入力イテレータを受け取りたいんですが
どう書いたらよいでしょうか。
int Uketorimasu(InputIterator<X> kokokara,InputIterator<X> kokomade)
コンパイラがエラーになってます??
0859デフォルトの名無しさん
2007/01/29(月) 21:31:25一番簡単なやりかたってなんですか?
stringstreamも_ltoa_sも2,3行必要なので、なんかやりづらい
自分で変換関数を作るのが良いですか?
0860デフォルトの名無しさん
2007/01/29(月) 21:33:200861デフォルトの名無しさん
2007/01/29(月) 21:41:20メンバーで知ってる人いないから使いづらい。。
共有のソースだし
0862デフォルトの名無しさん
2007/01/29(月) 21:46:570863デフォルトの名無しさん
2007/01/29(月) 21:52:12FILE *fp=fopen( stdprintf("%d.txt",i).c_str(), "rb");
とか書けて幸せだが、実装に要したコストを考えると微妙。
0864デフォルトの名無しさん
2007/01/29(月) 22:02:47template<typename InputIterator>
int Uketorimasu(InputIterator kokokara, InputIterator kokomade)
>>863
文字列の長さを知る方法があれば、それを元にvsnrpintfを呼ぶだけだから、大したことはないと思うのだが。
もっとも、boost::formatが似たようなことをやっている。
http://www.kmonos.net/alang/boost/classes/format.html
0865デフォルトの名無しさん
2007/01/29(月) 22:05:18その2,3行の関数をinlineでヘッダに書いてやれば
マクロみたいに使えるが
0866デフォルトの名無しさん
2007/01/29(月) 22:09:33確かに...を使うなら、vsnprintfを呼ぶだけだからたいしたことはない。
%sに10とかstd::stringオブジェクトを突っ込んだりすると即死なのが
我慢できればそれでも良かったかもね。
0867デフォルトの名無しさん
2007/01/29(月) 22:13:41俺は思い切ってstd::stringをラップして http://tricklib.com/cxx/dagger/xstring.h を作った。
FILE *fp=fopen(xstring().format("%d.txt",i), "rb"); // .c_str() は不要。
とか書けて幸せ。std::stringの全メンバをオーバーライドしてるんで実装には結構手間がかかった。
0868デフォルトの名無しさん
2007/01/29(月) 22:19:17それを継承して再定義した関数も、implicitな感じで__stdcallになるんですか?
0869デフォルトの名無しさん
2007/01/29(月) 22:24:21C++の設計思想的にそれはないハズ。
0870デフォルトの名無しさん
2007/01/29(月) 22:29:13それはわからないが、Platform SDKのCOM関係のヘッダでは
全てにいちいちSTDMETHODCALLTYPE(__stdcallと定義されている)を付けている。
0871デフォルトの名無しさん
2007/01/29(月) 22:32:45その派生もSTDCALLにならざるを得ない。
0872デフォルトの名無しさん
2007/01/29(月) 22:39:39いやだから、C++の設計思想的にそれはないだろ。
継承階層が深くなったりしてるときに深い階層にある継承元クラスの定義で
継承先のクラスが影響を受ける訳にはいかない。
仮想関数としてオーバーライドさせたい場合は自分でSTDCALLを
定義せにゃならんハズ。
0873デフォルトの名無しさん
2007/01/29(月) 22:54:55そうでなければ、その仮想メソッドをどうやって呼び出すというのか。
0874デフォルトの名無しさん
2007/01/29(月) 22:57:42継承元クラスのポインタにキャストすりゃ一発だろ。
0875デフォルトの名無しさん
2007/01/29(月) 23:00:540876デフォルトの名無しさん
2007/01/29(月) 23:12:18その段階で尚、涙目で「何かあるフリ」だけしておこうっていう間違った根性はさらに笑えるかも。
0877デフォルトの名無しさん
2007/01/29(月) 23:15:49class b{
virtual int __stdcall f(){ return 0;}
};
class c : b{
virtual int f(){ return 0;}
}
をコンパイルしてから云ってもらおうか(w
0878デフォルトの名無しさん
2007/01/29(月) 23:22:56エラー E2113 test.cpp 17: 仮想関数 'derived::whoami()' は基本クラス 'base' と矛盾する
#include <iostream>
using namespace std;
class base
{
public:
virtual void __stdcall whoami()
{
cout << "I am base" << endl;
}
};
class derived : public base
{
public:
virtual void whoami()
{
cout << "I am derived" << endl;
}
};
int main()
{
base* b= new derived();
b->whoami();
delete b;
return 0;
}
0879デフォルトの名無しさん
2007/01/29(月) 23:23:47話とまったく違うコードを出してくる奴w
0880デフォルトの名無しさん
2007/01/29(月) 23:25:100881デフォルトの名無しさん
2007/01/29(月) 23:25:19>得意気な奴が反論できなくなって敗れ去る瞬間はいつ見てもおかしいが、
>その段階で尚、涙目で「何かあるフリ」だけしておこうっていう間違った根性はさらに笑えるかも。
0882デフォルトの名無しさん
2007/01/29(月) 23:28:25必ず最後の ; を忘れてしまうのは私だけ?
0883デフォルトの名無しさん
2007/01/29(月) 23:30:30872,874はいわば負け犬(ルーザー)。
876からの展開は向きが曖昧なので不明
0884デフォルトの名無しさん
2007/01/29(月) 23:32:44も最後の2行はあってると思うけど
最初の3行は意味が分からんが
>>874は変だと思うけど
0885デフォルトの名無しさん
2007/01/29(月) 23:34:00いつもはビシッと正解が出るのに
0886デフォルトの名無しさん
2007/01/29(月) 23:34:45わざわざ括弧書きで書くとこがかわいい
0887デフォルトの名無しさん
2007/01/29(月) 23:34:46そこからなぜ、>>875-876 のような流れになるん?
0888デフォルトの名無しさん
2007/01/29(月) 23:36:22STDCALLにならざるを得ないって、STDCALLを宣言しなくて良いのか
しないといけないのか、どっちにもとれる
0889デフォルトの名無しさん
2007/01/29(月) 23:37:16>>>872
>も最後の2行はあってると思うけど
>最初の3行は意味が分からんが
お前、まさか、class 定義内で使う using の理由(←これが
まさにその「最初の3行」)を知らんのか?
0890デフォルトの名無しさん
2007/01/29(月) 23:37:23__stdcallを宣言しなくてもいいって言ってるように見えるけど
0891デフォルトの名無しさん
2007/01/29(月) 23:39:06お前、日本語勉強したほうが良いぞ
0893デフォルトの名無しさん
2007/01/29(月) 23:44:160894デフォルトの名無しさん
2007/01/29(月) 23:50:47正解もなにも、喧嘩してる両者の主張が同じなんですが。
0895デフォルトの名無しさん
2007/01/29(月) 23:53:570896デフォルトの名無しさん
2007/01/30(火) 00:11:25足りてなかったかもね。
言いたかったのは要するに>>873で、「STDCALLにせずに呼べるなら
呼んだ時死ぬ」というだけで、explicit/implicitについては言及してない。
>継承階層が深くなったりしてるときに深い階層にある継承元クラスの定義で
>継承先のクラスが影響を受ける訳にはいかない。
について「影響」の範囲にも拠るんだろうけど、virtualな以上影響なしなわけ
ねーということが言いたかった。ついカッとなって書いた。反省している。
0897デフォルトの名無しさん
2007/01/30(火) 00:50:190898デフォルトの名無しさん
2007/01/30(火) 01:20:34回線切って一酸化炭素を胸一杯吸い込んでこい
0899デフォルトの名無しさん
2007/01/30(火) 04:58:43QtにVC用ポトペタプラグインあるでよ
0900デフォルトの名無しさん
2007/01/30(火) 05:45:37大量の型名を宣言しているものの、全てintの別名でしかないので、
コンパイラで型チェックされなくてバグの温床になりそうです。
どのように対応するのが一般的なのでしょうか?
0901デフォルトの名無しさん
2007/01/30(火) 06:25:54その型をclassにする。enumにするだけでも違うかもしらん。
0902デフォルトの名無しさん
2007/01/30(火) 09:13:180903デフォルトの名無しさん
2007/01/30(火) 10:02:29僕は更にトチ狂って、文字列版 boost.bind をコンセプトに
http://naiv.info/werk/kalas_alpha.zip とか作ってたぜ!
FILE * fp = wfopen( sprint(wstring(),_d%L".txt",10).c_str(), "rb" );
spirit 見たいに式を保存できるようにする予定が途中で飽きて、そのままだけど…
しかも、stream のラッパーだから遅いし。
0904デフォルトの名無しさん
2007/01/30(火) 10:11:00boostに強いtypedefというか、別の型にしてくれるやつがあった気がするんだが思い出せん。
0905デフォルトの名無しさん
2007/01/30(火) 10:23:54ttp://www.boost.org/boost/strong_typedef.hpp
これか?
0906デフォルトの名無しさん
2007/01/30(火) 10:26:560907901
2007/01/30(火) 10:56:24.net2003の環境でint以外の変数もtypedefしているので、
boostを使ってみます、ありがとうございました。
0908デフォルトの名無しさん
2007/01/30(火) 12:05:40RTTIの関係でサイズが肥大化したりしないのかな
最適化の段階で消える?
0909デフォルトの名無しさん
2007/01/30(火) 12:17:040910デフォルトの名無しさん
2007/01/30(火) 14:13:420911デフォルトの名無しさん
2007/01/30(火) 14:31:020912910
2007/01/30(火) 14:36:300913デフォルトの名無しさん
2007/01/30(火) 14:37:580914デフォルトの名無しさん
2007/01/30(火) 14:59:30普通の人が思うようには動作しない、と思って使う分にはいいんじゃないの。
なんの役に立つかは知らないけど。
0915デフォルトの名無しさん
2007/01/30(火) 15:05:260917デフォルトの名無しさん
2007/01/30(火) 15:28:580918デフォルトの名無しさん
2007/01/30(火) 15:32:12auto_ptrのコピーコンストラクタは非constオブジェクトを要求。
0919デフォルトの名無しさん
2007/01/30(火) 16:34:140920デフォルトの名無しさん
2007/01/30(火) 16:36:450921デフォルトの名無しさん
2007/01/30(火) 17:25:590922デフォルトの名無しさん
2007/01/30(火) 21:20:47すみませんこれの意味が分からないのですが、
誰か教えてください
0923デフォルトの名無しさん
2007/01/30(火) 21:38:52規格書の14.3.3 Template template arguments
0924デフォルトの名無しさん
2007/01/30(火) 21:44:02ありがたまきん
ググって見ます
0925デフォルトの名無しさん
2007/01/30(火) 22:46:51template < class T > struct Foo ; //OK
template < typename T > struct Bar ; //OK
template < template<typename> class T> struct Hoge ; //OK
template < template<typename> typename T>struct Moke ; //Error
なんでテンプレートテンプレートパラメータの、この部分は、
classじゃ無ければならないんだろう。なぜここはtypenameにできないのだろう。
0926デフォルトの名無しさん
2007/01/30(火) 22:51:530927デフォルトの名無しさん
2007/01/30(火) 23:16:21個人的には、typenameの方がすきなのだけれど。
でも、C++ template Metaprogrammingに書いてあるように、
これはちょっと分かりにくい。
template < typename T, typename T::type N>
class Foo ;
0928デフォルトの名無しさん
2007/01/30(火) 23:22:580929デフォルトの名無しさん
2007/01/30(火) 23:23:38おもしろいんだけどな
0930デフォルトの名無しさん
2007/01/30(火) 23:36:16だったんで原著を買うことにした。amazonで20000円とかで売ってるヤシいたけど
さすがにそんな値段では買いたくない
0931デフォルトの名無しさん
2007/01/31(水) 19:51:45wcout.imbue(locale("japanese"));
wcout << 12345 << std::endl;
cout << 12345 << std::endl;
このプログラムを実行すると、実行結果は
12,345
12345
となります
カンマはいらないんだけど、これを消すにはどうしたらいいんでしょうか
0932デフォルトの名無しさん
2007/01/31(水) 20:09:350933デフォルトの名無しさん
2007/01/31(水) 20:24:261,2,4,8,32,64,128,4096を変換したいのですが
#include<stdio.h>
int main (void)
{
iny i,j,n;
char roman[7]={'M','D','C','L','X','V','I'};
int num[7]={1000,500,100,50,10,5,1};
scanf("%d"<&n);
for(i=0;n;i++);
{
for(j=0;j<n/num[i];j++)
putchar(roman[i]);
n%=num[i]
}
return 0;
}
でやってみると1回しか変換できないのですが、
いくつもの値を一度に変換するにはどうすればいいのでしょうか
0934931
2007/01/31(水) 20:24:50ありがとうございます
出力は出来たのですが、ロケールを元に戻すにはどうすればいいんでしょうか
locale(locale("japanese"), "C", locale::numeric);
wcout << 12345 << std::endl;//12345と出力。期待の動作
wcout.imbue(locale("japanese"));
wcout << 12345 << L"あいうえお" << std::endl;//12,345あいうえおと出力。期待の動作
locale(locale("japanese"), "C", locale::numeric);
wcout << 12345 << std::endl;//12,345と出力。ここも12345と出力したい
cout << 12345 << std::endl;//12345と出力。期待の動作
0935デフォルトの名無しさん
2007/01/31(水) 20:39:54好きな方を選べ。2度と来るんじゃねえぞ。
くだすれC言語(初心者用)
http://pc10.2ch.net/test/read.cgi/tech/1153542424/
C/C++の宿題を片付けます 82代目
http://pc10.2ch.net/test/read.cgi/tech/1169575464/
0936デフォルトの名無しさん
2007/01/31(水) 20:47:040937デフォルトの名無しさん
2007/01/31(水) 20:57:49そういじめるな
>>936
もっと大きくなってからもどっておいで。
0938デフォルトの名無しさん
2007/01/31(水) 23:01:37iny という型をどこかで宣言する必要がある。
0939デフォルトの名無しさん
2007/01/31(水) 23:11:04日本語版は訳がみょうちきりんだから原著読んだほうが多分いい。
がんばって買いなされ
0940デフォルトの名無しさん
2007/01/31(水) 23:16:230941デフォルトの名無しさん
2007/01/31(水) 23:17:30newする場合と通常の固定長で宣言する場合に違いはありますか。
コンパイラの実装による、が答えなのかもしれませんがよろしくお願いします。
0942デフォルトの名無しさん
2007/01/31(水) 23:17:31ワロタ
0943デフォルトの名無しさん
2007/01/31(水) 23:31:23最大サイズは規定されていませんが、処理系が保証すべき最小サイズは
規定されているので、移植性を考えるとそれが最大サイズと言えます。
0944デフォルトの名無しさん
2007/01/31(水) 23:32:27imbue() すればいいんじゃないの?
0945デフォルトの名無しさん
2007/01/31(水) 23:39:090946デフォルトの名無しさん
2007/01/31(水) 23:46:11C++は知らないけど、Cだと32Kくらいだよな。
小さすぎ。
0947デフォルトの名無しさん
2007/01/31(水) 23:47:320948デフォルトの名無しさん
2007/02/01(木) 00:08:10string word;
while (infile >> word) {
cout << word << endl;
}
以上のプログラムを改良してコメント行を表示させない仕様にしたい。
コメントの種類は下記の2種とする。
1) //から文末or
2) /*から*/
なにかスマートな方法はないでしょうか?
0949デフォルトの名無しさん
2007/02/01(木) 00:14:44改良って言うか、一からつくるのとかわらんじゃん。。。
0950デフォルトの名無しさん
2007/02/01(木) 00:19:020951デフォルトの名無しさん
2007/02/01(木) 00:19:03頭がゴチャゴチャするぞ。
0952デフォルトの名無しさん
2007/02/01(木) 00:29:03デフォルトでprivateがクラス、publicが構造体くらいしか思いつきません...
0953デフォルトの名無しさん
2007/02/01(木) 00:31:070954デフォルトの名無しさん
2007/02/01(木) 00:35:58こんなかんじのことをすることはできないでしょうか?
struct a{ float v;}
mpl::map<
pair <char, a.v=8>,
pair <unsigned char, a.v=9>,
pair <int char, a.v=10>,
> type2valuedStr;
at<char,type2valuedStr>::type a_char;
0955デフォルトの名無しさん
2007/02/01(木) 00:40:02いいツールがないでしょうか?
0956デフォルトの名無しさん
2007/02/01(木) 00:41:250957デフォルトの名無しさん
2007/02/01(木) 00:42:330958デフォルトの名無しさん
2007/02/01(木) 00:46:160959デフォルトの名無しさん
2007/02/01(木) 00:51:57bison と flex を使って、文字への色付けツール作るといいよ。
いい練習になる。
0960デフォルトの名無しさん
2007/02/01(木) 01:42:470961デフォルトの名無しさん
2007/02/01(木) 01:45:23可変長のバイト列のバッファを作りたくて、とりあえず vector<unsigned char> buffer;
としました。
で、ここに unsigned int の変数のデータや unsigned char の配列のデータを
追加したい場合、どうすべきでしょうか?
今はデータを1バイトずつ push_back() とかしてるんですが、あまりにベタだと思うんで、
もしかして STL の範囲でもっと楽にできたりしますか?
buffer をメンバに持つ、複数の型を push_back できるようなクラスを作るというのは
おおげさですかね?
0962デフォルトの名無しさん
2007/02/01(木) 01:47:550963デフォルトの名無しさん
2007/02/01(木) 01:55:250964デフォルトの名無しさん
2007/02/01(木) 02:06:490965デフォルトの名無しさん
2007/02/01(木) 02:15:350966デフォルトの名無しさん
2007/02/01(木) 02:17:570967デフォルトの名無しさん
2007/02/01(木) 03:02:200968デフォルトの名無しさん
2007/02/01(木) 03:09:18どうするのがいいのでしょう。
改行コードが現れるまで1文字ずつfgetcで読んでいって長さを測り、
メモリに格納していくという感じになるのでしょうか。
istream等を使うと楽に書けますか?
BCBのVCLでいう、TStringListと、そのLoadFromFileみたいなのを書きたいのですが。
0969デフォルトの名無しさん
2007/02/01(木) 03:11:20std::getline
0970デフォルトの名無しさん
2007/02/01(木) 08:54:22unsigned int uint;
unsigned char uchar[N];
vec.insert(vec.end(), reinterpret_cast<unsigned char*>(&uint), reinterpret_cast<unsigned char*>(&uint) + sizeof(uint));
vec.insert(vec.end(), uchar, uchar + LEN);
0971デフォルトの名無しさん
2007/02/01(木) 09:50:24思いつく対処法は以下しかなく、どれも困難です。定石などがありましたら是非ご教授下さい。
・要素への参照を取得する前にresave()、
push_backされる要素が幾つあるかが分からないので困難。
・思い切って参照ではなく添え字を記録しちゃう、
でも何か違うような気がする。
0972961
2007/02/01(木) 10:04:44>>970
ついでにお聞きしてしまうんですが、このように vector の insert やコンストラクタの
引数に2つのポインタを渡して動くのが、ちょっと理解できてないんですが...
vector のメンバにには、普通のポインタの引数を取る型のものってないですよね?
で、デバッガで追うとどうも2つのイテレータの値をもつタイプの関数が呼ばれている
ようなんですが、テンプレートに渡した型のポインタはイテレータと同一視できる
という事なんでしょうか?
かなりアホなことを聞いているかもしれませんが...
0973デフォルトの名無しさん
2007/02/01(木) 10:27:23・思い切って list にしちゃう
0974デフォルトの名無しさん
2007/02/01(木) 10:29:14ポインタはイテレータとしての要件をすべて満たす。
イテレータというコンセプトのモデルであるとも言う。
0975デフォルトの名無しさん
2007/02/01(木) 14:32:44ってこれ歴史常識じゃないのか…
0976デフォルトの名無しさん
2007/02/01(木) 17:29:23source highlight
0977デフォルトの名無しさん
2007/02/01(木) 20:01:55class base {};
class derived : public base {};
派生クラスのコンテナのイテレータを
vector<derived*> v;
vector<base*>::iterator i = v.begin();
のように基底クラスのコンテナのイテレータに自動的に変換して欲しいと
感覚的には思うんですが、なぜそうなっていないのでしょうか???
0978デフォルトの名無しさん
2007/02/01(木) 20:14:580979デフォルトの名無しさん
2007/02/01(木) 20:20:07それができたら、コンテナにいろんな型を混在
させることが出来ちゃうからじゃないか?
0980デフォルトの名無しさん
2007/02/01(木) 20:37:27それは駄目だろう。
例えば、こういうのもあったときに
class derived2 : public base{};
vector<derived*>v;
vector<base*>::iterator i = v.begin();
が出来たら
*i = new derived2;
と書けてvector内の型安全性が損なわれる。
0981977
2007/02/01(木) 20:51:53で型安全性が損なわれるという理由がよく分からないです。
base* p = new derived1;
p->func();
delete p;
p = new derived2;
p->func();
delete p;
↑これは普通ですよね。
↓これも
void func(base* p) {}
derived1* p = new derived1;
func(p);
駄目な例があると分かり易いんですが…。
0983977
2007/02/01(木) 21:04:00理解しました。
derived* array[10];
base* p = array[0];
p = new derived2;
こういうことをしようとしていたんですね(でもこれはコンパイル通るんですね…)
どうもでした〜。
0984デフォルトの名無しさん
2007/02/01(木) 21:16:230985デフォルトの名無しさん
2007/02/01(木) 21:19:07ポインタならDerivedT*にはBaseT*が代入できるが
イテレータはショボイからできない
例:--相当のことがができるイテレータは
5種類のSTLイテレータのうち2種類しかない
0986デフォルトの名無しさん
2007/02/01(木) 21:26:09間違ってる。
derived* array[10];
base** p = &array[0];
*p = new derived2;
まだこっちの方が正確。
0988985
2007/02/01(木) 21:52:38derived1,derived2がbaseを継承しているとして
vec<derived1*> v1;
vec<derived2*> v2;
for(vector<derived1*>::iterator it = v2.begin();it!=v2.end();++it){
//v2のイテレータでv1を処理。これはおかしい
}
0989デフォルトの名無しさん
2007/02/01(木) 22:04:14デバッグモードではCPU使用率が20〜35%に押さえられているのですが、
リリースモードにすると使用率が常時100%に跳ね上がってしまいます。
これの原因分かる方いませんか?
もしくは原因究明の方法が分かる方いませんか?
(プロファイラは使えません^^)
0990デフォルトの名無しさん
2007/02/01(木) 23:43:42下記のマクロをLOG(msg)のように使いたいのですが。。。
#define LOG(msg,level) writeLog(__FILE__,__LINE__,msg,level)
void writeLog(char* f,int line,char* msg,int level=0)
0991デフォルトの名無しさん
2007/02/01(木) 23:47:39とりあえず環境依存なのでスレ違い。
0992デフォルトの名無しさん
2007/02/02(金) 00:07:31ば多少は使える情報があるかもしんない
ところで次スレは
0993デフォルトの名無しさん
2007/02/02(金) 00:22:250994デフォルトの名無しさん
2007/02/02(金) 00:24:490995デフォルトの名無しさん
2007/02/02(金) 00:25:38これはひどい
0996デフォルトの名無しさん
2007/02/02(金) 00:26:450997デフォルトの名無しさん
2007/02/02(金) 00:28:040998デフォルトの名無しさん
2007/02/02(金) 00:31:210999デフォルトの名無しさん
2007/02/02(金) 00:32:271000デフォルトの名無しさん
2007/02/02(金) 00:32:36初めての1000、取れますように。
10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。