C++相談室 part13
レス数が1000を超えています。これ以上書き込みはできません。
0001デフォルトの引き篭もり
NGNGelegantなソースを目指してね。
( ^-゚).。o(きっと関連URLは >>2-5 辺りだよ)
0002デフォルトの名無しさん
NGNGC++ Final Draft International Standard
http://www.kuzbass.ru/docs/isocpp/
ISO/IEC 14882 International Standard
http://www.kuzbass.ru/docs/ansi_iso_iec_14882_1998.pdf
■STL Libraries■
Boost http://www.boost.org/
STLport http://www.stlport.org/
Loki http://www.moderncppdesign.com/
Loki for VC7(LokiPort) http://www.geocities.com/rani_sharoni/LokiPort.html
■過去スレ■
Part1 http://piza.2ch.net/tech/kako/980/980175292.html
Part2 http://pc.2ch.net/tech/kako/996/996640937.html
Part3 http://pc.2ch.net/tech/kako/1003/10038/1003832761.html
Part4 http://pc.2ch.net/tech/kako/1009/10090/1009071535.html
Part5 http://pc.2ch.net/tech/kako/1014/10142/1014217496.html
Part6 http://pc.2ch.net/tech/kako/1018/10184/1018454705.html
Part7 http://pc.2ch.net/tech/kako/1021/10217/1021787032.html
Part8 http://pc3.2ch.net/test/read.cgi/tech/1025010364/ (HTML 化待機中)
Part9 http://pc3.2ch.net/test/read.cgi/tech/1027347982/ (HTML 化待機中)
Part10 http://pc3.2ch.net/test/read.cgi/tech/1029315669/ (HTML 化待機中)
Part11 http://pc3.2ch.net/test/read.cgi/tech/1032345774/ (HTML 化待機中)
part12 http://pc3.2ch.net/test/read.cgi/tech/1035005882/
0003デフォルトの名無しさん
NGNGVisualC++相談室 3 http://piza2.2ch.net/tech/kako/993/993186053.html
VisualC++相談室 4 http://pc.2ch.net/tech/kako/1002/10021/1002165477.html
VisualC++相談室 5 http://pc.2ch.net/tech/kako/1006/10068/1006834463.html
VisualC++相談室 6 http://pc.2ch.net/tech/kako/1011/10116/1011615035.html
VisualC++相談室 【7】 http://pc.2ch.net/tech/kako/1017/10178/1017843192.html
VisualC 相談室 【8】 http://pc.2ch.net/tech/kako/1022/10224/1022499000.html
C++Builder相談室 http://piza2.2ch.net/tech/kako/969/969458279.html
新C++Builder相談室 http://pc.2ch.net/tech/kako/997/997074601.html
C Builder相談室 Part3 http://pc3.2ch.net/test/read.cgi/tech/1016065855/
STLスレッド http://pc.2ch.net/tech/kako/1004/10042/1004287394.html
STLスレッド part2 http://pc3.2ch.net/test/read.cgi/tech/1026793823/l50
0004あぶねー
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1037795348/l50
0005無理矢理
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1036572120/l50
C++規格書のココを読め
http://pc3.2ch.net/test/read.cgi/tech/1026005968/l50
00061
NGNG0007デフォルトの名無しさん
NGNG0008デフォルトの名無しさん
NGNG! ヽ / }
ヽ、 ,! -─‐- 、{ ノ
/´∀` r`'、´ <オマエモナ
/ ,.-─- 、 ヽ、.ヽ
!/ ヽ、._, ニ|
. { ,'
ヽ /,ソ
. ヽ、.____r',/
汎用度::中汎用 << 超汎用 << 小汎用 <<ミニ汎用
優秀度::C++ << C << ASM << CPU配線・回路
0009デフォルトの名無しさん
NGNGbool operator<< (const Thing& lhs, const Thing& rhs)
{
return lhs.Wonderfulness > rhs.Wonderfulness;
}
0010デフォルトの名無しさん
NGNG[Win32]
g++ << VC++7[.Net] << bcc32 フリー << C++Builder <= VC++6
[Linux&Unix]
g++ <= intelコンパイラ
0011デフォルトの名無しさん
NGNG0012デフォルトの名無しさん
NGNG用いることはできないのでしょうか?
int mem_fn_mine()
{
class SomeObject
{
public:
SomeObject( const char* i_name ) : name( i_name ) {}
void Print() { cout << name << endl; }
private:
const char* name;
};
std::vector<SomeObject> v;
こんな感じです。
g++-3.2 cygwinです。
0013デフォルトの名無しさん
NGNG0014デフォルトの名無しさん
NGNGやっぱりテンプレートがからんだものはnamespaceレベルで使うべきですかね
特別にローカルクラスが必要ってわけでもないので、どうでもいいんですが。。
0015デフォルトの名無しさん
NGNG行われると思った。だから実体化の時点では、関数内で定義されている
ローカルクラスを見ることができないと。
0016デフォルトの名無しさん
NGNG用語の問題だが local class といったら関数内で定義したクラスのこと。
int main() {
struct S {...}; // これ
}
クラス内で定義したクラスは nested class な。このあたりは規格書で用語
が決まってるから、誤解を招かぬよう統一して下さいな。
ANSI C++ の規格では local class はテンプレートパラメタとして使えない、
nested class は OK のはず。class SomeObject の定義を public に移して
みたら?
0017デフォルトの名無しさん
NGNG0018デフォルトの名無しさん
NGNGnested classならそれらがテンプレート化クラスであろうと
テンプレートパラメータとして使うことはgccにおいて問題ありませんでした。
細かいところまでやってみてないのでなんとも言えませんが、
local classはテンプレートが絡んだときには、少し特殊なものとなる
という認識でいればよさそうですね。
0019債務不履行の名無しさん
NGNG0020デフォルトの名無しさん
NGNG,、ノノ:レ
,,:i,i/:'/'~/ ,/!
,、_,ノ:!~;'彡-三ヾ、 ,从i ,
,i[ !' ~ ~:;;、'~'ヽ ノ ::;i!.ノi
,/゙ ,ヽ!ゝ ~ii::ミ λ ノ'~ :;レ' :;;!
゙i;: `>_:,;ii,ミミミi ,v'.i ,ノ ::;/ ::;ノ _,,、-,-
'!'~`~)||!!ヾ!~ ::i,) ,从,レ :;;/ :;ノ彡-''~゙ :i!'゙
、彡ノノノ ::ii人 /;/;;ノ゙;;;::i-'<、,_,,、-'~
,i'゙~i::ノ゙;: .:: ::iiヾ i', ,ノ゙/-彡'~: ::_;;_;;;::::ヾ、--、_
i゙::i .::; ノ: ,iヾ ::゙i、_ __,,,ノv:レ从)ivト'|'゙::;;-''''~ ;;__ _;;ヾ、|~ ̄
'゙i,:;::/ ;;-'ノ' ~ヾ〉~''~゙ ---、, :;;ノ:i'从iiiニ=彡三ミミミ;;::i, ゙'i,
!,;::i i ;!'゙ ::;i'゙ ~゙彡;゙ノ,レ'~,ノ゙!!=-ii、,゙ヽ, 'i;::i, i
i,i::iミ゙ ::;i 彡彡<゙;;,ノ'二~' 彡 i 彡!,i'
レi; ::;i,; ,、-彡'~~∠゙~ 彡i'゙ '~´
ヽ, ::ゝ, 、 、___ノノ'~~フ ̄ '゙
ヾ、ヽ、i :ゝ,゙'i ''-ミミ= ~'-<
ヾ、;;::::!!、 ゙i.|トトi::::::ミ'~ ̄~
~'ヾヾ-,、____ !__::::ヽ,
,ノ:::;/ ~゙ヽ):::::;)
ノ::;ノ' /゙:::;/
,-'''"ン" /::;/
__,,、、、-‐/'"i-、(、,、,,,,,/゙/
二='''、::::::!、-┘ヾ--/:::;/ゝ
 ̄ ̄ ̄ ,、、-/ー'゙ノ::;∧,、,
∠二―┴,=< ::;ノヾ、,」ニ=ー
./:,、┴゙
//
!'
0021デフォルトの名無しさん
NGNG>local classはテンプレートが絡んだときには、少し特殊なものとなる
困ったときは、とりあえず規格書を見ましょうよ。PDF 版なら US$18
で入手できるし。
http://webstore.ansi.org/ansidocstore/product.asp?sku=INCITS%2FISO%2FIEC+14882%2D1998
14.3.1 Template type arguments
2 A local type, a type with no linkage, an unnamed type or a type compounded from
any of these types shall not be used as a templateargument for a template
typeparameter.
0022デフォルトの名無しさん
NGNGコレを見ると $18 払う気がしない・・・。
0023質問厨
NGNG{
foo();
~foo();
static void threadFunc(foo *p);
boo m_boo;
};
void foo::threadFunc(foo *p)
{
while(1)
{
p->m_boo.xxx();
}
}
クラスfooはスレッドを扱う。そのスレッドはfooの静的でないメンバbooを扱う
このクラスfooがデストラクトされるときに、まずスレッドが止まって、次にbooのデストラクタが呼ばれたい
どうすればいいでしょうか?
0024デフォルトの名無しさん
NGNG{
foo* t = new foo();
0025デフォルトの名無しさん
NGNG0026質問厨
NGNGそうするとm_booがさきにデストラクトされるとp->m_boo.xxx()のところで
おかしくなりませんか?
0027デフォルトの名無しさん
NGNG( ´∀`)/<>>21先生!漏れクレジットカード持ってないYO!どうしよう
_ / / / \_____________________
\⊂ノ ̄ ̄ ̄ ̄\
||\ \
||\|| ̄ ̄ ̄ ̄ ̄||
|| || ̄ ̄ ̄ ̄ ̄||
.|| ||
0028デフォルトの名無しさん
NGNG先にデストラクトするのは変じゃん
0029デフォルトの名無しさん
NGNGタイミングをはかりたいなら、クリティカルセクション
やらミューテックスを使う。
0030デフォルトの名無しさん
NGNG22 先生に訊いてみてください。
0031デフォルトの名無しさん
NGNGとりあえず class foo の外側でロックかけなきゃいけなさそうだが。
0032デフォルトの名無しさん
NGNG0033デフォルトの名無しさん
NGNGググったけど見つからないです。
自力で、の意味は(OSの組み込み機能とかではなく)自分でビットマップとかを使って描きたいという事です。
(長さの割合とかの計算がよくわからない)
0034デフォルトの名無しさん
NGNG0035デフォルトの名無しさん
NGNGおれも座標とかの計算苦手。でも昔仕事でやったことある。嫌々。
Windowsでの話になるけど、描画用のウィンドウを作ってもいいし、
直接クライアントウィンドウのデバイスコンテキストに描画でもいいけど、
自分でコントロールもどきを作成するのは相当面倒だよ。
codeguruとか行った方が良いかも。
http://www.codeguru.com/
0037デフォルトの名無しさん
NGNG0038デフォルトの名無しさん
NGNG0039デフォルトの名無しさん
NGNG上に関しては正しかったようだな……
0040デフォルトの名無しさん
NGNG改行コードがあるならば、
そのまま改行コードがないならば
改行コードを追加して
バッファに読み込みを行うという処理をしたいのですが、
ofstream
ifstream
だと一度ファイルを開いて全部読み込んで
改行コードを追加したファイルを作って
最後にまたそのファイルを読み込むという処理しか思い浮かびません。
それだとかなり処理の工程が増えてしまうのですが
なにか方法はありますでしょうか?
すでにあるファイルの最後に追加する処理
もしくはファイルの先頭に追加する処理
の方法がわかればもっと簡単にする方法はあるのですが、
そのようなことはできるのでしょうか?
0041デフォルトの名無しさん
NGNG0042デフォルトの名無しさん
NGNG今までここに表示されてる内容が
使ってるヘッダーファイルの中身だったんですが
いつのまにか使ってるcppファイルの中身になってしまって…
どうやって元に戻すのでしょうか?
0043デフォルトの名無しさん
NGNGすいません誤爆しました…
0044デフォルトの名無しさん
NGNGこれってxはintになるんですか?
0045デフォルトの名無しさん
NGNG0046デフォルトの名無しさん
NGNG0047デフォルトの名無しさん
NGNG0048デフォルトの名無しさん
NGNG0049デフォルトの名無しさん
NGNGズドゥーン ∧,,∧
_ , . ; :'''"´"'' 、 l)ニ)ニ))ミ∀゚ 彡,
−=" ;,_ ; : . ',,(lllニl============ll仁二三三ミ ノ彡
´"''''- ''" ~ ̄ ̄//└l=,lヽニ⊂ノ 彡ノ
_//'  ̄ '--(,,,, ,,彡,)
0050デフォルトの名無しさん
NGNG(´Д`;)ヾ チンコ タッテキタ
∨)
((
0051デフォルトの名無しさん
NGNGこれだとエラーになりますよね
0052デフォルトの名無しさん
NGNG0053デフォルトの名無しさん
NGNG0054デフォルトの名無しさん
NGNG005540
NGNGすみませんfstream調べてみましたが、
いまいちちょっと使い方がピンときません。
もう少しくわしく説明願えませんでしょうか?
0056デフォルトの名無しさん
NGNGtemplate< int n >
inline int func() {
return n + 1;
}
template< int n >
inline int operator ()() {
return n + 3;
}
};
int main()
{
CHoge hoge;
hoge.func< 10 >(); //これは通る
//hoge< 5 >(); //通らない...
}
この下のやつを通す方法は無いでしょうか...
コンパイラーはVC7です。
0057デフォルトの名無しさん
NGNGclass CHoge{
template< int n >
inline int func() {
return n + 1;
}
template< int n >
static inline int operator ()() {
return n + 3;
}
};
でいいんじゃない?試してないけど。
005856
NGNGらしいです...
0059デフォルトの名無しさん
NGNG書き方はできんでしょう。やるなら、hoge.operator()<5>() かな?
とてもコンパイル通るとは思えんけど (w
0060デフォルトの名無しさん
NGNG006156
NGNGそれはやっぱ通りません
C++って面白いんですけど、癖がありますねぇ...
0062デフォルトの名無しさん
NGNGあまりうまくないが、こんなかんじで
std::fstream fs("hoge.txt",std::ios::in|std::ios::out|std::ios::binary) ;
fs.seekg(-1,std::ios::end) ;
char c ;fs.get(c) ;
if(c!='\n'){
fs.seekp(0,std::ios::end) ;
fs.put('\n') ;
}
fs.seekg(0,std::ios::beg) ;
>>61
bcc32 5.6だと通るけど
0063デフォルトの名無しさん
NGNGclass A;
class B;
class A
{
class B b;
};
class B : public A
{
};
このA、B2つの定義を別ファイルでやろうとしてるんですが、
どうにもうまくいきません
どうしたら通るんでしょうか
0064デフォルトの名無しさん
NGNGclass B;
class A {
B* b;
};
class B : public A {
};
こうしといて、AのコンストラクタでBのインスタンスを渡してやればいける。
006564
NGNG0066デフォルトの名無しさん
NGNG0067デフォルトの名無しさん
NGNGclass B : public A {} ;
template<class C>
class A {
B p; C tmp;
};
A<int> a;
ヤター、VC6で内部コンパイルエラー!
0068終了10分前
NGNG0069終了7分前
NGNG0070デフォルトの名無しさん
NGNGbcc や gcc でも、頑張ると内部エラー出せるぞ。れっつちゃれんじ。
0071デフォルトの名無しさん
NGNGあほですか?
0072デフォルトの名無しさん
NGNG0073首吊り
NGNGそこらへんのフリーのソースだけじゃ学びにくくない?
0074デフォルトの名無しさん
NGNG> そこらへんのフリーのソースだけじゃ学びにくくない?
企業に入って研修受けると、何か設計の秘技を授けてもらえると思ってる
なら大間違いだぞ。
0075デフォルトの名無しさん
NGNGどういう時に使えばいいんだろう?
0076デフォルトの名無しさん
NGNGより直感的に処理を書きたいときに使えばいいんじゃないかな。
たとえば、リスト構造をもつクラスがあった場合、
n番目のアイテムを得るときに
item = list.getitem(n);
と書くところを
item = list[n];
って書けるから直感的になる。かもしれない。
0077デフォルトの名無しさん
NGNGリストに[]は計算時間を激しく誤解してしまいそうな
0078デフォルトの名無しさん
NGNGそう思ったけどパっと例が思いつかなかったのよ。
0079デフォルトの名無しさん
NGNG俺は長年C++しているけど、クラスとオーバーライドしか
まともに使ったことが無い。
0080デフォルトの名無しさん
NGNG複素数クラス作ってみ
0081デフォルトの名無しさん
NGNG0082デフォルトの名無しさん
NGNGMoney m( 2400 ); // 2400円
Wallet w; // 財布には1円も入っていない
m += 1200; // m は 3600円
m += c; // m は 4600円
w << m; // 財布に 4600円が入る
008382
NGNGWallet の下に
Coins<100> c(10); //100円硬貨で10枚
が入る。
0084デフォルトの名無しさん
NGNGなんとなくわかる
長年ってところが却って癌なんだろ
0085デフォルトの名無しさん
NGNG見た目がゴチャゴチャしてなくて本質的な意味が直感的にわかり可読性があがる
operator定義の中にそれにとっての本質的な処理を記述できる
0086デフォルトの名無しさん
NGNGひとつのクラスから複数のインスタンスをつくったとき、
このクラスのパブリックな変数はインスタンスごとに違う値をとれるのですか?
またとれる場合は外部から参照するときどうやったらよいのでしょう・・・?
0087デフォルトの名無しさん
NGNGただし、気づかぬウチに一時オブジェクトを大量生産することがあるので
注意。逆アセンブルしたら「あらびっくり」ということもある。
あと operator() は良く使うよね。
0088デフォルトの名無しさん
NGNG0089デフォルトの名無しさん
NGNG>ひとつのクラスから複数のインスタンスをつくったとき
っちゅうのは、
class hoge{
public:
int m_int[10];//←複数のインスタンス
};
っちゅう解釈でよろしいか?
009089
NGNGhoge hogeInstance[2];//←複数のインスタンス
ということか?
0091デフォルトの名無しさん
NGNGインスタンス→オブジェクトの間違いです。
0092デフォルトの名無しさん
NGNGそれでもどっちとも取れるよ。
あともうひとつ最悪の解釈もできるけど。
0093デフォルトの名無しさん
NGNGclass hoge{
public:
int x
};
というクラスから
hoge a;
hoge b;
を生成したとき、それぞれの持つxは違う値をとれるのですか?
0094デフォルトの名無しさん
NGNG合ってる。
同じ値にしたい場合は static をつける。
0095デフォルトの名無しさん
NGNGあともうひとつすいません。
こういう場合外部からどちらかのxを参照したい場合はどうすればよいのでしょう?
0096デフォルトの名無しさん
NGNGとれるよ。
a.x = 1;
b.x = 2;
みたいにそれぞれ別々の値が格納される。
でもその程度ならコンソールアプリで確認しながら
やったほうが2Chで聞くよりも効率いいよ。
0097デフォルトの名無しさん
NGNGでもたすかりました。ありがとうございました!
0098デフォルトの名無しさん
NGNG0099デフォルトの名無しさん
NGNGtit!
void a(void) {
// 処理
};
void b(void) {
// 処理
};
// 他にも関数たくさん
}
template<>void hoge<char, int>:a(void) {
// 特殊化
}
template<>void hoge<char, int>:b(void) {
// 特殊化
}
と、あるテンプレート内の関数を2つ特殊化しようと書いたのですが
これではコンパイラを通りません。
うまい書き方を教えてください。
0101デフォルトの名無しさん
NGNGなんですか?それは
クラス定義の最後のセミコロンが無いってこと以外は問題があるようには見えないけど。
というか、環境くらい書こうよ。
0103デフォルトの名無しさん
NGNGん? ::でないのか?
0104デフォルトの名無しさん
NGNG{
public:
void show(void) { cout << "ノーマル <" << typeid(T).name() << ", " << typeid(U).name() << ">" << endl; };
};
template<> void hoge<char, int>::show(void) { cout << "特殊 <" << typeid(T).name() << ", " << typeid(U).name() << ">" << endl; }
int main()
{
hoge<char, char> char_char; char_char.show();
hoge<char, int> char_int; char_int.show();
hoge<int, char> int_char; int_char.show();
hoge<int, int> int_int; int_int.show();
cin.get();
return 0;
}
きちんと文法守れば何も問題無いはずだが。
0105デフォルトの名無しさん
NGNG0106デフォルトの名無しさん
NGNG誰かに言ってるんなら明記してくれ。
別に誰かに言ってるわけじゃないなら、便所で一人で言っててくれ。
0108デフォルトの名無しさん
NGNGつまり、106 の 「便所で一人で言っててくれ」 という希望は却下という事か?
0109デフォルトの名無しさん
NGNG2chの書き込み=便所の落書き
0110デフォルトの名無しさん
NGNGただの落書きか、砂粒の中の砂金かを見分ける能力がないと
2chを読んでいても何のたしにもならない。
0111100
NGNG>>102
g++です。セミコロンは書き忘れ。
>>103
::の間違いです。
>>104
特殊化する関数が一つならコンパイル通るし
ちゃんと動くんですよ。
何か文法的におかしいでしょうか?
0112デフォルトの名無しさん
NGNG0113デフォルトの名無しさん
NGNG{
public:
void a(void) { cout << "ノーマル a <" << typeid(T).name() << ", " << typeid(U).name() << ">" << endl; };
void b(void) { cout << "ノーマル b <" << typeid(T).name() << ", " << typeid(U).name() << ">" << endl; };
};
template<> void hoge<char, int>::a(void) { cout << "特殊 1 a <char, int>" << endl; }
template<> void hoge<char, int>::b(void) { cout << "特殊 1 b <char, int>" << endl; }
template<> void hoge<int, char>::a(void) { cout << "特殊 2 a <int, char>" << endl; }
template<> void hoge<int, char>::b(void) { cout << "特殊 2 b <int, char>" << endl; }
int main()
{
hoge<char, char> char_char; char_char.a(); char_char.b();
hoge<char, int> char_int; char_int.a(); char_int.b();
hoge<int, char> int_char; int_char.a(); int_char.b();
hoge<int, int> int_int; int_int.a(); int_int.b();
cin.get();
return 0;
}
通りますが? (VC6SP5)
コンパイラは何使ってて、アラーメッセージはどう出てるの?
0114預言者
NGNGと出てます
0115デフォルトの名無しさん
NGNG0116100
NGNG今ある環境(BCC)で通りました。
通らなかった環境が今ここに無いのでうろ覚えですが、
コンパイラはg++でエラーメッセージは
「もう実体化されてるぞゴルァ」とかそんな感じ。
とりあえずしょーもないミスしてないか確認してみます。
ありがとうございました。
0117デフォルトの名無しさん
NGNGMinGW gcc-2.95.2
いずれでもコンパイルできますた。
でも、emplate はさすがに通らないけどな。
0118デフォルトの名無しさん
NGNGp->T()
は無理なのは知ってますが、
void (CHoge::*fpHoge)() = CHoge::CHoge
p->*fpHoge();
としようと思うと上の関数ポインターの代入が駄目と言われます。
class CHoge{
CHoge(){
//これを呼びたい
}
};
template< typename T >
func()
{
T* p;
p = reinterpret_cast< T* >( malloc( sizeof( CHoge ) ) );
//p->T(); //これをやりたい
}
int main()
{
func< CHoge >();
}
0119デフォルトの名無しさん
NGNG0120デフォルトの名無しさん
NGNGなぜnewを使わない?
0121デフォルトの名無しさん
NGNGAPIなりを使わないといけないんですよね?
winならFindFirstFile()、UNIXならopendir()/readdir()とか。
この辺の標準的なラッパとかって無いんですか?
みんなどうしてんの?
# Cスレで聞くべきか?
0122デフォルトの名無しさん
NGNG0123デフォルトの名無しさん
NGNGAPIがラップされたものが提供されていると思うが
0124デフォルトの名無しさん
NGNG>クラスをmallocで定義する
理解できないのは俺だけ?
0125デフォルトの名無しさん
NGNGなら分からんでもない
0126デフォルトの名無しさん
NGNGだから、newを使えば自動的にコンストラクタが呼び出されるの!
0127デフォルトの名無しさん
NGNG何か頓珍漢な人ですね・・・
0128デフォルトの名無しさん
NGNG実際SGIのSTLはmallocとplacement newで初期化してたような気がするし(違ったらごめん)。
他に考えられるのは可変長構造体をclassでもやろうとしてるってのもあるかもな。
激しく未定義だが(特に仮想関数を持つ場合)。
それでも、mallocではなく::operator newを使うのが筋だと思う。
0129デフォルトの名無しさん
NGNG良かった。俺だけじゃなかったみたいだ。
>>126
アホですか?
0130デフォルトの名無しさん
NGNG0131デフォルトの名無しさん
NGNG0132デフォルトの名無しさん
NGNG0133デフォルトの名無しさん
NGNGclass CHoge{
public:
CHoge(){
std::cout << "CHoge() called." << std::endl;
}
~CHoge(){
std::cout << "~CHoge() called." << std::endl;
}
};
template <typename T>
void func()
{
T* p;
p = reinterpret_cast<T*>(std::malloc(sizeof(T)));
new (p)T;
p->~T();
std::free(p);
}
int main()
{
func<CHoge>();
}
0134デフォルトの名無しさん
NGNGtemplate <typename T>
void func()
{
T* p;
T* q;
p = reinterpret_cast<T*>(std::malloc(sizeof(T)));
q = new (p)T;
q->~T();
std::free(p);
}
int main()
{
func<CHoge>();
}
0135デフォルトの名無しさん
NGNG・・・見づらい
0136デフォルトの名無しさん
NGNG/ ̄\ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
─( ゚ ∀ ゚ )< C++C++!
\_/ \_________
/ │ \
∩ ∧ ∧ / ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄
 ̄ ̄ ̄ ̄ ̄ ̄ ̄ ̄\∩ ∧ ∧ \( ゚∀゚)< C++C++C++!
しぃプラ〜〜〜! >( ゚∀゚ )/ | / \__________
________/ | 〈 | |
/ /\_」 / /\」
 ̄ / /
0137デフォルトの名無しさん
NGNGどうやったら10回呼び出せるでしょうか?
class CHoge{
public:
CHoge(){
std::cout << "CHoge() called." << std::endl;
}
~CHoge(){
std::cout << "~CHoge() called." << std::endl;
}
};
int main()
{
char* p = reinterpret_cast<char*>(malloc(1000));
CHoge* q;
q = new(p) CHoge[10];
q->~CHoge();
std::free(p);
}
0138デフォルトの名無しさん
NGNGわかりません。
class CHoge{
public:
CHoge(){
std::cout << "CHoge() called." << std::endl;
}
~CHoge(){
std::cout << "~CHoge() called." << std::endl;
}
};
int main()
{
char* p = reinterpret_cast<char*>(malloc(1000));
CHoge* q;
q = new(p) CHoge[10];
for (int i = 0; i < 10; i++)
q[i].~CHoge();
std::free(p);
}
0139デフォルトの名無しさん
NGNG0140デフォルトの名無しさん
NGNGありがとうございます。人情的にplacement newには対応するdeleteが
必要な気がしていましたが、そうではないのですね。delete[]なんて
やったらヒープ領域と勘違いして破壊してしまいますね。
0141デフォルトの名無しさん
NGNG0142デフォルトの名無しさん
NGNG0143デフォルトの名無しさん
NGNGplacement new には対応する delete を書いたほうがよいです。
new(x) T;
でコンストラクトの途中で例外が発生した場合、(もし存在すれば)
対応する operator delete が自動的に呼ばれるからです。
0144118
NGNGSingletonを汎用的に実装するクラスを作ることを考えていたのですが、
newをそのまま呼ぶと色々困るのでこうなりました。
0145デフォルトの名無しさん
NGNGclass A {
static int i;
int j;
public:
static void func() { std::cout << i << std::endl; }
};
int A::i;
int main()
{
A a;
a.func();
A::func();
}
のようにstaticメンバだけにアクセスできるらしいのですが、プログラミング言語C++
第3版では例えばどの節を読めばいいのでしょうか?§10.2.4などを読んでも今
ひとつすっきりしません。
0146デフォルトの名無しさん
NGNG必要になるまでは、無理して使わんで良いって。そういうものもあるんだと
頭の片隅に起きつつ、勉強進めとけ。
いずれ factory パターンとか state パターンとかに出くわしたときに、あると
便利かなと思える日が来る。
0147デフォルトの名無しさん
NGNG1.隠れグローバル信仰者の逃げ道
2.インスタンス取得関数等、インスタンスがない状態で行うクラス関連の操作
3.メンバ関数へのフックの為の逃げ道(this を渡し、そこからメンバをコールする。)
基本的には static メンバ(変数、関数両方とも)は
インスタンスメンバと完全に区別して考えるべき。
俺は(俺の中の呼び方として)
static は 「クラス変数、クラス関数」とよび
non static は「インスタンス変数、インスタンス関数」と呼んで
完全にベツモノとして考えている。
0148デフォルトの名無しさん
NGNG0149デフォルトの名無しさん
NGNGわかりました。今はこういう物もあるのだと記憶にとどめる程度にしておきます。
解説書を読んでもstaticメンバ関数の存在意義について深く考察した本は見た
ことがないので、悩んでおりました。
0150デフォルトの名無しさん
NGNGないメンバや仮想関数にアクセスすることはできないようなので、渡ってない
ように思えますが・・・・・・
0151デフォルトの名無しさん
NGNG0152デフォルトの名無しさん
NGNG語弊ありすぎ
0153デフォルトの名無しさん
NGNG0154デフォルトの名無しさん
NGNG命に関わる問題なのでどうかお許しください。興味のない方は読み飛ばしてください。
世界では今日もワクチンが足りないために7000人の幼児が亡くなっています。
世界では毎年290万人もの子どもたちが「ポリオ」「はしか」「新生児破傷風」
「結核」「百日咳」「ジフテリア」で亡くなっています。これらは予防可能な病気です。
この子たちはワクチンさえあれば助かる命なのです!
1通話300円の募金ダイヤル 0990-588-889 24時間受付で、1回300円が募金されます。
300円あれば15人分のポリオワクチンを発展途上国の子供達に届ける事が出来ます。あなたの
1通話で世界の恵まれない子供達、15人の命を守る事が出来るのです。どうかご協力をお願いします。
http://www.jcv-jp.org/home.htm http://www.lcv.ne.jp/~ono21/yobousessyu/vaccine.htm
*善意の方、この文章のコピペを通常の掲示板運営に迷惑にならない程度に、
他の掲示板にも貼り付けてください。よろしくお願いします。
0155デフォルトの名無しさん
NGNG0156デフォルトの名無しさん
NGNGおめでてーな。
0157デフォルトの名無しさん
NGNG0158デフォルトの名無しさん
NGNG2chなら2chらしく3行以内で書きしる!
0159デフォルトの名無しさん
NGNG世の中ではどういう方法が適切なのかねぇ・・・。
0160デフォルトの名無しさん
NGNG0161158
NGNG300円で15人の命が救える募金ダイヤル: 0990-588-889
http://www.jcv-jp.org/home.htm http://www.lcv.ne.jp/~ono21/yobousessyu/vaccine.htm
ほらできた(´∀`)
0162デフォルトの名無しさん
NGNG募金しないけどw
154 はいかんともしがたい
0163147
NGNG> staticではないメンバや仮想関数にアクセスすることはできない
C++ では static な関数は仮想にできないから、後ろは不要。
漏れが言ってたのはクラス CHoge の static メンバ関数に
CHoge* を渡して、こいつのメンバ関数を呼び出す事ができるって事。
C の時代のコールバック関数等は non static メンバ関数を呼び出せる形になってないので、
static メンバ関数へのポインタを渡すしかない。
コールバック時に void* などとして任意の変数が渡せる場合は
そこに CHoge* を無理矢理詰め込むことで、 non static なメンバ関数への
経由地点として static 関数を利用する事ができるわけ。
0164デフォルトの名無しさん
NGNG0165デフォルトの名無しさん
NGNG> C++ では static な関数は仮想にできないから、後ろは不要。
(゚Д゚)ハァ?
static な関数からアクセスできるかどうかの話じゃないのか?
0166147
NGNGどこらへんが?具体的に書いてみなよ(ププッ
>>165
> static な関数からアクセスできるかどうかの話じゃないのか?
何にアクセスできるかですか?
多分 「non static なメンバに」っていう意味だと思うけど、
「アクセスできるか?」だけじゃ意味が通じてないYO。
で、話は static メンバ関数に this ポインタが渡るかどうかの話です。
>>147 でのアドバイスを >>150 さんが取り違えて、
static メンバ関数への理解に支障がでると悪いと思ったので >>163 で
補足したのです。
で、>>150 のはじめの「staticではないメンバ」しか「仮想関数」にできないので
わざわざ「仮想関数」まで書かなくても十分だよ。と言ってるわけですね。
Are you ok?
0167147
NGNGここで >>164 とかはま〜た勘違いしてやっぱり >>147 は初心者!とか決め付けてるんだろうけど、
嘘じゃないから。
static な関数が static じゃないメンバにアクセスするには条件があるだけ、
それは対象インスタンスへのポインタが必要という事。
それじゃ意味ないじゃんとか言わないように、
そのメンバが private や protected だった場合にはグローバルスコープの関数からはアクセスできないのだから、
これは static メンバ関数の特徴なんだよ。ok?
0168147 the ネット弁慶
NGNGはじめの 「static な関数」は「static なメンバ関数」に読み替えてくれ。
0169デフォルトの名無しさん
NGNG参照かポインタを渡さなければいけないんですよね?
class A {
static int i;
int j;
public:
A() : j(123) {}
static void func() { std::cout << i << std::endl; }
static void func2(A& ar) { std::cout << ar.j << std::endl; }
};
int A::i = 456;
int main()
{
A a;
a.func();
A::func();
a.func2(a);
A::func2(a);
}
0170デフォルトの名無しさん
NGNG似たような構造体に 共通の関数を使って値をセットする関数を、テンプレートをつかって
作ったのですが、リンクでエラーがでてしまいます。なぜうまくいかないのでしょうか?
struct HogeA
{
int a;
int b;
};
struct HogeB
{
int a;
int c;
};
template < class T >
void Set_a( T* p_Hoge , int a )
{
p_Hoge->a = a;
}
0171デフォルトの名無しさん
NGNG0172デフォルトの名無しさん
NGNGvoid* operator new(size_t);
void* operator new(size_t, void*);
は上書きできないんでしょうか?これは規約でしょうか?
少なくともVC++だとすでに定義されているって出てしまいます。
0173172
NGNGvoid* operator new(size_t, void*);
だけでした。しかも <new> の中です…。
0174172
NGNGありがとうございました。
0175デフォルトの名無しさん
NGNGあと<new>←??
0176デフォルトの名無しさん
NGNGクラスのメンバに、そのクラス用コンテナを付けたいです。
(class Aのメンバにvector<A>のヤツがいるとか)
C++BuilderでもHPのaC++(此度のミッションで使うコンパイラっす。)でもコンパイルが通るのですが、
こういうマネが通るという事が処理系依存なのかどうかを聞きたひ。(すっげー使いたいんで。)
例は↓の感じ。(本例、aC++で実行確認までしますた。)
0177176の続き
NGNG{
A a1(1);
A a2(2);
a2.Add(A(10));
a2.Add(A(11));
a2.Add(A(12));
a2.Add(A(13));
a1.Add(a2);
a1.Add(A(50));
a1.print();
return 0;
}
実行結果:
me...
1
me end.
children...
me...
2
me end.
children...
10
11
12
13
children end.
50
children end.
0178176-177の続き
NGNG#include <iostream.h>
#include <vector>
class A
{
private:
int id;
vector<A> v;
public:
A(int a) : id(a) {;};
void Add(const A& a) {v.push_back(a);};
void print()
{
if(v.size() > 0) {
cout << "me..." << endl;
}
cout << id << endl;
if(v.size() > 0) {
cout << "me end." << endl;
}
if(v.size() == 0) {
return;
}
cout << "children..." << endl;
vector<A>::iterator i;
for(i = v.begin(); i != v.end(); i++) {
i->print();
}
cout << "children end." << endl;
};
};
0180デフォルトの名無しさん
NGNG規格で定義されてるかどうかはちょとわからんけど、その例で
vector<A> は使えても list<A> が使えないコンパイラはそれなりにあったりする。
0181デフォルトの名無しさん
NGNGそのサイズにキャストして、比較したいのですが
動的にキャストって出来ないですか?
無理やり書いたら、
long func(long cmp,BYTE* _p,long x,long y,long w,long nBitCount)
{
long ret;
switch(nBitCount)
{
case 8:
ret = (char*)(_p + (x + (y*w))*(nBitCount>>3) ) - cmp
break;
case 16:
ret = (short*)(_p..)
break;
case 32:
ret = (long*)(_p...)
break;
}
return ret;
}
・・・
全部書いてたら、死にます。
どうにかなりませんか?
0182デフォルトの名無しさん
NGNGtemplate 使った方がいいぞ。
0183デフォルトの名無しさん
NGNG> (char*)(_p + (x + (y * w)) * (nBitCount >> 3) ) - cmp
大いに間違っていないか?
0184デフォルトの名無しさん
NGNGtemplate <typename T>
long func(T cmp, BYTE* _p, T x, T y, T w)
{
return reinterpret_cast<T*>(_p + (x + (y * w)) * sizeof(T) / 8 - cmp);
}
0185デフォルトの名無しさん
NGNG#include <iostream.h>
#include <fstream.h>
・
・
・
ifstream fr("ファイル名");
としたら「'ifstream' シンボルがあいまいです」というエラーが出た。
どういうことなのかよくわかりません。ご伝授お願いします。
0186デフォルトの名無しさん
NGNG#include <iostream>
#include <fstream>
・
・
・
std::ifstream fr("ファイル名");
とやってもエラーが出るか?
0187デフォルトの名無しさん
NGNG名前空間!!忘れていました・・・!
ありがとう御座いました
0188デフォルトの名無しさん
NGNGしかし、fstream.hのように、".h"を付けると、stdネームスペースに包まれる事は
ないので、std::を付けなくても良いはずなのだが・・・・
コンパイラは何ですか?
0189デフォルトの名無しさん
NGNGあるクラスのメンバ関数内で記述していたのですが、
::ifstream fr("ファイル名");
のように :: をつけグローバル指定することで解決しました。
名前空間とは関係なかったかな・・・C++暦浅いんでよくわからないけど・・・。
他の場所でVectorやstingつかっているんで using namespace std;
は入れております。
0190デフォルトの名無しさん
NGNGこれでは手計算と明らかに違ってしまいます。�@と�Aに部分を変えればいいはずなのですがこれじゃただ足した
だけになってしまいます。。。どうか教えてくださいませ!
#include<stdio.h>#define N 3 #define M 3 void main();
void m_print(double [N] [M]);
void m_add(double [N] [M],double[N][M],double[N][M]);void main()
{double A [N] [M] = {{1,3,5},{4,8,1},{11,6,8}},
B [N] [M] = {{1.9,3.6,4.7},{7.2,8.5,8.8},{0,4,0}},
C [N] [M] ;
m_print(A);printf("\n\n * \n\n");m_print(B);printf("\n\n = \n\n");
m_add(A,B,C); m_print(C); printf("\n\n"); }
void m_add(double X[N][M], double Y[N][M], double Z[N][M]) {
//�@long g,h; for(g=0;g<M;g++) for(h=0;h<N;h++){
C[g][h]=A[g][h]*B[g][h];
//
}}
void m_print(double X[M][N]) {
//�Along i,j; printf("_");i=1;
while((i++) < N){
printf(" "); }
printf(" \n"); for(i=0; i<M; i++){
printf("|");for(j=0; j<N-1; j++){
printf("%10.5f,",X[i][j]); }
printf("%10.5f|\n",X[i][N-1]); }
printf("~"); i=1; while((i++) <N){
printf(" "); }
printf(" ~\n");
// }
0191デフォルトの名無しさん
NGNG0192デフォルトの名無しさん
NGNGVC++は使ってないのでわからんが、ifstreamの多重定義に、std名前空間を
使わなかった場合のバグが残っていると思う。普通は :: なんて付けなくていい
はずです。
>>190
微妙にスレ違いだがまあいいか。n×mの行列とn×mの行列の積は、n≠mの
場合定義されない。n×mの行列とo×pの行列の積は、m==oの場合に限り
定義される。
行列の積は、L×MとM×Nの積とすると
for (i = 0; i < L; i++) {
for (k = 0; k < N; k++) {
c[i][k] = 0.0;
for (j = 0; j < M; j++)
c[i][k] += a[i][j] * b[j][k];
}
}
のように書くべし。
0193デフォルトの名無しさん
NGNGありがとうございますm(__)m
この行列は3×3行列と3×3行列の積です。(数字見にくくてごめんなさい)
あと、その教えてもらった数列は//�@に入れればいいんですか?
とりあえず3×3行列同士にして。。。ホント見にくくてすみません。
//�Aとかも聞いていいですか?いそいそしてしまってますが、提出が迫り焦っています(汗
よろしかったら教えてくださいませ。
0194デフォルトの名無しさん
NGNG#define N 3
#define M 3
void m_print(double [N][M]);
void m_mul(double [N][M], double[M][N], double [N][N]);
void main()
{
double A[N][M] = {{1, 3, 5}, {4, 8, 1}, {11, 6, 8}},
B[N][M] = {{1.9, 3.6, 4.7}, {7.2, 8.5, 8.8}, {0, 4, 0}},
C[N][M];
m_print(A);
printf(" * \n");
m_print(B);
printf(" = \n");
m_mul(A, B, C);
m_print(C);
}
void m_mul(double X[N][M], double Y[M][N], double Z[N][N])
{
int i, j, k;
for (i = 0; i < N; i++) {
for (k = 0; k < N; k++) {
Z[i][k] = 0.0;
for (j = 0; j < M; j++)
Z[i][k] += X[i][j] * Y[j][k];
0195デフォルトの名無しさん
NGNG}
}
void m_print(double X[M][N])
{
int i, j;
printf("_");
for (i = 0; i < N; i++)
printf(" ");
printf(" _\n");
for(i = 0; i < M; i++) {
printf("|");
for(j = 0; j< N - 1; j++)
printf("%10.5f,",X[i][j]);
printf("%10.5f|\n",X[i][N-1]);
}
printf("~");
for (i = 0; i < N; i++)
printf(" ");
printf(" ~\n");
}
0196デフォルトの名無しさん
NGNG俺たちが答えてやってもまたすぐにつまずくぞ。
0197デフォルトの名無しさん
NGNGint main()
{
double A[N][M] = {{1, 3, 5}, {4, 8, 1}, {11, 6, 8}},
B[M][N] = {{1.9, 3.6, 4.7}, {7.2, 8.5, 8.8}, {0, 4, 0}},
C[N][M];
m_print(A);
printf(" * \n");
m_print(B);
printf(" = \n");
m_mul(A, B, C);
m_print(C);
}
return 0;がないが、C++のプログラムならこれでよい。
0198デフォルトの名無しさん
NGNGint main()
{
double A[N][M] = {{1, 3, 5}, {4, 8, 1}, {11, 6, 8}},
B[M][N] = {{1.9, 3.6, 4.7}, {7.2, 8.5, 8.8}, {0, 4, 0}},
C[N][N];
m_print(A);
printf(" * \n");
m_print(B);
printf(" = \n");
m_mul(A, B, C);
m_print(C);
}
0199デフォルトの名無しさん
NGNG0200デフォルトの名無しさん
NGNGだから、微妙にスレ違いだと書いておいた(w
0201デフォルトの名無しさん
NGNGmatprint()を定義ぐらいするかなあ。printfの代わりにstd::cout
を使って。
配列の初期化はコンストラクタにdouble型の一次元配列でも渡すか。
0202デフォルトの名無しさん
NGNG0203デフォルトの名無しさん
NGNGC++だと、return文がないと暗黙に0が返されるんじゃなかったっけ?
0204デフォルトの名無しさん
NGNG0205デフォルトの名無しさん
NGNGそんなご都合なルールが規格にあったっけ?
0206デフォルトの名無しさん
NGNG知らんの?プログラミング言語C++第3版§3.2(P78)を読んでみそ。
0207デフォルトの名無しさん
NGNG参考文献より規格を確かめろよ。
でも、そう書いてあるな。初めて知った。
ISO_IEC 14882_1998
3.6.1 Main function
5 ... If control reaches the end of main without encountering a return statement, the effect is that of executing "return 0;".
0208デフォルトの名無しさん
NGNGこれからそうします。しかしあの英文だらけのPDF読むのもなかなか
骨が折れるんだよね。だから軟弱な俺は誤植だらけの参考文献を
読んでオナーニしてますた。
0210デフォルトの名無しさん
NGNG簡単に調べる方法ってないの?
0211デフォルトの名無しさん
NGNGコメントアウトしてコンパイルしてエラーが出ないか調べる。
C++は型チェックが厳密だから大抵エラーが出てわかる。
0212100
NGNGtemplate <typename T, typename U> class hoge
{
public:
void a(void) { cout << "ノーマル a <" << typeid(T).name() << ", " << typeid(U).name() << ">" << endl; b();};
void b(void) { cout << "ノーマル b <" << typeid(T).name() << ", " << typeid(U).name() << ">" << endl; };
};
template<> void hoge<char, int>::a(void) { cout << "特殊 1 a <char, int>" << endl; b();}
template<> void hoge<char, int>::b(void) { cout << "特殊 1 b <char, int>" << endl; }
template<> void hoge<int, char>::a(void) { cout << "特殊 2 a <int, char>" << endl; b();}
template<> void hoge<int, char>::b(void) { cout << "特殊 2 b <int, char>" << endl; }
int main()
{
hoge<char, char> char_char; char_char.a(); char_char.b();
hoge<char, int> char_int; char_int.a(); char_int.b();
hoge<int, char> int_char; int_char.a(); int_char.b();
hoge<int, int> int_int; int_int.a(); int_int.b();
cin.get();
return 0;
}
エラーの原因は特殊化したa(void)内のb()がb(void)を特殊化する前に書かれていることのようでした。
a(void)とb(void)の記述を逆にすれば通ります。
そういうものなんでしょうか?(規格書読めってことですか)
0213デフォルトの名無しさん
NGNGコンパイラがテンプレートインスタンスを作成する前に、
コンパイラに特殊化を知らせないといといけない。
知らせればいいんだから、
↓こんな宣言だけ先に書いといてやれば、定義の順は逆にしなくてもよくなるけど。
template<> void hoge<char, int>::b(void);
0214デフォルトの名無しさん
NGNGちょっとは役に立つだろう。
0215デフォルトの名無しさん
NGNG0216デフォルトの名無しさん
NGNGリンクエラーが発生してしまうのですが、
解決方法はないでしょうか?
hoge% g++ a.cpp -lstdc++
/var/tmp//ccQ92fTH.o: In function `main':
/var/tmp//ccQ92fTH.o(.text+0x2b): undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::basic_string[in-charge]()'
/var/tmp//ccQ92fTH.o(.text+0x92): undefined reference to `std::basic_string<wchar_t, std::char_traits<wchar_t>, std::allocator<wchar_t> >::length() const'
collect2: ld returned 1 exit status
----- a.cpp ----
#include <iostream>
#include <string>
#include <locale>
using namespace std;
int main()
{
wstring* wstr = new wstring();
cout << wstr->length() << endl;
return 0;
}
---- g++ ----
Reading specs from /usr/home/hoge/gcc/lib/gcc-lib/i386-unknown-freebsd4.5/3.2/specs
Configured with: ./configure --enable-languages=c,c++ --prefix=/usr/home/hoge/gcc
Thread model: posix
gcc version 3.2
0217_
NGNG本当の所どうなんでしょうか?
キャッシュがどうのって言ってたのですけど。
0218デフォルトの名無しさん
NGNGパフォーマンス的にそれほど劣るとは考えにくい・・・
0219デフォルトの名無しさん
NGNGとほとんど例外なくclock()が小さくなった。
驚いたのは、Cのqsort()関数まで速くなったことだ。どうなってるの?
0220デフォルトの名無しさん
NGNGテンプレートを使ってコードサイズを減らす細工もつくれる。
結局は、使う側の問題。
でも普通に使ってる分には増えるのが普通だと思う。
0221デフォルトの名無しさん
NGNGよく聞く話だが
実例をあげて議論すべきだと思う
例えばMFCとATLのように
0222デフォルトの名無しさん
NGNG{
Child child;
public:
Parent(): child(this){};
};
と書くとchild(this)で怒られます。
ブロック内でnew/deleteやchild.parent=thisならできますが
他にうまいやり方はないですか?
0223デフォルトの名無しさん
NGNG何故怒られるのかを考えましょう。最適な答えがみつかると思います。
(一定ルールを守れればその警告は無視できます。)
0224デフォルトの名無しさん
NGNGまぁCPUのキャッシュ使用効率とかを考慮してカリカリにチューンする
ような局面では、コードサイズが増えがちなテンプレートは嫌うだろうな。
ただ、チューンが必要なところだけinline asm使ったり、gogoやlame
みたいに一部nasm使ったりする手もあるわけで、いきなり全面否定も
どうかと思うが。
0225222
NGNGこれは文法的に回避する方法があるということですか?
それとも>>222のような書き換えによってですか?
0226デフォルトの名無しさん
NGNGtemplateをコンパイラがどう処理するのかよくわからないので何とも言えませんm(_ _)m
0227デフォルトの名無しさん
NGNG俺まだクラス覚えたばっかり。
0228デフォルトの名無しさん
NGNGエラーメッセージをちゃんと読めよ
いやだろうけど教科書読むのと同じくらい大事だぞ
0229デフォルトの名無しさん
NGNGエラーメッセージはコンパイラが怒ってるわけじゃないんだよ。
コンパイラ:
「すいません。私にはコンパイルできませんでした。
たぶん***が原因だと思うんですが・・・。
申し訳ないですが***を直してもう一度やってもらえないでしょうか?」
って感じだ。エラーメッセージを読めば大体理由はわかる。
(しゃべるのが下手なコンパイラもいるけどね。cl.exeとかcl.exeとかcl.exeとか・・・)
0230デフォルトの名無しさん
NGNG別にコンパイルできないんじゃなくて、潜在的にバグの温床になりかねんから
警告してくれてるだけじゃねぇか。
「こういうことをしてると痛い目にあう可能性があるが覚悟はいいな?」
ってだけの話。
0231デフォルトの名無しさん
NGNGclass Parent;
class Child {
public:
Child (Parent* p = 0) {}
};
class Parent {
Child child;
public:
Parent(): child(this){};
};
int main()
{
}
0232デフォルトの名無しさん
NGNG普通の証。
0233デフォルトの名無しさん
NGNG最高技術者の証。
0234デフォルトの名無しさん
NGNGんなこたーない。
0235222
NGNG知りたいのはC++では初期化リストでメンバの初期化で
コンストラクタの引数にthisポインタや参照を要求されたら
一般的にどう対応するのかということです。
1.そもそもChild(Parent &parent), Child(Parent *parent)のようなコンストラクタを作らない。
2.警告を無視する。
3.parent/childの関係はよくあるので何かうまい方法があるはずでは。
なるべくなら1.2.は選びたくないので3.の方法はないのかということです。
0236デフォルトの名無しさん
NGNGまず、どっちが正しいか間違っているかを大局的に判断すれ
ChildをParent*で初期化するのが間違っているのか
ChildがParent*で初期化できないのが間違っているのか
これで次の1手は決まる
0237デフォルトの名無しさん
NGNGChild *child;
public:
Parent(): { child = new Child(this); };
~Parent() { delete child; };
};
0238デフォルトの名無しさん
NGNG0239デフォルトの名無しさん
NGNG0240デフォルトの名無しさん
NGNG警告を無視する。あるいは親子間のリンクを張るメソッドを別に用意して、
コンストラクタの「中」で呼ぶ。
どっちも一長一短だから、好きな方を選んでくれ。
0241デフォルトの名無しさん
NGNGその時点では使わずに、あとで別のメソッドから使うんでしょ。
メンバ変数として Parent* ではなく Parent& を持たせたい場合、コンストラクタで
初期化するのは必須。
0242デフォルトの名無しさん
NGNGParent に Child の実体を持たせて、Child に Parent の参照を持たせるような
事はできたっけ?
0243242
NGNG0244デフォルトの名無しさん
NGNG0245デフォルトの名無しさん
NGNG0246デフォルトの名無しさん
NGNGclass Bのメンバaをどうやって初期化すればよいのでしょうか?
class A {
public:
A() {}
};
class B {
class A& a;
public:
B() {}
};
int main()
{
B b;
}
0247デフォルトの名無しさん
NGNGclass B {
A& a;
public:
B(A& aa):a(aa){}
};
main(){
A a
B b(a);
}
0248デフォルトの名無しさん
NGNGありがとうございます。早速試してみます
0249デフォルトの名無しさん
NGNGchar *sDat;
public:
void SetDat(char *s);
MyClass(char *s);
MyClass();
MyClass(const MyClass &mc);
~MyClass();
MyClass & operator=(const MyClass &mc);
};
C++の本で勉強中なのですが、練習問題の○×問題で、
ア.void SetDat; はprivate: なメンバ関数である。(答え ○)
とあるのですが、なんで○になるのでしょうか?
激しく混乱しています・・・
0250デフォルトの名無しさん
NGNG0251デフォルトの名無しさん
NGNG誤植。
0253デフォルトの名無しさん
NGNG1刷/ P.156
【MyClassの定義】 誤 ア( )void SetDat;は、private:なメンバ関数である。
正 ア( )void SetDat;は、public:なメンバ関数である。
0254デフォルトの名無しさん
NGNGこんなにあったですか・・・
0255デフォルトの名無しさん
NGNG0256デフォルトの名無しさん
NGNGインライン展開されるかどうかの境目ってどこらへん?
0257デフォルトの名無しさん
NGNGネスト制限もあるだろうし
0258デフォルトの名無しさん
NGNGVC6を使っている者ですが、
newで確保した領域に対して_msize()で
サイズを得るコードは問題が発生する可能性がありますか?
0259デフォルトの名無しさん
NGNG思いつかないなあ。
つかそのサイズ使って何やるの?
0260デフォルトの名無しさん
NGNG0261デフォルトの名無しさん
NGNGえぴすてーめーが本で紹介してたような気がする。
0262デフォルトの名無しさん
NGNG可変長の要素をもつ動的配列をダブルポインタで管理するので
それを元に、newで作った動的配列の要素数を知ることができれば
管理が楽になると思ったのですが…
それともSTLのlist<>などを使うべきなのでしょうか?
現状ではこうしています
inline int GetArrayLength(void* p, int typesize) {
return _msize(p) / typesize;
}
0263デフォルトの名無しさん
NGNG0264デフォルトの名無しさん
NGNGnewがmalloc()したアドレスの先頭を返すなんて保証がない。
0266デフォルトの名無しさん
NGNGhttp://pc3.2ch.net/test/read.cgi/tech/1038405432/616-
0267デフォルトの名無しさん
NGNGgcc3.2(MinGW)です。
template <class $>
class A {
public:
$ i;
};
int main()
{
A<int> $;
}
0268デフォルトの名無しさん
NGNG0269デフォルトの名無しさん
NGNGエラー E2206 doltest.cpp 1: 不正な文字 '$' (0x24)
エラー E2206 doltest.cpp 4: 不正な文字 '$' (0x24)
エラー E2303 doltest.cpp 4: 型名が必要
エラー E2206 doltest.cpp 9: 不正な文字 '$' (0x24)(関数 main() )
エラー E2108 doltest.cpp 9: typedef 'A<int>' の使い方が間違っている(関数 main()
0270デフォルトの名無しさん
NGNG0271デフォルトの名無しさん
NGNGさすがに @ はだめなようだ。
parse error before `@' token
0272デフォルトの名無しさん
NGNGこんなエラーが出ます
error C2011: 'super_class' : 'class' で示される型としてすでに定義されています。
うーーん助けてください・・・・・・
0273デフォルトの名無しさん
NGNGそのエラー出したソース書かんかい。
0274デフォルトの名無しさん
NGNG↑この話、おかしいですよね?
ソート済みベクタより赤黒木のほうが速い場合なんて、あり得ないはずなんだけど。
実験用ソースの実装が腐ってるだけにみえるのに、誰も突っ込まないまま話がおわってるっぽい。
0275デフォルトの名無しさん
NGNG0276272
NGNGclass AのファイルをclassBのあるファイルとclassCのあるファイルヘインクルードし、
classB:public classA
classC:public classB
とすると先ほどのエラーが出ました。
今原因がわかったのですが、これは2重定義なのでしょうか?
(classAが、classBとclassCの2つのファイルで定義されたことになる?)
どうしてもこのclassAを他の複数のファイルにあるクラスへ継承させたいのですが
かのうでしょうか?
0277272
NGNGclassB:public classA
classC:public classA
です
0278デフォルトの名無しさん
NGNG#ifndef classa_h
#define classa_h
#endif
で囲ってるか?
0279デフォルトの名無しさん
NGNGヘッダーで
#ifndef ... #define ... #endif
(通称インクルードガード?)
してますか?
0280272
NGNGご迷惑かけました
0282デフォルトの名無しさん
NGNG有り得ないなんて決め付けずに実験してみなさい。
cppll でその話題が出た時
ソート済み vector に対して
std::binary_search
std::lower_bound
set,multiset に対して
メンバ find lower_bound count
のベンチマークを要素数・要素の型・最適化の有無等の条件を変えて実験してみた。
STL の実装は は dinkumware, STLport の2つ。
コンパイラはVC7。
その結果
1.ソート済みベクタが速度・メモリ効率の両面で連装コンテナを上回る場面は
それほど多くはない。
2.ソート済みベクタが速度・メモリ効率の両面で連装コンテナを上回る場合でも、
その差は大きいとは言えない。
3.検索速度のみに限ればソート済みベクタが勝る場合が多いが
その差は大きいとは言えない。
となった。
結論:
More Effective STL 第23項
連装コンテナをソート済みベクタに置き換える事を検討しよう
これは大抵の場合ほとんどメリットが無いと言える。
検索速度・メモリ効率に不満を感じた場合の解決にはならない。
その場合はその他のデータ構造を考えるべきだろう。
0283274
NGNG実験したもん。検索時間に関してだけど。(メモリ効率の測定方法がわからんない)
結果は、それぞれソート済みベクタが、
1.連想コンテナを上回る場面がある。
2.連想コンテナを下回る場合でも、その差は大きいとは言えない。
んで、1については、要素数が多い場合が該当しやすいような気がする。
2については、「比較」の処理に比べて「次の比較対象へ移動」の処理が
無視できない場合に該当しやすいような気がする。
> ソート済み vector に対して
> set,multiset に対して
そのテスト、vectorの内容をset,multisetと等価にするために、
vectorに対してどんな操作がしてありますか?
わざとそこらへんをしくじった状態でテストしたら、
http://www.tietew.jp/cppll/archive/5687
↑と同様な結果が得られたのですが。
ちなみにテスト環境はcygwin gcc-3.2。
ってなわけで結論:
More Effective STL 第23項
「連想コンテナをソート済みベクタに置き換える事を検討しよう」
検索速度・メモリ効率に不満を感じた場合には、検討の余地が十分にある。
0284
NGNG手っ取り早い方法を教えてください。
0285デフォルトの名無しさん
NGNG0286284
NGNGを書きたいんですが
0287デフォルトの名無しさん
NGNG0288デフォルトの名無しさん
NGNGパーサ書くなりすればいいじゃん
たいした手間じゃない
0289デフォルトの名無しさん
NGNG自動的にデフォルトコンストラクタでmapdataが作成されて登録されますが、
mapdataがポインタの場合、mapdata==0は保障されるのでしょうか?
それとも素直にfindを使うべき?
ちなみにBCBで試してみたらちゃんと0になってましたが…。
そもそもポインタを入れるな、って解答はナシでお願いします。
0290デフォルトの名無しさん
NGNG0291デフォルトの名無しさん
NGNGC++の場合どのような時にこの規則が適用されるのですか?
0293デフォルトの名無しさん
NGNGhttp://member.nifty.ne.jp/~masumoto/cpp/topic/#SEC7
0294おっぱいあげ
NGNG0295makoto♂
NGNG0296デフォルトの名無しさん
NGNGありがとうございます。namespaceに関連する機能のようですね。
std::プリフィックスが場合によっては省略できそうですね。
0297デフォルトの名無しさん
NGNGファイルサイズはどうやって調べればよいでしょうか?
0298デフォルトの名無しさん
NGNGgetline(strm, str, '0')でstd::stringに読み込んでからsize()またはlength()とか。
0299デフォルトの名無しさん
NGNGこれつかってみたやつおる?
0300デフォルトの名無しさん
NGNG0301デフォルトの名無しさん
NGNGC++ フルスペックのパーサー書くのはめんどいぞ。template とか名前空間とか
絡んでくると、そりゃーいろいろと。
0302デフォルトの名無しさん
NGNG放置しとけ。
0303デフォルトの名無しさん
NGNG>>300 できるだけWin32APIは使いたくないんですが
0304デフォルトの名無しさん
NGNGfstat
seek&ftell
0305デフォルトの名無しさん
NGNGifs.get();
std::streamsize size = ifs.rdbuf()->in_avail() + ifs.gcount();
0307
NGNGたいした手間じゃないなら書いてアップしてあげたら?
無理しなくてもいいけど。
0308デフォルトの名無しさん
NGNGつーか、Koenig参照がなかったら、
namespace NS {
class A {};
void operator<< (std::ostream& os, const A& a) {}
}
int main()
{
NS::A a;
std::cout << a; // ここの << は、NS::operator<< を呼ぶ
}
みたいなことはできんわな。
0309デフォルトの名無しさん
NGNG> namespace NS {
> class A {};
friend
> void operator<< (std::ostream& os, const A& a) {}
> }
か?
0310デフォルトの名無しさん
NGNG実験の結果
「なんだ、ほとんど差が無いじゃないか」というのが私の結論。
「いや、この差は大きいよ」と思うんならそれは貴方の自由。
要素数が少ない場合・要素の型が単純な場合は有意な差が無い、
場合によっては連装コンテナの方が速い場合もある。
要素数が多くその数が予測できない場合
vector は大抵の実装ではメモリを大量に消費する。
メモリ容量・要素数にもよるが、これは速度の大幅な低下をもたらす。
Effectiv STL 第23項 にもある通り、連装コンテナをソート済みベクタに
置き換えるにはいくつかの条件を満たさなければならない。
また、その条件を満たした場合でも、様々な制限が発生する。
その後の保守にも悪影響を与える可能性が大きい。
つまりソート済みベクタは守備範囲が極めて狭いと言える。
これらを考慮すると、わざわざ連装コンテナをソート済みベクタに置き換える
メリットは見出せない。
検索速度を重視する場合、ソート済みベクタを検討している暇があるのならば
まともなハッシュテーブルを使うべきだろう。
0311デフォルトの名無しさん
NGNGあー、マジメに書くと、
namespace NS {
class A {
friend std::ostream& operator<<(std::ostream& os, const A& a);
};
std::ostream& operator<<(std::ostream& os, const A& a) {
return os;
}
}
ですな。ま、Koenig参照の本質には関係ないということで、許してたもれ。
0312デフォルトの名無しさん
NGNG激しく誤解を招く気がする
0313デフォルトの名無しさん
NGNG0314デフォルトの名無しさん
NGNGなんで「あなたの自由」と言いつつ、
> これらを考慮すると、わざわざ連装コンテナをソート済みベクタに置き換える
> メリットは見出せない。
と断言したがるかね。両者とも、もう判断するに十分な情報は出してるんだから、
そのへんで止めとけ。
0315283
NGNGメモリ効率に関する効果がメインなのだと思いました。
検索速度については、劇的な変化は期待できません。
メモリ効率の向上は劇的なものが期待できます。
たとえば、要素数の上限が分かっている場合に、
動的メモリの使用を回避できる可能性もあります。
>>310
×連装
○連想
この辺で止めときます。
0316デフォルトの名無しさん
NGNGフリーでC++ができるようになるソフトって何ですか?
今のところボーランドのフリーのコンパイラしかないです。
使い方もわからないです
学校の授業でC++Builderを使っていて自宅でもやりたいのですが。
0317デフォルトの名無しさん
NGNGまずはおれとエチしないか?
0318デフォルトの名無しさん
NGNG0319デフォルトの名無しさん
NGNGまず、ファイル→新規作成
で出てくる窓でプロジェクトのタブをクリックして
ディレクトリ名は適当なフォルダ(自分のCの作業場所)
を指定して、プロジェクト名を決める。
このプロジェクト名で指定したフォルダのしたにその名前の
フォルダができる、そして、C/C++ソースタブを開いて
CもしくはC++のソースファイルを適当にhello.cppとかすると
ソースの編集画面がぱっと開き、そこにソースを書き
できたら
プロジェクト→メイクで実行ファイルがプロジェクト名の
下にできるdebugフォルダにできてる。
ライブラリのパス設定はbccの使い方説明してるサイトの
通りにしとく。
0320デフォルトの名無しさん
NGNGでも、見て
逆ポーランド法の演習でもやっとけ
0321デフォルトの名無しさん
NGNG>使い方もわからないです
おいおいC:\borland\bcc55\readme.txtくらい読めよ
0322デフォルトの名無しさん
NGNGつーかフリーに頼らずに買えよ。
たった1〜2万の自己投資をケチるなよ。
0323デフォルトの名無しさん
NGNGマイクロソフトなら落せ
0324デフォルトの名無しさん
NGNG0325デフォルトの名無しさん
NGNG0326デフォルトの名無しさん
NGNG0327デフォルトの名無しさん
NGNG凄いですね。
0328デフォルトの名無しさん
NGNGCString hoge(int a)
{
CString s;
s.Format("%d",a)
return s;
}
hoge()の呼び出し元で戻り値は破壊されちゃってますか?
0329デフォルトの名無しさん
NGNGBorlad-C++5.5で十分過ぎる。gcc-3.2でもいい。
しかし、そこは人情というもの、C++を覚えたらすぐにWindowsプログラム
を書いて画面に表示してみたくなるに違いない。やっぱりコンソール画面
だけでは飽きる。
で、VC++でMFCか、BCBでVCLを弄びたくなるはずだ。飽きが来てやめて
しまわないように、製品版の言語を買っておくとよい。また、金を払ったと
いう自覚があれば、触らずにお蔵入りなんて勿体ない事もせずに済む
だろう。
0330デフォルトの名無しさん
NGNGCString& hoge() なら破壊されるが、実体を返しているので、return文を
実行した時にコピーコンストラクタが呼び出されて、コピーを返すので
問題ない。
0331デフォルトの名無しさん
NGNGポインタのポインタの所で
(void *)*a
というのが出てくるのですが
(void *)
の意味が分りません。
何でvoidをつけるんですか?
教えてください。
0332デフォルトの名無しさん
NGNG気にすんな。
0333デフォルトの名無しさん
NGNGCString&返しなら「戻り値」は隠しポインタであって
hoge()の呼び出し元では破壊されてないだろ
>>328はs自体が戻り値であると勘違いしているように見受けられるが
お主もそのケあるんじゃないか?
0334デフォルトの名無しさん
NGNG正体不明のオブジェクトへのポインタ
0335デフォルトの名無しさん
NGNG(´,_ゝ`)プ
0336デフォルトの名無しさん
NGNG0337デフォルトの名無しさん
NGNG0338デフォルトの名無しさん
NGNG333 のどこがおかしいんだ?
0339デフォルトの名無しさん
NGNGポインタ無しで多態をどう表現する?
0340デフォルトの名無しさん
NGNGC++の限界だな。
0341デフォルトの名無しさん
NGNG0342デフォルトの名無しさん
NGNG0343331
NGNG、、、皆さんの会話がまったく理解できません
出直してきます><
0344デフォルトの名無しさん
NGNGstruct giko { virtual void wara() = 0; };
void wara(giko& r) { r.wara(); }
void wara(giko* p) { p->wara(); }
限界とは?
0345デフォルトの名無しさん
NGNGやってみりゃわかるよ。
0346デフォルトの名無しさん
NGNGそうか?「ローカル変数への参照をreturnしようとしている」というエラーが
出てコンパイルできないぞ。
0348デフォルトの名無しさん
NGNGコールバックとかスレッドとか使えばいやでも
ありがたく感じるよ。
0349デフォルトの名無しさん
NGNGあんた、関数の型を CString じゃなくて CString& にしてないか?
0350338=349
NGNG0351デフォルトの名無しさん
NGNG0352デフォルトの名無しさん
NGNGスマソ。
> CString&返しなら「戻り値」は隠しポインタであって
> hoge()の呼び出し元では破壊されてないだろ
の意味を勘違いして、CString&返しなら破壊されないと読んでいた。
0353デフォルトの名無しさん
NGNGネタは単発糞スレでどうぞ。
0355デフォルトの名無しさん
NGNG「ポインタの値」の類推で勝手に「参照の値」なるものを捏造している。
多くの実装で参照がメモリ間接を利用していようが、それは
C++において参照がポインタと同等であることを意味するわけではない
第一それ以前にメモリ間接=ポインタということが言える訳でもない
0357デフォルトの名無しさん
NGNGだから関数の型が CString& では正常に返せない。
関数の型が CString の場合は、return の時点での s のコピーが渡る。
コンパイラによっては s の実体をとっておき、それをそのまま返すように最適化
するかも知れないが、漏れは見た事がない。
0358デフォルトの名無しさん
NGNG本気で聞いてるのか…?
0359デフォルトの名無しさん
NGNGその前に、あんたが参照と値をどう捕らえているのか説明してくれ。
0360328
NGNGよーするにs自体は破壊されるけどsの内容は呼び出し元でも保証される…って認識で合ってますか?
0361デフォルトの名無しさん
NGNG0362デフォルトの名無しさん
NGNG0363デフォルトの名無しさん
NGNG(´-`).。oO(イタいよね、その言い方。
0364デフォルトの名無しさん
NGNG関数がリターンするところをステップでトレースすると理解が深まるよ。
0365宿題教えて!
NGNG/*行列を表すクラス*/
template <class T=int,int a=3> class Matrix {
T x[a];
public :
Matrix();
T &set(int row,int col){return x[(row-1)+(col-1)*a];}
//+演算子
friend Matrix<T,a> operator+(Matrix<T,a> &n,Matrix<T,a> &m){
int i;
Matrix<T,a> ret;
for(i=0; i<a*a; i++){ret.x[i] = n.x[i]+m.x[i];}
return ret;
}
void show();
};
//コンストラクタ
template<class T,int a> Matrix<T,a>::Matrix(){
int i;
for(i=0; i<a*a; i++) x[i] = 0;}
//表示関数
template<class T,int a>void Matrix<T,a>::show(){
int i;
for(i=0; i<a*a; i++){cout << x[i] << " " ;if(i%a == 2)cout << "\n";}
}
0366デフォルトの名無しさん
NGNGcout に投げる class を書いて実験すればいいのに。
0367宿題教えて!続
NGNGint main(){
int length=3;
Matrix<int ,3> a,b,c;//3行3列の行列
int bNumber[9] = {6,5,4,3,2,1,9,8,7};
int i;
for(i=0; i<length*length; i++){a.set(i%length+1,i/length+1) = (i+1)*10;//i*10をセットする}
for(i=0; i<length*length; i++){b.set(i%length+1,i/length+1) = bNumber[i];//あらかじめ用意されたbNumberを入れる}
c.show();
c = a + b;//ここが実行されない
c.show();
return 0;
}
/*C++ですが、行列のクラスをテンプレートで実現して、
+ - * の演算子とinverse関数を実現せよ!とか云って来るんですよ
だから・・・お願いします。教えてください。
+のとこだけでよいので・・・*/
0368デフォルトの名無しさん
NGNG叩かれまくりたいスレ違い君の登場
0369333
NGNGまあそうなんだが
話というか因果の順序に違和感を覚えるぞ
関数の型がCStringの場合はreturn式が何であるかにかかわりなくCString型の戻り値が生成され、戻り値を初期化するコンストラクタに渡されるのがreturn式の評価結果である
関数の型がCString&の場合はreturn式が何であるかにかかわりなくCString&型の戻り値が生成され、戻り値の参照先として渡されるのがreturn式の評価結果である
hoge()の呼び出し側でCString&型の戻り値がデッドリンクになっていれば未定義動作
ポインタという用語を使うのが気に入らなきゃこんな説明だろうさ
最適化の過程の中で一時オブジェクトを削減するコンパイラは結構あるぞ
コピーコンストラクタが実行されないのにコピーコンストラクタをprivateにすると
文句たれるコンパイラ見たことないのか? 某ランドもその1つ
0370デフォルトの名無しさん
NGNG0372宿題教えて!
NGNG>>371そちらに質問します
0374デフォルトの名無しさん
NGNG0375デフォルトの名無しさん
NGNG333がどう区別できていないかを検証したいので
333が参照と値をどう捕らえているのか聞かせて欲しいな
0376デフォルトの名無しさん
NGNGマジ質問です
0377333
NGNGおまえは>>355か?
おまえは333の時点の発言内容だけで
漏れを「区別ができてない」と断定できたんだろ
自分に揚げ足取られない自信がないからって
逃げ回ってんじゃねえよ
恥をかくのが怖ければとっとと引き下がれ
0378デフォルトの名無しさん
NGNG説明できないんですね?(藁
0380デフォルトの名無しさん
NGNGしてません。
小説家は「目次」のハンコを持っているのか、というくらい馬鹿らしい質問。
時間がかかるのは本文。
0381デフォルトの名無しさん
NGNG俺もしてない。
イチイチIMEをON/OFFしたり変換候補を選択するくらいなら
そのまんま打ったほうがはやい。
0382デフォルトの名無しさん
NGNG釣れた( ´,_ゝ`)
0383デフォルトの名無しさん
NGNGスタック上のCStringが破棄されて不正なアドレスを指している「CString &」がちゃんと返っている、
ということ? それならそのとおりじゃん。何がおかしいのかな? ようわからん。
でも貴殿なんて言葉を使う変な奴の味方はしたくないね…。
0384デフォルトの名無しさん
NGNG古い形式のヘッダは知らん。
0385333
NGNG>でも貴殿なんて言葉を使う変な奴の味方はしたくないね…。
なんだよー
煽り厨と議論の相手を区別して呼んだのが
そんなに気持ち悪かったんか?
まあ相手あってのことだ
気に入らないなら気をつけるよ
0386デフォルトの名無しさん
NGNGそれすらタイプするのが面倒ならプログラマーやめたほうがいいよ。
その数千倍くらい毎日タイプするのが仕事なんだから。
#includeなんて全体のタイプ量の0.1%以下。
0387386
NGNGタイピングですね、わかりました
ありがとう
0388376
NGNG386→376です
0389デフォルトの名無しさん
NGNG粘着しないで放置すればいいのに。
0390333
NGNG遊んで欲しけりゃ○○しろつーたら
○○しよったんで約束を守った
ちゃんと遊んでやろうとしたのに
ずいぶんつまらん香具師だったんで
結果的にああなってしまった
すまそ
0391デフォルトの名無しさん
NGNG話が決着してない。
0392デフォルトの名無しさん
NGNG0394デフォルトの名無しさん
NGNG0395デフォルトの名無しさん
NGNG0396デフォルトの名無しさん
NGNG>>346でガイシュツ
0397デフォルトの名無しさん
NGNGこれはもちろん未定義だ。
「ちゃんと返っている」とか言ってる馬鹿は誰だ?出て来い
0398デフォルトの名無しさん
NGNG0399デフォルトの名無しさん
NGNG「参照と値の違いって?」と聞く奴と
「参照とポインタの違いって?」と聞く奴で
どちらがセンスがいいかというと、
もちろん後者。
0400デフォルトの名無しさん
NGNGそうか?pを返すならともかく、*pを返すのなら話は別では?
0401デフォルトの名無しさん
NGNG0402デフォルトの名無しさん
NGNG関係ない。
return *p; は x の参照ではなく、x の値を返している。
0403402
NGNG0404
NGNGわざわざ蒸し返すようなことか?
0405デフォルトの名無しさん
NGNG--
const char* getName() const;
--
const は java でいうところの final でメソッド再定義禁止というのは分かります、が、
カッコ の後の const はどういう意味ですか?
0406デフォルトの名無しさん
NGNGみてちょ
http://www.microsoft.com/japan/developer/library/vccore/_langref_constant_member_functions.htm
0407デフォルトの名無しさん
NGNGそーゆーモノは C++ にはありません。
const char* は getName() が (const char*) 型を返す事を示します。
後ろの const は、そのメンバ関数がメンバ変数を変更しない事を示します。
0408333
NGNGリンク自体がないこととデッドリンクの違いがわからない馬鹿は誰だ? 出て来い
>>399
では訊こう
const float* p = &float(1); // a
const float& r = 1; // b
aとbの違いは何だ?
0409333
NGNGあんたの考えるaとbの違いは何だ?
^^^^^^^^^^^^^^
ここが訊きたい
0410デフォルトの名無しさん
NGNGコンパイル通りませんけど。
0411デフォルトの名無しさん
NGNG0412デフォルトの名無しさん
NGNGさらに実装において有効であることと
C++の仕様上未定義であることは別問題。
333は実装と規格という違う次元のものを完全に混同してしまっている
ある実装において
int &f(int x){int *p=&x;return *p;}
がint f(int x){return x;}と同様に動くからといって
これが規格に沿ったコードであるというわけではない
いうなればコピーコントロールCDだ
0413333
NGNGなあ、それじゃ答えになってないんだよ
int a[1];
int& r[1] = { a[0] };
int* p[1] = { &a[0] };
「違い」って何だ?
0414デフォルトの名無しさん
NGNGもうネタはいいから真面目な質問してくれよ
0415デフォルトの名無しさん
NGNG0416デフォルトの名無しさん
NGNG使用しようとしているのですが、
どうしてもスレッドクラスから呼び出すと
エラーになってしまいます。
なにかやり方があるのでしょうか?
(クラスウィザードを使用しCOleDispatchDriverから派生された
クラスで試みてます)
0417デフォルトの名無しさん
NGNG釣りやネタでないならどんなエラーか書こうな。
0418416
NGNGすみません。
バンドルされていない例外は???.exe(MSVBVM60.dll)にあります
0xc0000005: Access Violation.
です。
0419デフォルトの名無しさん
NGNGp には代入できるけど r には代入できない。
0420デフォルトの名無しさん
NGNG質問の仕方がまちがっていないか(w
inta;
int&r = a;
int*p =&a;
0421333
NGNGいんや、まさしくお前さんに聞きたい質問だ
int a;
int& r = a;
int* p =&a;
int a[1];
int& r[1] = { a[0] };
int* p[1] = { &a[0] };
「違い」って何だ?
0422デフォルトの名無しさん
NGNGちょっと言いたいことを簡潔にまとめてくれないか?>333
0423デフォルトの名無しさん
NGNGだから、コンパイル通らないものの違いを訊いてどうするんだよ。
0424デフォルトの名無しさん
NGNG(゚Д゚)ハァ?
0426デフォルトの名無しさん
NGNGCString &hoge = s;
が実行されてるだけだろう。
で、s は関数を抜けるとデストラクトされるので CString& だとデッドリンクになる。
だから 369 は間違っていないが、あのように回りくどく言う必要はない。
で、それと今話してる内容と何の関係があるんだ?
てっきり新しい話題だと思っていたのだが。
0427デフォルトの名無しさん
NGNG0428デフォルトの名無しさん
NGNGわからん。精神的に病んだものを感じるんだよな。なんだか。
0429デフォルトの名無しさん
NGNG0430デフォルトの名無しさん
NGNG0431デフォルトの名無しさん
NGNG出す必要があるのでsrand()を使うのはわかるのですが
#include <iostream>
#include <cstdlib>
using namespace std;
static int pre=0;//前回の手
static int crn=0;//今回の手
extern int draw;
extern int win;
extern int lose;
int kettei()
{
srand(pre*(win+lose)+draw);←()の中の仕組みを解説してくれる方がいたら教えてください
crn=rand()%3;
pre=crn;
return crn;
}
0432デフォルトの名無しさん
NGNG1 回のプログラム実行で srand() を 2 回以上呼ぶのが間違い。
0433デフォルトの名無しさん
NGNG> extern int win;
> extern int lose;
本気で C++ を使うつもりある?
0434デフォルトの名無しさん
NGNGスレ違い。C++に関わるのは、
#include <iostream>
#include <cstdlib>
using namespace std;
の無問題な部分だけ。
0435デフォルトの名無しさん
NGNG乱数の種を掻き回そうとしてるだけ
0436デフォルトの名無しさん
NGNG0437デフォルトの名無しさん
NGNG> そう書いてあった
(゚Д゚)ハァ?
0438デフォルトの名無しさん
NGNG掻き回していない。
これだと、同じ入力をすれば必ず同じ結果になる。
0439デフォルトの名無しさん
NGNG疑似乱数の周期を嫌って、結果によってシードを再設定しているんだろ。
世の中にはそういうのが必要なプログラムもあるんだよ。
で、式の中身はだいたい適当でいいんだよ。
0440デフォルトの名無しさん
NGNGdrawがどんな動きをするのか不明だけれど、
前回の手を元データにして勝ちてる手を推定しようとしているのでは?
0441デフォルトの名無しさん
NGNGこう書いてありますが何か?
> コンピューターの手をランダムに出す必要があるので
0442デフォルトの名無しさん
NGNGそれが必要な理由を教えてください。
0443デフォルトの名無しさん
NGNG使わなくてはいけない時って、どんな時ですか?
0444デフォルトの名無しさん
NGNG0445デフォルトの名無しさん
NGNG2項演算子のオーバーロードで、左右両項に暗黙の型変換を適用したいとき。
0446デフォルトの名無しさん
NGNGコンストラクタをpublic以外にするなど特殊な生成のされ方をするクラスのインスタンスを
生成・解放・取得なんかするのを別なクラスのメソッドで行なおうとする時。
0447デフォルトの名無しさん
NGNGまず、あるメソッドをprivateに保ちたい、という要求があるとする。
特別なクラス、たとえばシステムの中枢部や、デバッグ用のクラスがあり、
そのメソッドを使わなければならない、という要求が生まれることがある。
これを実現するには、そのメソッドをpublicにしなければならない。
しかしそうすると、想定したシステム中枢部やデバッグクラスではない
普通のクラスからもアクセスできてしまう。これはよろしくない。
friendを使うと、そのメソッドをprivateでキープしたままに、
システム中枢部がアクセスできるようになる。
0448デフォルトの名無しさん
NGNGfriend を乱用してはいけない。既に言われているように
どうしても使わなければいけない場面もあるけれど、
それ以外の場面で性能を気にしないなら、
外部用にインターフェイス分けをして、見せたい部分には実体を、
「外部」には外部用インターフェイスのみのプロクシを渡すと良い。
0449デフォルトの名無しさん
NGNG> 「外部」には外部用インターフェイスのみのプロクシを渡すと良い。
わざわざプロクシクラス作らなくても、必要なメソッドのシグネチャだけ純粋
仮想関数で宣言した基底クラスを用意してやって、それを多重継承するの
が普通かと。
実装の多重継承はいろいろトラップが多いが、インターフェースの多重継承
なら、あまり問題ない。性能面でも間接参照が一回入るだけなので、タイトな
ループ中で呼ぶのでなければまず問題ない。
0450デフォルトの名無しさん
NGNG0452デフォルトの名無しさん
NGNGそういえば、g++にはsigofってのがあった
0453デフォルトの名無しさん
NGNGおれ、使ってみたんすけど、うまく変換できません。
わかる人いたら、まともに使えてるかどうか教えてください。
よろしく
0454デフォルトの名無しさん
NGNG0455デフォルトの名無しさん
NGNG他で(メ´∀`)
0456デフォルトの名無しさん
NGNG0457454
NGNG0458デフォルトの名無しさん
NGNGここは言語のスレであって、VC++.netのスレではありません
他いけや
0459デフォルトの名無しさん
NGNG何についてのコンテキストの事を指しているのだろう?
おまえのコンテキスト(文脈)がわからん。
というわけで>>456に激しく同意。
0460デフォルトの名無しさん
NGNGどこいけば?
0461デフォルトの名無しさん
NGNG0462454
NGNG0463デフォルトの名無しさん
NGNG0464デフォルトの名無しさん
NGNG0465デフォルトの名無しさん
NGNG∧_∧ _ _ .' , .. .∧_∧
( ´_ゝ`) _ .- ― .= ̄  ̄`:, .∴ ' ( >>464
/ '' ̄ __――=', ・,‘ r⌒> _/ /
/ /\ / ̄\-―  ̄ ̄  ̄"'" . ’ | y'⌒ ⌒i
_| ̄ ̄ \ / ヽ \_ | / ノ |
\ ̄ ̄ ̄ ̄ ̄ ̄ \__) , ー' /´ヾ_ノ
||\ \ / , ノ
||\|| ̄ ̄ ̄ ̄ ̄ ̄ ̄|| ̄ / / /
|| || ̄ ̄ ̄ ̄ ̄ ̄ ̄|| / / ,'
|| || || / /| |
!、_/ /
0466デフォルトの名無しさん
NGNGインド人でつか?
0467デフォルトの名無しさん
NGNG0468デフォルトの名無しさん
NGNGでも、seekgして2回読ませるとダメだったです。
そこで、1回目の出力の前にstrでstringに覚えておいて、
2回目以降は覚えといた奴を設定しなおしてから読ませるようにしたら、うまくいきました。
でも、出来上がった出力のサイズによっては巨大なコピーが発生すると思います。
↑のやつよりもっと上手い方法は無いでしょうか?
0469デフォルトの名無しさん
NGNG例えばperlなら Getopt::Long とかがあるけど、C++でそういうライブラリって無いの?
世の中一般に出回ってるものが既にあれば、そっち使ったほうがいいなと思って。
0470デフォルトの名無しさん
NGNGgoogle getopt c++
0471デフォルトの名無しさん
NGNG_( ´∀`) (´∀` )
三(⌒), ノ⊃ ( ) ←>>470
 ̄/ /) ) | | |
. 〈_)\_) (__(___)
∧_∧ .∧_∧
( ´∀) (´∀` )
≡≡三 三ニ⌒) .)
/ /) )  ̄.| | |
〈__)__) (__(___)
∧_∧ ,__ ∧_∧
( ´)ノ ):;:;)∀`)
/  ̄,ノ'' )
C /~ / / /
/ / 〉 (__(__./
\__)\)
ヽ l //
∧_∧(⌒) ―― ★ ―――
( ) /|l // | ヽ
(/ ノl|ll / / | ヽ
(O ノ 彡'' / .|
/ ./ 〉
\__)_)
 ̄ ̄ ̄ ̄ ̄
死ね!
0472469
NGNG0473デフォルトの名無しさん
NGNGフツーにGNUのgetoptでも使っとけば?
0474470
NGNG0475デフォルトの名無しさん
NGNGいや・・・全然悪くないと思うけど・・・。
>>471はAA貼りたかっただけじゃないのかな。気にすんな。
0476デフォルトの名無しさん
NGNG0477469
NGNGC風の要素が入るとなんか嫌な感じなんで、やっぱ作る
0478デフォルトの名無しさん
NGNGだからラップしたらいいんじゃないの?
Argument::immediately_return(false);
Argument::check("help", no_argument);
Argument::check("version", no_argument, true);
Argument::check('o', required_argument);
Argument::parse(argc, argv);
if (Argument::error()) {
cout << "エラー" << endl;
exit(-1);
}
cout << "オプション" << endl;
for (Argument::result_type::iterator it = Argument::options().begin(); it != Argument::options().end(); ++it) {
cout << (*it).first << " = " << (*it).second << endl;
}
cout << endl;
cout << "オプションではない引数" << endl;
for (Argument::result_type::iterator it = Argument::no_options().begin(); it != Argument::no_options().end(); ++it) {
cout << (*it).first << endl;
}
0479デフォルトの名無しさん
NGNG0480デフォルトの名無しさん
NGNGこういう事?
int main()
{
std::stringstream ss;
int i, j;
ss << 1 << ' ' << 2 << std::endl;
std::cout << ss.str();
ss >> i >> j;
std::cout << i << ' ' << j << std::endl;
ss.seekg(0);
ss >> i >> j;
std::cout << i << ' ' << j << std::endl;
}
0481玉三郎
NGNG0483デフォルトの名無しさん
NGNG必ずclassを書かなければなければならない所って無いよね。
いや、素朴な疑問・・・
0484デフォルトの名無しさん
NGNGtemplate<template<class> class Tn> class ttp {};
2番目のclassだけは置き換え不可能と思われ。
0485デフォルトの名無しさん
NGNGテンプレート引数がテンプレートの奴か・・・
見逃してた。うーん、不覚。
0486468
NGNG{
...
}
という処理を繰り返そうとしてたのですが、最初のループの終了条件で、
ss.fail()な状態になってしまって、ストリームが使用不可になってた模様。
ss.clear()してからss.seekg(0)したらもっかい最初から読めました。
これにて解決。
0487デフォルトの名無しさん
NGNGseekしてもこれらのフラグはクリアされず、明示的にclear()してやる必要が
ある。
CからC++に移ってきた人は大抵一度はここで引っ掛かるようだ。
0488デフォルトの名無しさん
NGNGclass Aとclass Bがあり、Aの中にはprivateでCというメンバが
あったとします。このときmainでAとBのオブジェクトを生成し,
Bのオブジェクト内のメンバ関数からAのオブジェクト内のCに
アクセスしたいときどうすればいいんでしょ?
0489デフォルトの名無しさん
NGNGclass Aの中にfriend class Bを埋め込むとか?
0490デフォルトの名無しさん
NGNG0491デフォルトの名無しさん
NGNGfriend class B;
int c;
};
友達になっておけば、BからはAの中は見放題。
#なぜに継承?
0492デフォルトの名無しさん
NGNG{
friend class B;
}
class B : public A ←多分このあたりじゃない?
{
}
0494デフォルトの名無しさん
NGNGもしそうならfriendの必要はないな…。
class A
{
protected:
int C;
};
class B : public A
{
foo() { C = 0; }
};
0495デフォルトの名無しさん
NGNG「クラスじゃなくて実体に対して定義されるイテレータ」のようなものはないですか?
なんでこんな怖い仕様にしとくのかなと思って・・・
#include <string>
#include <iostream>
using namespace std;
void main()
{
string a, b;
a = "abcde";
b = "f";
for (string::iterator i=a.begin(); i!=b.end(); ++i) ←このb.end()
cout << *i;
}
0496デフォルトの名無しさん
NGNGそれはC++には期待できないだろう。
STLportのデバッグモードで実行時エラーにするのが精一杯かと。
0497デフォルトの名無しさん
NGNGpop3に接続して
list取得して
文字は化けててもいいからメールを見る
というだけのプログラムって結構コード長くなるんですか?
perlだと、数行で実現してるの他スレでみたけど
やっぱりc++だとめんどいんですか?
0498デフォルトの名無しさん
NGNGC/C++の場合、言語仕様にそういうのは含まれてないので適当なライブラリを使います。
使うライブラリはOSやコンパイラ、その付属ライブラリに依存します。
PerlとC++を同列にしないで欲しいなぁ。
C++Builderみたいに簡単にWindowsアプリを作れない言語だろ?
0499デフォルトの名無しさん
NGNGPerlだってライブラリ使ってるか外部コマンド使わないと数行にはならない。
その辺用意すればC++だって手間はあんまり変わらん。
言語仕様上多少ソースコードは長いかもしらんが。
0500デフォルトの名無しさん
NGNG0501デフォルトの名無しさん
NGNG「実体」というのは実行時に定まるものだから、コンパイル時に決定するのは無理だ。やるなら、
template<typename Cont, typename Func>
void for_each_c( Cont& c, Func f ) { std::for_each(c.begin(), c.end(), f); }
を常にかますようにして気をつける、程度だろうねぇ。
0502デフォルトの名無しさん
NGNGなるほど、解説どうもです。
Winsockをいかに使うかが味噌なんですね。
UNIXだとsocketをうまく使いこなせと。。。
0503デフォルトの名無しさん
NGNG0504デフォルトの名無しさん
NGNGかなーり、期待してます。
0505デフォルトの名無しさん
NGNG0506デフォルトの名無しさん
NGNG仕様書でも見れば。
0507デフォルトの名無しさん
NGNGgccでのオブジェクトコードに対して大きくなりすぎて困っています.
オブジェクトコードが小さくなる様に,
コンパイルする方法ってあるでしょうか?
パソコン初心者板総合質問スレッドVol.235から
誘導されてきました.
0508デフォルトの名無しさん
NGNGint main(){}
をコンパイルしてみた
-rwxr-xr-x 1 tohkubo tohkubo 13548 Dec 9 19:53 g++.out*
-rwxr-xr-x 1 tohkubo tohkubo 13298 Dec 9 19:53 gcc.out*
確かにg++の方が大きいな(w
0509507
NGNG私の環境だと,g++.outが 60kB, gcc.out 24kBになります.
実際にコンパイルする必要があるプログラムでは,
サイズに10倍以上の差が開くのですが,
NFSでファイルサーバ上でコンパイルするため,
この差がコンパイル速度に致命的な影響を与えます.
/tmp/は容量が少なすぎて,オブジェクトコードを格納するのに足りません.
0510デフォルトの名無しさん
NGNG#include <iostream>とかすると、それだけで膨大な量の継承をリンクするので
大きくなるぞ。だから、小さくしたければC++標準ライブラリをできるだけ使わない
ようにするしかない。
0511508
NGNG-rwxr-xr-x 1 tohkubo tohkubo 3244 Dec 9 20:33 g++.out*
-rwxr-xr-x 1 tohkubo tohkubo 2972 Dec 9 20:33 gcc.out*
でもコンパイル速度じゃぁ strip 意味無いねぇ。
# なんか user 名を晒してしまった事に今更気付いた・・・
0512デフォルトの名無しさん
NGNGgcc より g++ の方が大きくなるよ
0513デフォルトの名無しさん
NGNGbasic_socketstreambuf とか basic_isocketstream とか・・・
UDPはダメか。
0514デフォルトの名無しさん
NGNG0515508
NGNG/lib/ld-linux.so.2
__gmon_start__
-libc.so.6
+libstdc++-libc6.2-2.so.3
+_DYNAMIC
+_init
__deregister_frame_info
+_fini
+_GLOBAL_OFFSET_TABLE_
+__register_frame_info
+libm.so.6
_IO_stdin_used
+libc.so.6
__libc_start_main
-__register_frame_info
+_edata
+__bss_start
+_end
GLIBC_2.0
PTRh
>>512
今は -g は関係無いかと。
# って俺のやってる所もかなり関係無いに近いけど(w
0516デフォルトの名無しさん
NGNG0517507
NGNGCからC++に乗り換えた理由がSTLだったので,
標準ライブラリできるだけ使わないというのは,
何だか哀しい気分です.
>>511
stripしたら1/6以下に小さくなりました.
コンパイル後にstripで小さく出来るんなら,
コンパイラが吐くファイルを直接小さくして
おく事は可能なはずですね.
何か余計なオプションつけてるんですかね.
0518デフォルトの名無しさん
NGNGバイナリサイズを比較するなら static link にしないと、意味がないような。
0519デフォルトの名無しさん
NGNG> コンパイラが吐くファイルを直接小さくして
> おく事は可能なはずですね.
んなわけない。
オブジェクトファイルからシンボル名を消し去ったら、どうやってリンク時に名前を
解決するのやら。
0522デフォルトの名無しさん
NGNG> NFSでファイルサーバ上でコンパイルするため
これがそもそも間違い。コンパイラを動かしてるローカルマシンに
ビルド環境を構築すべし。CVS などのソース管理ツールを使って、
リポジトリはファイルサーバーに置いて共有するようにすれば、
バージョン管理もできて一石二鳥だ。
0523508
NGNGイヤ、オイラのはただのお遊びなので・・・
リンク情報とかチョット違うゼって、それだけのお話でございまして・・・
重箱の隅をつついて遊んでるだけでござりますれば・・・
0524507
NGNG一般ユーザーなので,ローカルマシンへの書き込み権限は
/tmp/しかないのですが,/(/tmp/)に割り振られている
ディスク容量は何故か13MB程度しかありません.
(ハードディスク全体では4GBあるのに..)
ちなみに使ってるマシンはCOMPAQのalpha系CPUで,
Digital UNIXが入ってます.
システム構築したのは確か,COMPAQの方々だったと思いますので,
なんで13MBにしたのか,というツッコミはしないで下さい.
0525デフォルトの名無しさん
NGNG何故素直にホームディレクトリを使わないの?
もしホームが一杯なら NFS の方にホームにあるいらなそうなファイル群を移
したらダメなん?
まぁそれがダメなら NFS に直吐きもやむなしですなぁ。
0527デフォルトの名無しさん
NGNGファイルがローカルか NFS サーバ上かで、コンパイル時間にそれほど差が
出るかねぇ……。ウチは NFS のサーバ上にホームディレクトリ置いてあって、
そこで作業してるけど、それほど困ってないぞ。
>507
ファイルサーバーの性能が足りんか、キャッシュ周りのパラメタチューニングが
イマイチか、ネットワーク混みすぎてるんじゃないのか? どっちにしても gcc
で云々するよりは、ネットワーク管理者捕まえるのが正道と思われ。
0528デフォルトの名無しさん
NGNG0529507
NGNGNFS上でコンパイルした場合に一番時間がかかるのが,
ldの実行部分なのですが,小さいファイルで
/tmpとNFS上ででldの実行時間を比較すると,
/tmpの方が圧倒的に早かったです.
>ネットワーク管理者捕まえるのが正道と思われ。
ネットワーク管理者に聞いてみることにします.
0531デフォルトの名無しさん
NGNGメモリは全然関係ないだろ。
0532デフォルトの名無しさん
NGNGデータを 1 バイトくらいでちょこっとずつ読み書きしようとすると、NFS は速度が
ガタ落ちしたと思ったが。
0534507
NGNGgccのldはg++のldに対して,NFSでも非常に早かったので,
gccとg++で違うldを使ってるって事でしょうか.
それとも,gccとg++で,ldに渡すデフォルトの
オプションが違うとか?
0535デフォルトの名無しさん
NGNGと嘘を言ってみる
0536Stroustrup FAQ!
NGNG0537bloom
NGNGhttp://www.agemasukudasai.com/bloom/
0538デフォルトの名無しさん
NGNG(451のレスは無視してください。コピペミスです)。
実行すると原因不明なエラーが出たので閉じると言われます。
原因がワカリマセンで、困っています。
助けてくだしい・・・c++歴一週間です。
教えて君はむかつくだろうと思いますが、何卒よろしゅうたのんます。
0539デフォルトの名無しさん
NGNG# 何のコンパイラを使ってるかくらいは書いた方がいいぞ。
多分 int (たぶん4Byte) * 1000000個 = 4MB もローカル変数に
割り当てられなくて死んでいるのだろうから、
・static を付ける
・グローバルにする
・new で動的に確保
のどれかをすれば解決する。
0541538
NGNGとりあえずint型の変数を全部グローバルに定義したら
計算はしてくれました!!!(速度はVBよりも遅かったですが・・・)。
ありがとうございます!!!更に勉強する気になった!!!
0542デフォルトの名無しさん
NGNGバグとは関係ないところでいろいろあるが
>for(j=2*i;j<=l;j++){
>if(j%i==0){
>p[j]=0;
これはないだろ。そんなわけでちょっとかえてみた
#include <iostream>
#include <fstream>
#include <cmath>
const max=10001 ;
main() {
bool p[max];
int k=int(std::sqrt((double)max));
std::ofstream fout("素数.txt");
for(int i=2;i<max;i++) p[i]=true ;
for(int i=2;i<=k;i++) if(p[i]) for(int j=2*i;j<max;j+=i) p[j]=false ;
int c=0 ;
for(int i=2;i<max;i++) if(p[i]){
fout << i << '\n';
c++ ;
}
std::cout << "素数は全部で" << c << "個です" << '\n';
fout.close();
}
0543デフォルトの名無しさん
NGNG・・・一体何をしたらそんな事になるの?
0544デフォルトの名無しさん
NGNGワロタ
0545デフォルトの名無しさん
NGNGVB>>>>>>>>>>>>>>>>>>>>>>>>>>VC
0547デフォルトの名無しさん
NGNGうんこはおまいのソースコード
↓これを解説してくれよ
> 速度はVBよりも遅かった
0548デフォルトの名無しさん
NGNG素数を求めるのでしたら、エラトステネスの篩という方法を
試してみては?
0549デフォルトの名無しさん
NGNGええ。それをしているのですが。
0550548
NGNG失礼!ソース読んでなかった。
0551デフォルトの名無しさん
NGNG0552デフォルトの名無しさん
NGNG0553デフォルトの名無しさん
NGNG0554デフォルトの名無しさん
NGNG0555デフォルトの名無しさん
NGNG0556デフォルトの名無しさん
NGNG0557デフォルトの名無しさん
NGNG0558デフォルトの名無しさん
NGNG( ´д)ヒソ(´д`)ヒソ(д` )
0559引き篭もり
NGNG( ´д)ヒソ(´д`)ヒソ(д` ) ほんとよね
最近は変な人増えたものねぇ。
0560デフォルトの名無しさん
NGNG0561デフォルトの名無しさん
NGNG出来ますけど面倒です。std::valarrayは一次元配列に最適化されています
ので、二次元以上の配列を扱うのが下手です。
二次元配列と見なしてアクセスするにはstd::slice、二次元以上の配列には
std::gsliceをstd::valarrayに適用すればよいが、面倒。
0562560
NGNG0563デフォルトの名無しさん
NGNGhttp://www.oonumerics.org/blitz/download/
0564デフォルトの名無しさん
NGNG0565デフォルトの名無しさん
NGNGちょっと思いつかないんだが、どういう風に使われてる?
0567デフォルトの名無しさん
NGNG組み込み型のオーバーロードってできないんじゃ?
0568デフォルトの名無しさん
NGNGarray &array::operator=(int);
array &array::operator,(int);
みたいになってるから組み込み型は関係ない
0569デフォルトの名無しさん
NGNGたぶん、カンマ演算子は = より優先順位が低いので
a = b, c は (a = (b , c)) でなくて ((a = b) , c) と解釈される
ことを忘れていると思われ。
0570デフォルトの名無しさん
NGNG0571デフォルトの名無しさん
NGNG> 組み込み型のオーバーロードってできないんじゃ?
話題とは関係ないけど、逆にこれを利用して組み込み型と
ユーザ定義型を見分けるtemplateってのを見つけたよ。
かなりトリッキーだけど。
0572デフォルトの名無しさん
NGNG久しぶりに C++ の深淵を覗いたような……
(落とし穴にはしょちゅうハマってるが)
0573デフォルトの名無しさん
NGNG久しぶりに C++ の深淵を覗いたような……
(落とし穴にはしょちゅうハマってるが)
0574デフォルトの名無しさん
NGNGaboneユーザでつか?
0575デフォルトの名無しさん
NGNGどのようにするのでしょうか?
VBでいうと、
Dim a()
Redim a(10)
Redim Preserve a(20)
Redim Preserve a(5)
みたいな処理をしたいのですが・・・
0576572=573
NGNGそうです。多重カキコごめん。
0577デフォルトの名無しさん
NGNG特にないので、新しく新規サイズで new[] して、そこに古いデータを
コピーして、古い領域は delete[] する。
配列用のコピー・コンストラクタを作っておくと便利。
std::vector なら resize() メンバ関数を使おう。
0578デフォルトの名無しさん
NGNG意味不明だった。この行はなかったことにしてほしい。
0579デフォルトの名無しさん
NGNGVB厨なんですが、C++を勉強してまして、質問させてください。
VBだと配列をとりあえず
Dim a() as long
と定義しておいて、後で値を確保しつつ配列の長さを変えることの出来る宣言
ReDim Preserve a (10) as long
ってのがあります。
これと同等なことがC++でできないものでしょうか・・・。
0580デフォルトの名無しさん
NGNGnew[]はdelete[]とペアにして使うために、ヒープ領域に配列の大きさを覚えて
おくようになっているので、Cのrealloc()のような事は無理。
新たにnew[]して、転送するしかなかろう。それから、new[]したらデフォルトコンスト
ラクタが呼び出されてしまうので、この事が動作に悪影響を及ぼさないように注意
を払う必要がある。
0581579
NGNGへ?
0582579
NGNG逝って来ます。
0583デフォルトの名無しさん
NGNGC++だととりあえず
std::vector<long> a;
と定義しておいて、後で値を確保しつつ長さを買える
a.resize(10);
とすると良い。
0584575
NGNGやはりコピーしかないのですね。
VBも何気に見えないところでコピーしてるのかな。
ありがと!
0585デフォルトの名無しさん
NGNG組み込みの配列じゃなくて、std::vector をつかえ
0586デフォルトの名無しさん
NGNG組み込みの配列じゃなくて、std::vector をつかえ
0587デフォルトの名無しさん
NGNG0588デフォルトの名無しさん
NGNGC++ では配列は見捨てられた存在ですから。おとなしく vector 使いましょう。
0589デフォルトの名無しさん
NGNGC++ では配列は見捨てられた存在ですから。おとなしく vector 使いましょう。
0590デフォルトの名無しさん
NGNGそれは placement new だ。
0591デフォルトの名無しさん
NGNG0592デフォルトの名無しさん
NGNG0593デフォルトの名無しさん
NGNGdelete[]するとデストラクタが呼び出されてしまうので、転送した後これが動くと
妙な事になる恐れがある。
そこへ行くとplacement newした領域をdeleteしても自動的にはデストラクタを
呼び出さないのでいいかも。
0594デフォルトの名無しさん
NGNG初期のC++には例外が無く、newは0(NULL)を返すことで
エラーを表現できたが、renewは…
0595デフォルトの名無しさん
NGNG。・゚・(ノД`)・゚・。
>>591
その領域の確保には malloc() とか使うの?
あと配列を縮めたい時、どうやってデストラクタ呼ぶの?
renew には、要素が増えた時その分だけのコンストラクタを呼び、要素が減った時には
その分だけのデストラクタを呼び、領域確保は基本的に自動である事を期待したい。
・・・それって結局 vector と似てるけどさ。
>>594
そうか、そういう問題があったのか・・・。
0596595
NGNG>591 は 590 宛て。
0597デフォルトの名無しさん
NGNG> あと配列を縮めたい時、どうやってデストラクタ呼ぶの?
どうやってって、普通に呼べばよいのでは。
0598デフォルトの名無しさん
NGNG0599デフォルトの名無しさん
NGNGなお、hの値と2つめの初期値は、
・h = 0.5, y(0.5) = 1.7974425414
・h = 0.1, y(0.1) = 1.1103418362
・h = 0.05, y(0.05) = 1.0525421928
・h = 0.01, y(0.01) = 1.0101003342
・h = 0.005, y(0.005) = 1.0050250417
・h = 0.001, y(0.001) = 1.0010010003
についてそれぞれ計算すること。
プログラム。
各hについての計算結果と誤差。
計算方法がわかりませんどなたか教えていただけませんか
0600デフォルトの名無しさん
NGNG( ´∀`)/
___∧__________
先生、質問です。
物凄い初歩的な質問ですみません。ランダムに0から9999
の整数を、(理論的に)等確率で出したいのですが、
for(k=1;k<10000;k++){
(int)i=10000*(float)rand()/(int)RAND_MAX;
}
これでは、(その範囲のものは)出ませんよね。どうしたらよいのでしょうか?
0601デフォルトの名無しさん
NGNG0602デフォルトの名無しさん
NGNG0〜RAND_MAXまでは、(RAND_MAX+1)個の要素があるので、
(RAND_MAX+1)で割るのがよろしいかと。
0603デフォルトの名無しさん
NGNG( ´∀`)/
___∧__________
>>600
先生、早速ありがとうございます。これから、がんがって、
勉強します。
>>601
(´・ω・`)
0604デフォルトの名無しさん
NGNG( ´Д`)/
___∧__________
>>602
先生、間違えて、自分にお礼してしまいました。
勉強しても、こういう間違いは直りませんか?
0605590
NGNGいや、renew っていう言葉の意味を考えると VB の ReDim のようなものは
ふさわしくないって言いたかったんだけどな。
っていうか、どう考えても std::vector か、その模倣品しか考えられんから
素直にあきらめた方がいい。
0606デフォルトの名無しさん
NGNG0607デフォルトの名無しさん
NGNG徐々にC++のキャストについても知りましょう。
0608デフォルトの名無しさん
NGNGvoid redim(T *array, unsigned long arraySize, unsigned long newSize)
{
unsigned long copySize = (arraySize > newSize) ? newSize : arraySize;
T *newArray = new T[newSize];
std::memcpy(array, newArray, copySize);
delete[] array;
array = new T[newSize];
std::memcpy(newArray, array, newSize);
delete[] newArray;
}
でいいんでは。VB でも内部的に似たようなことをしているんじゃ?
コンパイルしていないんで動作確認はしてないけど。
unsigned long oldSize = 10;
int *a = new int[size];
unsigned long newSize = 3 でも 20 でも;
redim(a, oldSize, newSize);
で VB と等価かと。
0609デフォルトの名無しさん
NGNG正しくは、それぞれ
std::memcpy(newArray, array, copySize);
std::memcpy(array, newArray, newSize);
0610exclusiver
NGNGso, I believe firmly it!
0611gourmet
NGNGso, I believe delicious it!
0612デフォルトの名無しさん
NGNGint a[10000];
for(int i=0;i<10000;++i){ a[i]=i; }
std::random_shuffle(&a[0], &a[10000]);
これで a の中身を順番に使えば等確率だけど、どう
0613デフォルトの名無しさん
NGNGtemplate <typename X> class AAA {
private:
X mem1;
};
があった時、
class BBB {
private:
AAA<case1> mem1;
public:
};
class CCC {
private:
AAA<case1> mem1;
AAA<case2> mem2;
};
等のように、AAA をメンバ変数と持つようなクラスを設計したいのですが、変数の数が固定されていません。
どのように設計するのが一番スマートなのでしょうか?思いついたのは、AAAの基底クラスを作って、
BBBでvector<AAA_BASE> *mem として、BBBを定義してから、vector<AAA> mem(2)等 のポインタをBBBに渡す
事なのですが。もっとスマートに出来ないでしょうか?
0614デフォルトの名無しさん
NGNG使わなきゃいけないかい?
むしろ可読性下がると思うんだけど。
0615デフォルトの名無しさん
NGNG> AAA<case2> mem2;
これがどうして必要なのか知りたいけど。
0616デフォルトの名無しさん
NGNGボロボロと言っても、実際キャストが必須なのって
GDIオブジェクトのHANDLEと、メッセージ系のLPARAMと
コールバックパラメータのvoid*からの取り出し、
ぐらいでない?最初のは普通C++のクラスでラップするし、
二番目はreinterpret_castした方がわかりやすくていいし、
三番目もstatic_castって書いた方が読みやすいと思う。
あとconst_castが大量に必要になるが、
あれを他のキャストで表現すると余計冗長だし。
0617デフォルトの名無しさん
NGNGconst_castなんかどこで使うの?
0618デフォルトの名無しさん
NGNGC++ を使ってるのに SDK 直ってのが考えにくいが。だいたい ATL::CWindowImpl
なり何なりのフレームワークを一枚かぶせるでしょ。
C++ キャストに関しては、俺は場合によりケリだなぁ。一行に複数の cast が入る
場合、特に reinterpret_cast + const_cast が必要になる場合とかは、C++ キャス
トだと行が長すぎて却って読みにくくなるから C スタイルキャストで済ませる。
0619デフォルトの名無しさん
NGNGT(x) と書くのは OK?
0620デフォルトの名無しさん
NGNGソースとか落ちてないでしょうか(勉強用)。
0621620
NGNGhttp://www.google.co.jp/search?hl=ja&ie=UTF-8&oe=UTF-8&q=IEEE+754+&lr=lang_ja
http://www.octave.org/
0622デフォルトの名無しさん
NGNGAPIを直で叩くケースが少ないBCBな俺の場合、
旧式キャストは一切使わないなぁ。
可読性も大切だけどコンパイルエラーのほうがもっと大切。
つーかキャストって思ったほど使ってないなぁ。
フォーム2つにつき1回つかう位のペース。
ちなみに手持ちのプログラムで一番大きなものにgrepかけてみたらこんな感じ。
static_cast 3個
dynamic_cast 11個
reinterpret_cast 3個
const_cast 0個
組み合わせたものは0個
おりょ、const_castを一番使っていると思っていたのに我ながら意外な結果が…。
0623デフォルトの名無しさん
NGNG何をやりたいのかわからないけれど、そのコードは明らかに異常。
何か根本的に間違っていると思われます。
まずは何をしたいのか、どうしてそのコードが必要になったのか、書いてみそ。
0624デフォルトの名無しさん
NGNG> おりょ、const_castを一番使っていると思っていたのに
ちょとワラタ
0625デフォルトの名無しさん
NGNGアフォか。
0626デフォルトの名無しさん
NGNGネタですか?
それともアフォですか?
0627デフォルトの名無しさん
NGNGgotoがあればbreakなんかいらん、と言っているに等しい発言だな。
0628デフォルトの名無しさん
NGNG625 は、「わざわざ 4 つも予約語増やしたんだからちゃんと使え」 という意味か?
0631デフォルトの名無しさん
NGNGcmath等のインクルード時にC標準ライブラリをstd名前空間に
押し込んでくれたように記憶しているのですがどなたかご存知ありませんか。
ドキュメントやstl_user_config.h,_site_config.h等調べてみたのですが
一向にわかりません。
0632デフォルトの名無しさん
NGNGスレ違い。
0633デフォルトの名無しさん
NGNG察するにあなたは関東の人じゃないな
0635デフォルトの名無しさん
NGNG申し訳ありませんでした。そちらに行ってみます。
0637デフォルトの名無しさん
NGNG0638デフォルトの名無しさん
NGNG0639デフォルトの名無しさん
NGNG0640デフォルトの名無しさん
NGNG0641613
NGNGclass 内部自由度1 {};
...
class 内部自由度N1 {};
class トレーダー1{};
...
class トレーダーN2{};
class 全体{};
void func(全体*){}
で内部自由度がN1個あって、N2人のトレーダーが個性を持って、1...N1の内部自由度を適当に持つとします。
N2人のトレーダーが全体クラスに集まって、互いに影響を受けながら関数funcでやり取りを行いたいのです。
トレーダーが持つ内部自由度の個数が色々変わるのでどうしようかと悩んでいます。トレーダークラスに基底クラス(vector<基底内部自由度>持ち)
を作って、継承させてコンストラクタの書き方を変える事でトレーダークラスを作るのがいいかな?と思ったのです。
最終的には、全体クラスにトレーダー以外の人間も入れたいのです。設計がダメダメなのでしょうか?
0642デフォルトの名無しさん
NGNG> 設計がダメダメなのでしょうか?
はい。
0643613
NGNG0644デフォルトの名無しさん
NGNG0645613
NGNG歩行を実現するシステムなら似ていると思います。
0646デフォルトの名無しさん
NGNGSTLか何か使って簡単にプロパティ型出来ませんか?
0647デフォルトの名無しさん
NGNG(゚Д゚) ハァ?
0648デフォルトの名無しさん
NGNGプロパティ型って何?教えて君でスマソ。
0649デフォルトの名無しさん
NGNGstruct A
{
int param1, param2;
public:
class prop
{
A& ref;
public:
Prop(A& a) : ref(a){}
int operator = (int s){ return ref.param1 = s > 0 ? s : 0; }
operator int (int s){ return ref.param1; }
}Prarameter1;
・・・Prarameter2;
};
Get、Setを一つにまとめてシンプルにしたいので。
0650646
NGNGようはSetPrarameter1、SetPrarameter1の動作をまとめて
obj.Prarameter1 = -1;
count << ob.Prarameter1 << endl;
見たいな使い方が出来るようにしたいのです。
0651デフォルトの名無しさん
NGNGCプリプロセッサを使え
0653デフォルトの名無しさん
NGNG0654デフォルトの名無しさん
NGNGC++ では、インクルード・ガード以外、マクロは極力使わないこと。
定数の定義やマクロ関数の定義等はもってのほか。
>>652
__declspec(property) って C++ 言語じゃないんですけど。
やるなら、
TSomeType& Parameter();
というメンバ関数にする。
0655デフォルトの名無しさん
NGNG是非マイクロソフトさんにも言ってあげてください。
0656デフォルトの名無しさん
NGNG> TSomeType& Parameter();
それだと問題が全く解決しないと思うが…。プロパティ化したいメンバ変数が一つなら
良いけど、複数あったら NG だよね。
現実的な解としては、マクロ使うのが比較的マシな回答だと思う。他に Loki の Tuple
を使うって手もあるが、あまりお奨めはせん。
0657デフォルトの名無しさん
NGNG// property.h
template<class T, class O, T O::*M>
class property {
O &obj;
public:
property(O &o) : obj(o) {}
property& operator=(const T& x) {obj.*M = x; return *this;}
operator const T&() const {return obj.*M;}
operator T&() {return obj.*M;}
};
0658デフォルトの名無しさん
NGNG#include <iostream>
#include "property.h"
class foo
{
int a;
public:
property<int, foo, &foo::a> x;
foo() : a(0), x(*this) {};
friend ostream& operator<<(ostream &os, const foo &f) {
return os << "foo<" << f.x << ">";
}
};
int main()
{
foo f;
cout << f << endl;
f.x = 10;
cout << f << endl;
}
0659デフォルトの名無しさん
NGNGそれ漏れも考えて書こうと思ったけどやめた。
値の範囲チェックとかどうすんのよ?
0660デフォルトの名無しさん
NGNGしかもそれだけでいいのなら
template<class T>
class property {
T obj;
public:
property() : obj(T()) {}
property& operator=(const T& x) {obj = x; return *this;}
operator const T&() const {return obj;}
operator T&() {return obj;}
};
でいいんじゃないか?
0661デフォルトの名無しさん
NGNGこれじゃダメ?
class foo
{
int a;
class prop1 : public property<int, foo, &foo::a> {
typedef property<int, foo, &foo::a> super;
prop1& operator=(int s) { if (s < 0) s = 0; super::operator=(x); return *this;}
};
prop1 x;
}
0662デフォルトの名無しさん
NGNGだな。
0663デフォルトの名無しさん
NGNGそれだけでいいのなら
property<T> の代わりに T でいいんじゃないか?
#include <boost/bind.hpp>
#include <boost/function.hpp>
template<typename T>
class property {
boost::function<T> getterFunc;
boost::function<void, const T&> setterFunc;
public:
template<typename Owner, typename G>
property( Owner& p, G g )
: getterFunc( boost::bind( g, p ) ) {}
template<typename Owner, typename G, typename S>
property( Owner& p, G g, S s )
: getterFunc( boost::bind( g, p ) )
, setterFunc( boost::bind( s, p, _1 ) ) {}
public:
operator T() const { return getterFunc(); }
property& operator=( const T& rhs ) {
setterFunc( rhs ); return *this;
}
};
0664デフォルトの名無しさん
NGNG思いっきりテンプレートに見えるのは、気のせいか?
0665デフォルトの名無しさん
NGNGなんでわざわざそんな不要なコード書きたがるかね
0666デフォルトの名無しさん
NGNG私はいろいろやって(C++でのプロパティを)諦めた人なので
> setX, getX でいいでしょ
は同意だけど
> なんでわざわざそんな不要なコード書きたがるかね
これ、コボラーの発想だよ。
いいものがあればそれを求める。それが ぷらぷら使いさ。
0667デフォルトの名無しさん
NGNGこの、末尾の「=0」ってどういう意味?
0668デフォルトの名無しさん
NGNGpure virtual function・・・・・・
0669デフォルトの名無しさん
NGNGclass ISerialize;
ソースの後の方で、ちゃんと
class ISerialize {
public:
..
}
というように、定義されているのですが、最初の方で 「class ISerialize; 」と書く意味がわかりません。
どういう意図があるのでしょう。
これは省略できるのですか。
0670デフォルトの名無しさん
NGNGここから
>class ISerialize {
>public:
>}
までの間で
ISerialize *p ;
とかやったりするため
0671デフォルトの名無しさん
NGNG0672デフォルトの名無しさん
NGNGclass Test {
class ISerialize& is;
};
class ISerialize {
public:
..
}
0673デフォルトの名無しさん
NGNGclass ISerialize;
class Test {
class ISerialize& is;
};
class ISerialize {
public:
Test *t; //ここがなけりゃ意味ないだろ?
}
0674デフォルトの名無しさん
NGNGそうだったスマソ
0675デフォルトの名無しさん
NGNG避難先の日本語サイトでひけらかして何になる? (water
0676デフォルトの名無しさん
NGNG>Test *t;
は参照よりも実体のほうが趣旨に合うと思うが
0677デフォルトの名無しさん
NGNGこれはつまり、サブクラスは必ず GetType() で値を返して、しかも、そのサブクラスのサブクラスでは、GetType() をオーバライドできない、ということでしょうか。
0679デフォルトの名無しさん
NGNGEffective C++をどうぞ。
0680デフォルトの名無しさん
NGNGサブクラスって意味知ってる?
まあそれはそれとして、純粋仮想関数を一つでもメンバとして持っているクラスは
抽象クラスとなり、インスタンスは作成できない。
かならず継承して、純粋仮想関数をすべてオーバーライドして初めてインスタンス
を作成できるようになる。
0681デフォルトの名無しさん
NGNG0682デフォルトの名無しさん
NGNGこんな物だと思いたまへ。
class A {
protected:
int i;
int j;
public:
virtual int f() = 0;
int g() { return j; }
};
class B : public A {
public:
int f() { return i; }
};
int main()
{
// A a; // インスタンスは作成できない
B b;
b.f();
b.g();
}
0683デフォルトの名無しさん
NGNG0684デフォルトの名無しさん
NGNGインターフェースと実装を切り離す時に便利。入出力関数が決まっていて、
実装にバリエーションがある時、インターフェース部だけを抽象クラスにして
おいて、一種のテンプレートのようにして使う。
0685デフォルトの名無しさん
NGNG今は串を変えて書いてるけど、プロキシ使ってる人は、まとめて規制食らっ
ちゃうよ。
0686683
NGNGありがとうございます。よく分かりました。
0687デフォルトの名無しさん
NGNG0688デフォルトの名無しさん
NGNG0689デフォルトの名無しさん
NGNGメンバ関数のグループ化と規格化
「○○対応をうたうクラスにはこんな関数セットを用意すること」
0690デフォルトの名無しさん
NGNG{
};
class B : public A
{
};
というのがあり、
A* boo(A* obj);
という関数なら、クラスAクラスBのどちらのオブジェクトもとれるのは分かるのですが、
A& boo(A& obj);
なら、Aしか引数,戻り値にすることはできませんか?
0691デフォルトの名無しさん
NGNGB b;
A& boo(A& obj)
{
return b;
}
main()
{
boo(b);
}
0692デフォルトの名無しさん
NGNGBもできます
自分で試すきないの?
0693690
NGNGA boo(A& obj)
{
B b = new B();
return b;
}
という場合に、bを返したら、どうなりますか?
外で
B b = (B)boo(obj);
みたいなのはできないんでしょうか?
0694デフォルトの名無しさん
NGNG0695デフォルトの名無しさん
NGNG0696デフォルトの名無しさん
NGNG実体を基底クラスにキャストするとオブジェクトのスライシング、派生クラス分の
オブジェクトが捨てられて基底クラスに詰め込まれる、が起きる。
ポインタ・参照の場合は(多重継承・仮想継承が絡むと細かいことが色々あるが、
それを忘れれば)何も起こらない。
class Base {};
class Deriv : public Base {}
Base* pb = new Deriv; // OK
特に Base に仮想関数が定義してある場合、pb 経由で仮想関数を呼び出すと
Deriv の関数が呼ばれる。
class Base { public: virtual void foo(); };
class Deriv { public: virtual void foo(); };
Base* pb = new Deriv;
pb->foo(); // Base::foo() ではなく Deriv::foo() が呼ばれる
逆に基底クラスから派生クラスにキャストするのは、実体の場合には論外。ポインタ・
参照の場合には「実はそのポインタ・参照は派生クラスを指している」という場合に限っ
て OK。そうでない場合には、直後にメモリ領域壊すことになる。
Base* pb = new Deriv;
Drive* pd = static_cast<Deriv*>(pb); // OK
Base* pb = new Base;
Deriv* pd = static_cast<Deriv*>(pb); // コンパイルは通るが、直後に惨状が待ち受けてる
っつか、基本事項だから「プログラミング言語 C++」でも買ってきて読んどけ。一から
十まで説明してたら 1 スレ使っても字数が足りんよ。
0697デフォルトの名無しさん
NGNG>> なんでわざわざそんな不要なコード書きたがるかね
>これ、コボラーの発想だよ。
余計なコードを書かないってのは言語を超えた開発の鉄則。
新規コードは最小限に抑えるべし。
念のために言っておくが、変数・関数名を短くしろとか、
改行を惜しめって意味じゃないからね。
無論ひまつぶし等は別だが、その場合はその旨を明記して欲しい。
0698デフォルトの名無しさん
NGNG一人の人も救えないのに世界を救えるはずがないよな!
0699デフォルトの名無しさん
NGNGんなこたーない
0701デフォルトの名無しさん
NGNG言語に純仮想関数の機構(late binding)があると、
オブジェクト指向プログラミングができるようになる。
0702デフォルトの名無しさん
NGNG・・・・・単なる仮想関数でもそうでしょ?
0703デフォルトの名無しさん
NGNGうむ。その通りだ。VBもオブジェクト指向プログラミングはできるのだよ。
0704デフォルトの名無しさん
NGNGそれは仮想ではなく妄想ではないかと・・・
0705デフォルトの名無しさん
NGNGあなたこそ妄想です。
0706デフォルトの名無しさん
NGNG(向き不向き存在価値なしはあるにしても)
0707デフォルトの名無しさん
NGNG0708デフォルトの名無しさん
NGNGってのがよく分かりません。
typedef aiueo* kakikukeko;
のことですか?
0709デフォルトの名無しさん
NGNG0710デフォルトの名無しさん
NGNGそらそーだ
ただ、金属バットで家建てようとしているようなもんだけどな
0711デフォルトの名無しさん
NGNGstruct OOO
{
char c[4];
char j;
};
#include<iostream>
#include<string>
#define print(x) std::cout << (x) <<std::endl;
int main()
{
OOO nn = {'3','3','3','3',22};
print( sizeof( nn.c ) );//4
print( strlen( nn.c ) );//11
std::string BadStr= nn.c;
print( BadStr );//3333???????
std::string TrueStr = BadStr.substr(0,(strlen(nn.c) > sizeof(nn.c) ? sizeof(nn.c) : strlen(nn.c)));
print( TrueStr );//3333
}
0712デフォルトの名無しさん
NGNGkakukikeko は aiueo へのポインタってこと。
aiueo を *kakikukeko であらわせるなら、
&aiueo は kakikukeko でしょ?
aiueo a;
kakukikeko k;
k = &a;
0713デフォルトの名無しさん
NGNG当たり前だろ。
0715デフォルトの名無しさん
NGNGclass MyClass{
const int err = 1;
}
はできませんでした。
0716デフォルトの名無しさん
NGNGこういうのはどう鐘。
class MyClass{
static const int err;
}
const int MyClass::err = 1;
0717デフォルトの名無しさん
NGNGenum使っとけ。
0718デフォルトの名無しさん
NGNGstatic const int err = 1;
}
なら可能(整数だけだが)。できないコンパイラはヘタレ。
0719デフォルトの名無しさん
NGNGつまり、度々無駄なコードを書いては先輩や上司から叱責されていると?
0720デフォルトの名無しさん
NGNG確かにえなーむが妥当
0721デフォルトの名無しさん
NGNGconst int err;
}
MyClass::MyClass() : err(1) {
}
0722デフォルトの名無しさん
NGNG0723721
NGNG正直、すまんかった。
浮気性なもんでJava子や#子の癖が出るんでね。
class MyClass{
const int err;
};
MyClass:MyClass() : err(1){
}
0724デフォルトの名無しさん
NGNGこんどはコロンが一つ…
0725デフォルトの名無しさん
NGNG0726デフォルトの名無しさん
NGNG0727デフォルトの名無しさん
NGNG0729デフォルトの名無しさん
NGNG0730デフォルトの名無しさん
NGNG0731デフォルトの名無しさん
NGNG面白いというかおっぱいしゃぶりたいよね。
0732デフォルトの名無しさん
NGNG0733デフォルトの名無しさん
NGNG0734デフォルトの名無しさん
NGNG何がいいたいのかサパーリわからん。
template<typename T>
T void_ptr_to_hoge(void* p)
{
return reinterpret_cast<T>(p);
}
↑でいいのか?
0735デフォルトの名無しさん
NGNG0736デフォルトの名無しさん
NGNGマルチスレッド化のやり方がわかりません。
教えてください 頼みます
0737デフォルトの名無しさん
NGNGWindowsならWin32APIのCreateThreadでいいんじゃない?
0738デフォルトの名無しさん
NGNG0739デフォルトの名無しさん
NGNG呼んで来ました!
0740デフォルトの名無しさん
NGNG。 ∧_∧。゚
゚ (゚ ´Д`゚ )っ゚
(つ / アァァァァ
| (⌒)
し⌒^
0741デフォルトの名無しさん
NGNGstatic_castじゃないんか?
0742デフォルトの名無しさん
NGNGreinterpret_cast のが妥当だと思うが・・・。
0743デフォルトの名無しさん
NGNG0744デフォルトの名無しさん
NGNGSpy++とかで確認することができる
クラス名があるじゃないですか。
あれはバイナリ(exe)にはどんな風にして格納されてるんでしょうか?
やりたいことはメインウィンドウのクラス名を
バイナリエディタで書き換えたいのです。
よろしくおながいします(´・ω・`)
0745デフォルトの名無しさん
NGNG> クラス名があるじゃないですか。
・・・え?
もしかして、ウィンドウクラスの事?
ならスレ違いと言っておこう。
0746デフォルトの名無しさん
NGNGすれ違いでしたか(´-ω-`;)
C++で作られたプログラムということだったので
こちらで質問してしまいました。ごめんなさいです。
もしよかったらどこのスレッドで聞けば
答えてもらえるのかだけでも教えてもらえませんでしょうか。
ほんとすいません・・・。
0747デフォルトの名無しさん
NGNGスレ違い。
妥当なのはぱっと思いつかないけど、近そうなのは Win32API スレ、Windows
Programing スレあたりか。
0748デフォルトの名無しさん
NGNGありがとうございますです。
さっそくそちらのほうに尋ねてみたいと思いまつ(´・ω・`)
0749デフォルトの名無しさん
NGNG{
friend ostream& operator<<(ostream& os, const Baka& obj);
private:
int aho;
};
として、cppファイルのほうでoperator<<のほうを実装すると、
この関数は、privateにアクセスでききない。と出ます。
クラス宣言の中で、インラインで書いてやると、コンパイル通ります。
コンパイラはVS.NETを使っているのですが、コンパイラの仕様ですか?
何か間違っているのでしょうか?
0750デフォルトの名無しさん
NGNGclassのデフォルトのアクセス権はprivateです。
0751デフォルトの名無しさん
NGNG0752デフォルトの名無しさん
NGNG> 何か間違っているのでしょうか?
お前の関数の書き方。
0753デフォルトの名無しさん
NGNGその .cpp での実装もさらせ。
0754デフォルトの名無しさん
NGNG普通に通るけど何か問題でも?
class Baka
{
friend std::ostream& operator<<(std::ostream& os, const Baka& obj);
int aho;
public:
Baka(int i) : aho(i) {}
};
std::ostream& operator<<(std::ostream& os, const Baka& obj)
{
os << obj.aho;
return os;
}
int main()
{
Baka b(123);
std::cout << b << std::endl;
}
0755デフォルトの名無しさん
NGNGがprivateだから外からアクセスできないってことだろ。
あ た り ま え だ ボ ケ
0756デフォルトの名無しさん
NGNG(゚Д゚)ハァ?friend宣言はメンバじゃないよ。
0757749
NGNG全く同じ様にしてるのですが、
できないんです。何故だろう。
os << obj.aho;
の部分がエラーになります。
因みに、friend関数をpublicにしようが、
privateにしようが同じです。
0758デフォルトの名無しさん
NGNG「全く同じ様にしてる」ってコピペしてみればいいかも・・・
0759デフォルトの名無しさん
NGNG0760デフォルトの名無しさん
NGNG全コードを載せてくれ。
0761デフォルトの名無しさん
NGNGfriendは宣言だけなんだから、privateにしようがpublicにしようが関係ない。
gcc3.2.1(MinGW)では問題なく通ったぞ。
0762749
NGNGすいません。コピペしてみて試してみました。
なんと、コンパイル通りました。
よく見てみると、全く同じでは内容です。
baka.hで
namespace Orokamono
{
class Baka
{
friend std::ostream& operator<<(std::ostream& os, const Baka& obj);
int aho;
public:
Baka(int i) : aho(i) {}
};
}
baka.cppで
#include <iostream>
#include "baka.h"
using namespace std;
using namespace Orokamono;
std::ostream& operator<<(std::ostream& os, const Baka& obj)
{
os << obj.aho;
return os;
}
とやると、フレンド関数がクラスのprivateメンバにアクセスできなくなります。
これは、書き方がおかしいのでしょうか?
0763749
NGNGどうやら
baka.cppで
ostream& Orokamono::operator<<(ostream& os, const Baka& obj)
{
・・・
}
としたら、できるようです。
これって、標準の正しい書き方ですか?
名前空間をusingしているのにこの書き方はおかしい気がします。
0764デフォルトの名無しさん
NGNGこうやったら通ったぞ。
std::ostream& Orokamono::operator<<(std::ostream& os, const Baka& obj)
{
os << obj.aho;
return os;
}
0765デフォルトの名無しさん
NGNG定義する識別子にはusingは関係ない。
0766デフォルトの名無しさん
NGNG<<演算子そのものもOrokamono名前空間で包んでおかないとだめなのでは?
0767デフォルトの名無しさん
NGNGnamespace Orokamono {
class Baka {
friend std::ostream& ::operator<<(std::ostream& os, const Baka& obj);
int aho;
public:
Baka(int i) : aho(i) {}
};
}
のような書き方が意味を持つならば(<<がOrokamonoの外にある事を示す)、
<<の定義部ではOrokamono限定子は不要だったろうが、いろいろ試してみたが、
名前空間の外にあるという指示を出すことは出来ないようだ。
0768749
NGNGfriendの宣言をしているだけで、その関数は名前空間の中で
宣言されてるってことなのでしょうか。
別の名前空間にある関数をfriendにするってこともできなくなるのでは?
0769デフォルトの名無しさん
NGNGできないんだ?
それは困ったね・・・
0770デフォルトの名無しさん
NGNGどうも、friendと名前空間は相性が悪いようです。混ぜて使わない方が
良さそうです。
0771デフォルトの名無しさん
NGNGんなこたーない
0772デフォルトの名無しさん
NGNGでも、いろいろやってみたけど、他の名前空間に含まれる関数をfriendに
できなかったよ。何か方法あるの?
0773デフォルトの名無しさん
NGNG前方宣言しとけば良いだけでは?
namespace NS { void func(); }
class Foo
{
...
friend void NS::func();
};
0774デフォルトの名無しさん
NGNGおお!うまく行った!しかし、operator<<の名前空間の解決のためにかなり
おかしな書き方をしなければならんようです。何とかならないものか?
-- baka2.h
namespace Orokamono {
class Baka;
}
namespace Hentai {
std::ostream& operator<<(std::ostream& os, const Orokamono::Baka& obj);
}
namespace Orokamono {
class Baka {
friend std::ostream& Hentai::operator<<(std::ostream& os, const Baka& obj);
int aho;
public:
Baka(int i) : aho(i) {}
};
}
0775デフォルトの名無しさん
NGNG-- baka2.cpp
#include <iostream>
#include "baka2.h"
namespace Hentai {
std::ostream& operator<<(std::ostream& os, const Orokamono::Baka& obj)
{
os << obj.aho;
return os;
}
};
int main()
{
Orokamono::Baka b(123);
Hentai::operator<<(std::cout, b) << std::endl; //これが嫌らしい。何とかならんか?
}
0776デフォルトの名無しさん
NGNG{
using Hentai::operator<<;
Orokamono::Baka b(123);
std::cout << b << std::endl;
}
のように、こういう時こそusing宣言が役に立ちそうだ。
0777デフォルトの名無しさん
NGNG要点は
・friend関数はclassの構成要素の一部である
(したがって同じヘッダファイル・同じ名前空間に入れるべきである)
・同じ名前空間にあれば、koenigの名前照合規則が適用される
0778デフォルトの名無しさん
NGNGnamespace Orokamono {
class Baka {
int i;
friend void print(Baka& b);
public:
Baka(int j) : i(j) {}
};
void print(Baka& b)
{
std::cout << b.i << std::endl;
}
}
void wrapper(Orokamono::Baka& b)
{
print(b); // Koenig lookup
}
int main()
{
Orokamono::Baka b(123);
wrapper(b);
}
0779デフォルトの名無しさん
NGNGint main()
{
Orokamono::Baka b(123);
std::cout << b << std::endl;
}
が動かないのは、operator<<と、bが違う名前空間に属しているため、
koenig名前照合が働かないからだね。この例では、friend宣言した<<
演算子は、bと同じ名前空間に入れてKoenig名前照合が働くようにす
るのがスマートな解決法だと言えるね。
0780デフォルトの名無しさん
NGNGそう、それを言いたかったの。
それと、>>778はwrapperかまさなくても、main中で直接print(b)と書けるよ。
koenig則のおかげで。
それがprintでなく、operator<<だとしても同じこと。
0781デフォルトの名無しさん
NGNGありがとうー!おかげで名前空間に関する理解が深まりました。
friendが名前空間をまたぐことができるという仕様はそのままにして
おいて、スマートにKoenig則が働くよう、無意味に名前空間を
またぐようなプログラムは書かない方がいいみたいですね。
0782デフォルトの名無しさん
NGNG0783デフォルトの名無しさん
NGNG0784デフォルトの名無しさん
NGNGstruct {int nn;}NN;
SA():NN.nn(NULL){}
};
なんでコンストラクタで初期化できないんだろう?
SA(){NN.nn=0;}
は、うまくいくのに。
0785デフォルトの名無しさん
NGNG当たり前だと思う。
0786デフォルトの名無しさん
NGNGNN.nn っていうのは SA のメンバじゃないから。SA のメンバは NN であって、だから NN のコンストラクタを呼ばないと。
struct SA{
struct NN{
int nn;
NN(int x):nn(x){}
}NN;
SA():NN(NULL){}
};
・・・まで。なんで int を NULL で初期化してるんだ。
0787デフォルトの名無しさん
NGNGnested class のコンストラクタを自分で宣言してないから。コンストラクタを
宣言しない場合にはコンパイラによって暗黙のコンストラクタが生成される
けど、それは引数無しと決まってる。
どうでも良いが int を NULL で初期化するのは、C++ の syntax としては
正しいが、やめた方が…。
0789デフォルトの名無しさん
NGNGNULL は NULL ポインタの値であり、多くのポインタ演算や関数で使われます。
MSDNより。
0790デフォルトの名無しさん
NGNGいけないっつうか・・・・慣習的に NULL はヌルポインタを表すものだから、ポインタじゃない int に NULL を使うのは好ましくない。
0791デフォルトの名無しさん
NGNG0793デフォルトの名無しさん
NGNG関数ポインタをとろうとした場合以外にどんなときが
ありますか?
0794デフォルトの名無しさん
NGNG0795デフォルトの名無しさん
NGNG0796デフォルトの名無しさん
NGNG0797デフォルトの名無しさん
NGNGってありますか?
0798デフォルトの名無しさん
NGNG0799デフォルトの名無しさん
NGNG機械語で出力して確認する。
ソースコードをコメントに入れるオプションを使えば
わかりやすい。
0800デフォルトの名無しさん
NGNGBCCの警告から知ったんだけど
ルーブ文があるとだめだって、あと例外指定付きの関数とか。
0801デフォルトの名無しさん
NGNGそれはBCCがそういう趣味なだけ。
0802800
NGNG0803デフォルトの名無しさん
NGNGポインタに 0 を代入しても良いのかな?
(void*)0 とかにしなければ駄目?
くだらない質問なのでスルーしてもらっても良いです。
0804デフォルトの名無しさん
NGNG詳しくはC-FAQを参照。
C++の0(NULL)は、ほぼCと同じと考えて良い。
(void *の扱いが違うので、NULLの#define等が違う場合が多いが)
0805デフォルトの名無しさん
NGNG0806名無しさん@XEmacs
NGNG0807デフォルトの名無しさん
NGNG定期的に繰り返される話題だが、規格上 C++ では
- 何も有効なオブジェクトを指さないポインタを null ポインタという
- NULL は null ポインタ定数であり、これをポインタ変数に代入すると、その変数は
null ポインタになる
- NULL は整数型で 0 と等しい。(型は int, long, どれかは決まってないけど、とも
かく 0 と比較すると真になる値)
と決まってる。よって NULL と 0 どちらを使うかは、趣味の問題。
0808デフォルトの名無しさん
NGNG乳首がポインタでNULLNULLな訳か・・・・
なるほど・・・奥が深い・・・
0809デフォルトの名無しさん
NGNG処理系によっては、インラインで宣言されているにもかかわらず、インライン展開
できなかったら警告を出すように指定できる。gcc だと -Winline とか。
>794 >796
あとは、末尾再帰以外の再帰がある時もインライン化されないね。このあたりは
Efficient C++ って本が参考になるかな。
0810デフォルトの名無しさん
NGNG速くなる場合があります。
例えば、
g++ -o test1 test1.cpp
cp test1.cpp test11.cpp
g++ -o test11 test11.cpp
とコンパイルすると、test11の方が速いといった具合です。
g++ -S でアセンブラを比較したら、ファイル名の部分だけ異なっているのですが
このような事は一般的に起こるのでしょうか?
今まで気にしていなかったのですが、禿しく気になりました。
0811デフォルトの名無しさん
NGNG気のせい
0812デフォルトの名無しさん
NGNG気にしてたら禿げるよ。
0813810
NGNGtimeでの計測も差が出るし、プロファイラで見ても差があるのですが・・・。
気のせいですかね?
0814デフォルトの名無しさん
NGNGソース出してみ。argv[0]でなんか変わってるとかないだろうな。
0815デフォルトの名無しさん
NGNGバイナリレベルで二つの実行ファイルを比較したら?同じ?
違うとしたら、微妙な所でキャッシュメモリのヒット率に大幅な差が出ている
のかもしれないな。そんな事は滅多にないと思うが。
0816デフォルトの名無しさん
NGNG0817デフォルトの名無しさん
NGNG以前fj.comp.lang.c辺りで話題になっていたが、
gccはアライメントがファイル名で狂うため、
その長さで実行速度が実感できるほど変わるらしいよ。
0818810
NGNGソースは長いのでちょっと出せません。スマソ
サイズ timeの結果
------------------------------------------------------
36232 8.000u 0.000s 0:08.00 100.0% 0+0k 0+0io 139pf+0w
36233 8.010u 0.000s 0:08.01 100.0% 0+0k 0+0io 139pf+0w
36234 8.000u 0.000s 0:08.00 100.0% 0+0k 0+0io 139pf+0w
36235 8.000u 0.000s 0:08.00 100.0% 0+0k 0+0io 139pf+0w
36236 7.850u 0.000s 0:07.85 100.0% 0+0k 0+0io 139pf+0w
36237 7.830u 0.000s 0:07.83 100.0% 0+0k 0+0io 139pf+0w
36238 7.830u 0.000s 0:07.83 100.0% 0+0k 0+0io 139pf+0w
36239 7.840u 0.000s 0:07.85 99.8% 0+0k 0+0io 139pf+0w
36240 7.610u 0.010s 0:07.84 97.1% 0+0k 0+0io 139pf+0w
36241 7.840u 0.000s 0:07.84 100.0% 0+0k 0+0io 139pf+0w
36242 7.850u 0.000s 0:07.85 100.0% 0+0k 0+0io 139pf+0w
36243 7.830u 0.010s 0:07.84 100.0% 0+0k 0+0io 139pf+0w
36244 8.000u 0.000s 0:08.00 100.0% 0+0k 0+0io 139pf+0w
36245 8.010u 0.000s 0:08.01 100.0% 0+0k 0+0io 139pf+0w
ファイルサイズ36236〜36243まで微妙に速いんですよね〜
これやっててかなり萎えました・・・
0819810
NGNG0820デフォルトの名無しさん
NGNGC++に出来ないことはありません。
出来ないように見えるものはすべて不要なものです。
0821デフォルトの名無しさん
NGNG出来るということですか?
0822デフォルトの名無しさん
NGNG不要です。要するにリフレクションなんて機能は使う必要ありません。
0823デフォルトの名無しさん
NGNG0824デフォルトの名無しさん
NGNGC++でJavaを実装すればできる
0825デフォルトの名無しさん
NGNG>>822
0826デフォルトの名無しさん
NGNG例えば設定ファイルによって
実行時に使うクラスが変わる場合は、
どう実装すればよいのでしょう?
0827デフォルトの名無しさん
NGNGC++でJavaを実装してもC++のリフレクションは出来ませんよ。
0828デフォルトの名無しさん
NGNGそんな設計が糞なのです。
0829デフォルトの名無しさん
NGNG0830デフォルトの名無しさん
NGNGそれはリフレクションを使用する例としては不適切だと思う。
0831デフォルトの名無しさん
NGNGswitchとかifとかつかっとけや
0832デフォルトの名無しさん
NGNGメンテ大変なので嫌です。
0833デフォルトの名無しさん
NGNG0834デフォルトの名無しさん
NGNGお前はC++の進化の歴史を知らんのか?
まだまだこれからもC++は進化する。
「プログラミング言語 C++ 第4版」はさらにページ数が倍に。
0835デフォルトの名無しさん
NGNGありが�d。調べます。
0836デフォルトの名無しさん
NGNGむしろ.NET対応言語なら使えるといった方がいいな。
0837デフォルトの名無しさん
NGNGANSI C++ forbids implicit conversion from `void *' in assignment
59: array = malloc( n_array );
↑のようなエラーが出ましたが、どういうことでしょうか?
0838デフォルトの名無しさん
NGNG0839デフォルトの名無しさん
NGNG#define NULL 0
#else
#define NULL (void *)0
#endif
0840デフォルトの名無しさん
NGNGリフレクション風のクラスだか関数だかをお前が管理しなきゃ良いだろ。
0841デフォルトの名無しさん
NGNGmallocの返り値をarrayの型にキャスト。解決。以上
0842デフォルトの名無しさん
NGNGつーかC++でmalloc()使うなよ。new使え。
0843デフォルトの名無しさん
NGNGstatic で生成して、
それを使うクラスは、継承して内部(?)に持たせて使う
やりかたってやってもいいのでしょうか?
例)
class CDXGraphic{
public:
static LPDIRECT3DDEVICE8 s_pDevice;
static void Initialize();
}
class CRender : public CDXGraphic{
public:
void render(){ ここで、s_pDevice を使って書く。
};
0844デフォルトの名無しさん
NGNG俺なら、変数をprotectedにするか、変数はprivateにして取得/設定メソッド
をprotectedにする。
0845デフォルトの名無しさん
NGNG「自分はこんな問題があると思うんだけど、これって不味くない?」
とかなんとか書かないと、問題点が整理されなくて結局質問者の損な気が・・・
0846デフォルトの名無しさん
NGNG0847デフォルトの名無しさん
NGNGC++ だと、ふつー Perl か ruby でスクリプト書いて、テストメソッド順番に呼ぶ
コードを自動生成。
0848デフォルトの名無しさん
NGNG[maybe caused by accessing memory out of bounds,
array indexing out of bounds, using a bad pointer
(failed open(), failed malloc), or going over
the maximum specified memory limit]) .
と出ているけどどう直せばいいんでしょうか?
0849デフォルトの名無しさん
NGNGリフレクションが無いからそうなる。
リフレクションのありがたみを感じられる場面ですな。
0850848
NGNGQ 【Segmentation violation】
"Segmentation violation"というメッセージが出てプログラムが
異常終了してしまう。原因は何だろうか。
A
簡単にいえば、使ってはならないメモリを使おうとした場合に
このようなメッセージが出ます。具体的には、ポインタの使い方を誤ったとか、
printf に指示したフォーマットと与える引数の型が一致しなかったりすると、
このような状況になることがあります。
n_array = (max-1) / 2;
array = (char *)malloc( n_array );
memset( (void *)array, 1, n_array );
ここの部分が原因でしょうか?
0851デフォルトの名無しさん
NGNG要らぬ物議を醸さぬよう、早々にC++仕様に空のオブジェクト参照 null を追加せよ。
0853デフォルトの名無しさん
NGNG#include <stdio.h>
#include <stdlib.h>
#include <string.h>
#define print_usage(s) \
fprintf( stderr, "Usage: %s <min> <max>\n"\
" 5 <= MIN < MAX <= 100,000,000\n",\
s )
static int reverse_int( int i ) {
int res = 0;
while ( i ) {
res *= 10;
res += i % 10;
i /= 10;
}
return res;
}
0854848
NGNGstatic void sieve( char *array, int max ) {
int i;
for ( i = 3; i < max/3; i += 2 ) {
if ( array[i/2-1] ) {
int j;
for ( j = i*2; j <= max; j += i ) {
if ( j&1 )
array[j/2-1] = 0;
}
if ( i != reverse_int(i) )
array[i/2-1] = 0;
}
}
for ( ; i <= max; i += 2 )
if ( array [i/2-1] && i != reverse_int(i) )
array[i/2-1] = 0;
}
0855848
NGNGint main() {
FILE *fin, *fout;
int min, max, n_array, i;
char *array, number[20];
fin = fopen("pprime.in", "r");
fout = fopen("pprime.out", "w");
fgets(number, sizeof number, fin);
sscanf(number, "%d %d", &min, &max);
n_array = (max-1) / 2;
array = (char *)malloc( n_array );
memset( (void *)array, 1, n_array );
sieve( array, max );
for ( i = min/2-1; i < n_array; i++ )
if ( array[i] )
fprintf(fout, "%d\n", i*2+3 );
return 0;
}
0856848
NGNG0857デフォルトの名無しさん
NGNG標準化委員会に提案しる!
0858デフォルトの名無しさん
NGNGスレ違いだが。
SIGSEGVが来るんなら、coreはできてないのか?
デバッガで見てみろ。
0859デフォルトの名無しさん
NGNGmalloc()に失敗してるだけじゃん。阿呆。
0861デフォルトの名無しさん
NGNG0862デフォルトの名無しさん
NGNGC == C++;
0863デフォルトの名無しさん
NGNGC = C++;
0864デフォルトの名無しさん
NGNG未定義?
0865デフォルトの名無しさん
NGNGif(C == C言語 && C++ == C++言語)
C = C++;
0866デフォルトの名無しさん
NGNGCppUnitなら、
CPPUNIT_TEST_SUITEマクロ書くのも対した手間じゃないじゃん。
スクリプト起動するほうがかったるいや。
0867デフォルトの名無しさん
NGNG0868デフォルトの名無しさん
NGNGてか nxt ってだいぶローカルネタだな
0869デフォルトの名無しさん
NGNGSTOP! 全角
0870デフォルトの名無しさん
NGNG0871デフォルトの名無しさん
NGNG0872デフォルトの名無しさん
NGNGふつー make を使う。
0873デフォルトの名無しさん
NGNGxv_overlay.cpp:13: return type specification for constructor invalid
"gcc -c xv_overlay.cpp"で上のエラーがでて困っています。
コードを下記に晒します。
一体どこが悪いのでしょう?
#include <X11/Xlib.h>
#include <X11/extensions/Xvlib.h>
class XvAdaptor{
public:
XvAdaptor();
private:
Display *dpy;
XvAdaptorInfo *adaptor;
void Init(void){};
}
0874873
NGNGXvAdaptor::XvAdaptor():adaptor(NULL){ // xv_overlay.cpp:13 はここになります。
Drawable root;
XvAdaptorInfo **ppAdaptorInfo;
int nAdaptorInfo;
dpy = XOpenDisplay(NULL);
root = DefaultRootWindow(dpy);
XvQueryAdaptors(dpy, root, (u_int*)&nAdaptorInfo, ppAdaptorInfo);
if(nAdaptorInfo>0){
int num;
XvAdaptorInfo *tmp;
for(num = nAdaptorInfo-1; num >= 0; --num){
tmp = *(ppAdaptorInfo + num);
if(tmp->num_ports > 0){
if(adaptor != NULL){
XvFreeAdaptorInfo(adaptor);
}
adaptor=tmp;
}else{
XvFreeAdaptorInfo(tmp);
}
}
}
if(NULL != adaptor) Init();
}
0875デフォルトの名無しさん
NGNG0877デフォルトの名無しさん
NGNG0878873
NGNG数年ぶりにC++に手をだしたもんで…
ひー、趙単純ミス! 逝っときます…
0879デフォルトの名無しさん
NGNGメンバにクラスをってる場合もそうなのでしょうか?
class A {
private:
int i;
public:
void show(void){return i;}
};
class B {
private:
A a;
public:
void show(void){return a.show();}
};
って書くのめんどくさいんで、
class C {
public:
A a;
}
a.show()ってやりたいんですけど。
0880デフォルトの名無しさん
NGNGC c;
c.a.show();です。
0881デフォルトの名無しさん
NGNG0882デフォルトの名無しさん
NGNGBはやってられないんですが...
0883デフォルトの名無しさん
NGNGあんまり意味がないような・・・。
0884デフォルトの名無しさん
NGNGstatic int size;
};
class Y: public X{
};
class Z: public X{
};
でY、Zでstatic int sizeを持つことって出来ませんか?
Y y1, y2, y3は同じsizeをもって
Z z1, z2, z3はも同じsizeを持つけどyとは違うみたいな。
Y,Zにstaticメンバを書けばいいんでしょうが、基底クラスの
概念ではこちらの方が気持ちいいんで。
0885デフォルトの名無しさん
NGNGことが分からんか?
0886デフォルトの名無しさん
NGNGstatic_delayか何かあると気持ちいい〜
0887デフォルトの名無しさん
NGNG配列として宣言されたname、式の中ではポインタに書き換えられる。
そのポインタが指すところってname[0]でcharacter1字しか格納できない、
なのになぜstringを格納できるのでしょうか?
また、この%sのstringには\0が最後に入っているのでしょうか?
0888デフォルトの名無しさん
NGNGフォーマットに従って引数にデータを格納するのですか?
例えば、
fscanf(fin, "%s %d %d", string, &number, &number_2);
とすれば、
stringSample 100 50
でも、
stringSample
100 50
でも、同じデータを格納するってことですか?
0889デフォルトの名無しさん
NGNGfscanfなんて使わないから知らない(ヘルプ見れば)
C言語スレへ行け
0890デフォルトの名無しさん
NGNGC::aに対して外部からどんなアクセスをしてもCの整合性が保てるなら、
それでもいいと思う。
同じ条件で、aをCのメンバにする意義はあまり無いと思う。
0892デフォルトの名無しさん
NGNGtemplate <class T>
class X {
protected:
static int size;
};
class Y : public X<Y> {};
class Z : public X<Z> {};
0893デフォルトの名無しさん
NGNG隠蔽の意味がわかってないみたいですね。
おそらくclassの切り分け方が根本的におかしいのでしょう。
最終的に楽をしたかったら隠蔽についてよく考えてごらん。
プログラムを組むとき、動くか動かないかだけで考えるのはもう卒業しましょう。
オブジェクトには責務の範囲というものがあります。
そのオブジェクトがやるべき事は、確実に成し遂げなければなりません。
そのオブジェクトがやらなくていい事は、全く気にしなくても済むようでなければなりません。
そしてpublicにしたら面倒になる、という感覚が身に付いたとき、
初めてオブジェクト指向が身に付いたと言えるようになるんじゃないかな。
それには関連も同時に学んでいかなければなりません。
オブジェクト指向の設計では、インターフェイスを設計することは当然として、
オブジェクト同士の関連を設計する事も重要です。
だからデザインパターンもあわせて強しましょう。
0894デフォルトの名無しさん
NGNG憂鬱なプログラマのためのオブジェクト指向開発講座
でも見ればわかるんでない?
0895デフォルトの名無しさん
NGNG0896デフォルトの名無しさん
NGNG皆さんどうもありがとうございます。ちょっと勉強して出直してきます。今後とも宜しくお願いします〜。
0897デフォルトの名無しさん
NGNG0898デフォルトの名無しさん
NGNGclass Bはclass Aをprivateで持っていてもいいんですが、
Bのメンバを表示したいためだけなのです。
0899デフォルトの名無しさん
NGNG良く使うのは、仮想関数呼び出しのペナルティなしに template method を実装
したいときかね。ATL の CWindowImpl とかが良いサンプル。
0900デフォルトの名無しさん
NGNGおまいらわざとレスリンクしないようにしてるんですか?
そうじゃなかったらレスリンクして欲しいです。。。
0901デフォルトの名無しさん
NGNG0902デフォルトの名無しさん
NGNGおまいのケツを捧げたら考えなくもないれす。
0903デフォルトの名無しさん
NGNG0904デフォルトの名無しさん
NGNG2ch ブラウザを使いましょう。
0905デフォルトの名無しさん
NGNGえ・・・?Jane使ってますが・・・
0906デフォルトの名無しさん
NGNG逝っていい?
ねえ逝っちゃうよ
ん…んっっ逝くっ
0907278
NGNGクラスのインスタンスをグローバルで宣言すると
デストラクタが呼ばれないのはコンパイラが糞ってことなのか!?
ちなみにコンパイラはVC。
====>
#include <iostream>
using namespace std;
class global
{
public:
global(){cout<<"global start..."<<endl;}
~global(){cout<<"global end."<<endl;}
} g;
void main(void)
{cout<<"main"<<endl;}
<====
これを実行すると...
====>
global start...
main
<====
となってデストラクタが呼ばれないのだが。
これがC++の仕様だったら漏れ、
…拳銃らしきものもって銀行襲っちゃうかも…
0908デフォルトの名無しさん
NGNG0909デフォルトの名無しさん
NGNG0910デフォルトの名無しさん
NGNGそっか。順番で言うと、
cout, global, main, ~cout, ~global
となってタイミングの問題なのね。
十二分にありえる…。
う〜ん…意外だった。
THX!
0911デフォルトの名無しさん
NGNG0912!
NGNG0913デフォルトの名無しさん
NGNGhttp://std.dkuug.dk/jtc1/sc22/wg21/
0914デフォルトの名無しさん
NGNG0915デフォルトの名無しさん
NGNGJTC1/SC22/WG21 is the international standardization working group for the programming language C++.
0916デフォルトの名無しさん
NGNGん?ちゃんと呼ばれるよ。@VC6
global start...
main
global end.
終了時に呼ばれる関数テーブルが壊れてるのかも。
atexit/_onexitが正常に動くか試してみたら?
0917デフォルトの名無しさん
NGNGBorland-C++5.6.2ですが、正しくデストラクタも呼ばれました。
0918デフォルトの名無しさん
NGNG自分で作ったクラスのインスタンスを出力できるようにしたいのですが、
うまくいきません。
グローバル関数として
std::ostream& operator<<(std::ostream &p_rcLOStrm, CMyClass myclass);
という関数を作ったのですが、VC++で
error C2678: 二項演算子 '<<' : 型 'class ostream_withassign' の左オペランドを扱う演算子は定義されていません。(または変換できません)
というエラーになります。
お助けください。
0919デフォルトの名無しさん
NGNGそれだけでは不明です。CMyClassの定義と、operator<<の定義全体をうp
してみて下さい。
0920918
NGNGCMyClassは、演算子[] をオーバーロードしていて、
int operator[](int i);
この関数は正しく動作することを既に確かめています。
で、operator<<は、
std::ostream& operator<<(std::ostream &p_rcLOStrm, CMyClass myclass) {
return p_rcLOStrm << myclass[0] << myclass[1] << myclass[2] << myclass[3];
}
となっています。
0921デフォルトの名無しさん
NGNGうーん普通に動くが?
class CMyClass {
int i;
public:
CMyClass(int j = 0) : i(j) {}
int operator[](int j) {
return i + j;
}
};
std::ostream& operator<<(std::ostream &p_rcLOStrm, CMyClass myclass) {
return p_rcLOStrm << myclass[0] << myclass[1] << myclass[2] << myclass[3];
}
int main()
{
CMyClass cl;
std::cout << cl;
}
0922デフォルトの名無しさん
NGNGstruct T {
int operator[](int i) const { return i; }
};
std::ostream& operator<<(std::ostream& os, const T& t)
{
os << t.operator[](0); //これは通った
os << t[0]; //駄目だった
return os;
}
0923デフォルトの名無しさん
NGNGBorland-C++ 5.6.2及びgcc3.2.1(MinGW)では通ります。
0924918
NGNG#include <iostream.h>
の .h を取って、
using namespace std;
を書いたら正しく動くようになりました。
今まで適当に書いていても動いたので、なめてました…
ともかくありがとうございました。
0925922
NGNG+演算子がどうのってエラーが出たんだけどな。。。
0926デフォルトの名無しさん
NGNG#include <typeinfo>
using namespace std;
class Base {
virtual void f() {}
};
class Derived : public Base {
};
int main()
{
Base base;
try {
Derived& dr = dynamic_cast<Derived&>(base);
}
catch(bad_cast &) {
cout << "here." << endl;
}
catch(exception& e) {
cout << e.what() << endl;
cout << typeid(e).name() << endl;
}
return 0;
}
VC6のcl.exeだと、確かにbad_castが投げられてるようだがcatchできない・・・
bcc5.5.1だとうまくいく。どうなってるんだ・・・
0927デフォルトの名無しさん
NGNG0928デフォルトの名無しさん
NGNGSTLのsetでupper_boundの逆、
引数より小さい最初の要素を探す
ってないでしょうか?
もしないなら、何らか代替えはないでしょうか?
0929デフォルトの名無しさん
NGNG外部シンボルinp,outpが未解決となってしまうエラーについて質問させてください。
I/Oボートにアクセスしステッピングモータを動かす
プログラミングをC/C++で行っています。
しかし
Error: 外部シンボル '_inp' が未解決(C:\DOCUMENTS AND SETTINGS\INFODRIVE\デスクトップ\program.OBJが参照)
Error: 外部シンボル '_outp' が未解決(C:\DOCUMENTS AND SETTINGS\INFODRIVE\デスクトップ\program.OBJ が参照)
というエラーが出てしまいmakeできません。
いろいろ調べて
#include "conio.h"
#include "IOBIN.h"
というのをインクルードしてみたのですがうまくいきません。
Win95、Cpad、Borland C++ Compiler 5.5 を使っています。
ちょっと制御関係の話かもしれませんが、
どなたかアドバイスをいただけませんか?
よろしくお願いします。
0930デフォルトの名無しさん
NGNGlower_bound ?
0931デフォルトの名無しさん
NGNGVCだと /MD オプションでランタイムライブラリにMSVCRTを使うように
するとちゃんとデストラクタも呼ばれます。スタティックリンクのLIBCだと
ダメです。たしかこれってずいぶんまえに一時期さかんに議論されていた
内容だったと思います。
0932デフォルトの名無しさん
NGNG例えばSOCKADDRをSOCKADDR_INに、キャストするようにコピーする方法はありますか?(ちょっと言い方が苦しいですけど)
構造体は型キャストではできないみたいなので。
0933デフォルトの名無しさん
NGNGSOCKADDR sa, *psa; SOCKADDR_IN si, *psi;
si = (SOCKADDR_IN *)&sa;
*psi = (SOCKADDR_IN *)psa;
普通はmemcpyするけどな(理由は略)。
0934デフォルトの名無しさん
NGNGlower_boundは違うようです。
lower_boundは <= という意味で、
upper_boundは < みたいです。
0935デフォルトの名無しさん
NGNGstd::lower_bound(v.begin(), v.end(), value, std::greater());
っていうのはどう?
0936デフォルトの名無しさん
NGNGいろいろやってみたが、なかなか難しい。
まず、std::upper_boundにstd::greaterを与える方向で調べてみた。しかし、
コンテナが逆順にソートされている事になってしまい、うまくいかない。
std::upper_boundは比較基準と同じ基準でソートされているコンテナに
しか適用できない。
次に、rbegin(), rend()を与えてみた。ところが、std::upper_boundにnormal_
iteratorを与えなさいというエラーが出てだめだった。std::upper_boundの
返り値がnormal_iteratorだかららしい。これは意外だった。
結局、方法は一つ、コンテナを逆順に並べ替えてからstd::greaterを与える
という結論に落ち着いた。
他にスマートな方法があったら教えて下さい。
0937デフォルトの名無しさん
NGNGおっとごめん。std::setに対する処理か。std::setはすでにソートされている
から、そのソート基準を切り替えることはできないだろう。
メンバ関数upper_boundで反復子を取得し、それに対しstd::advance(-1)を
適用してはどうか。
0938930
NGNGlower_bound(key) がkeyより大きくないはじめの値、
setは値の重複を許さない、ってことで
set<T> s;
*--s.lower_bound(key) が所要の値になる、ってのは?
0939930
NGNGkeyより小さくない、だった。
0940デフォルトの名無しさん
NGNGmultisetでもlower_boundの一個前でいけるだろ。
ただ、
> *--s.lower_bound(key)
これはイクナイ。
beginが返ってきたときに恐ろしいことが。
0941デフォルトの名無しさん
NGNGtypedef std::pair<int, int> PII;
struct Cmp : public std::binary_function<PII, PII, bool> {
bool operator()(PII i, PII j) {
return i.first <= j.first && i.second < j.second;
}
};
int main()
{
std::set<PII, Cmp> s;
s.insert(std::make_pair(1, 1));
s.insert(std::make_pair(1, 2));
s.insert(std::make_pair(2, 3));
s.insert(std::make_pair(3, 4));
s.insert(std::make_pair(3, 5));
std::set<PII, Cmp>::iterator pos;
pos = s.upper_bound(std::make_pair(3, 1));
pos--;
std::cout << "key = " << pos->first << ", value = " << pos->second << std::endl;
}
0942デフォルトの名無しさん
NGNGbegin()でないかテストを付けました。
if (pos != s.begin()) {
pos--;
std::cout << "key = " << pos->first << ", value = " << pos->second << std::endl;
}
0943デフォルトの名無しさん
NGNG比較関数差し替えるのは、928の要求に合わないと思う。
0944デフォルトの名無しさん
NGNGしかし、比較関数を差し替えないと、std::pairのようなクラスをstd::setに
挿入できないよ。
それから、lower_boundは、elem*以上*の最初の位置を算出するので、
キーの重複を許さないstd::setはいいとして、std::multisetでは同じキー
が連続する場合、最初のキーの位置を出してしまうのでまずいんでは?
upper_boundでelem*より大きい*最初の要素の位置を出して、それが
begin()でない事を確認してから--するのがいいと思う。
0945デフォルトの名無しさん
NGNG>挿入できないよ。
スマソ。これは取り消します。
0946デフォルトの名無しさん
NGNG”引数より小さい最初の要素”ってのはset.begin()か、コンテナ中に存在しないか、
のどっちかだと思うんだが。
0947デフォルトの名無しさん
NGNGstd::multisetはlower_boundでいけますね。
std::setはそもそも重複がないんだし、std::multisetは、同一のキーであっても
順序が重要ではないんだから。
upper_boundだと、同一のキーを検索した場合、それ*より大きい*キーを指して
しまうので、--しても、同一のキーを指してしまい、それ*より小さい*キーを
指してはくれない。
それからキーが同一でも順序が重要な場合はstd::multimapを使いますよね。
0948デフォルトの名無しさん
NGNG0 1 2 3 4 5 6 7 8 9
set内がこうなってたとき、引数として5を与えたら4が帰ってきて欲しいって意味だと思うが
0949デフォルトの名無しさん
NGNGそれだと”引数より小さい最後の要素”じゃないか?
0950デフォルトの名無しさん
NGNGおお、確かに・・・
引数の値から小さい方向に進むこと最初の、と意訳していたが・・・
0951デフォルトの名無しさん
NGNGupper_boundの逆ってことで、推して知ってやるところだと思われ。
0952デフォルトの名無しさん
NGNGこれらのコンテナにはメンバ関数にはupperboundはないが。だから
標準アルゴリズムのstd::upper_boundを適用したと仮定して、
1 2 3 4 4 4 5 6 7
となっていたとして、upperbound(4)の逆とは、
1 2 3 4 4 4 5 6 7
^ ここを指すのか(lower_bound)、
1 2 3 4 4 4 5 6 7
^ ここを指すのかで話が違ってくる。
連想コンテナではどちらでもよい。同一キーの順序づけがないんだから。
0953デフォルトの名無しさん
NGNG実装依存?
printf("before);
{
foo b:
}
printf("after");
0954デフォルトの名無しさん
NGNG当然破棄。これはCもC++も同じ。
0955922
NGNG解決しました。memcpyでOKでした。レスありが�dございました。
SOCKADDR sock; SOCKADDR_IN soin;
memcpy( &sock, &soin, sizeof(SOCKADDR) );
0956デフォルトの名無しさん
NGNGサイズが全く同じなら
SOCKADDR sock;
SOCKADDR_IN soin;
soin = *reinterpret_cast<SOCKADDR_IN *>(&sock);
で出来ないことはない。
一応参考までに。
0957928
NGNG説明も悪かったみたいで、
例えばset内に 1 2 4 とある場合、引数が
5の場合4
4の場合2
3の場合2
2の場合1
1の場合エラー
0の場合エラー
という処理をしたかったんです。
結局、
if (s.empty()) return false;
pos = s.lower_bound(key);
if (pos == s.begin()) return false;
pos--;
// 以降該当したものがある場合の処理
というようにしました。
みなさんありがとうございました。
0958デフォルトの名無しさん
NGNGclass A{
public:
A(int n); // コンストラクタ
};
class B: public A{
}
int main(){
B x(5);
}
とやったらエラーが出るんですけど、コンストラクタって継承されないんですか?
0959デフォルトの名無しさん
NGNGpublic:
B(int n):A(n){}
};
0960デフォルトの名無しさん
NGNGyes
0961デフォルトの名無しさん
NGNGが通る(VC)だけど、意味あるの?
0962デフォルトの名無しさん
NGNGちょっと訊きたいんだけど、どうしてそういうコードを書こうと思ったの?
0963デフォルトの名無しさん
NGNG0964デフォルトの名無しさん
NGNG> test.cpp(10): error C2998: '<template parameter>t': テンプレート定義にはなれません。
と言われてしまったが。
0965デフォルトの名無しさん
NGNG0966デフォルトの名無しさん
NGNG検索に引っかかりにくい名前なもので探せないのです。
0967966
NGNGコンパイラ(コンバータ)のソースという意味です。
0968デフォルトの名無しさん
NGNG0969デフォルトの名無しさん
NGNG0970デフォルトの名無しさん
NGNGリッチーのHPにはBのソースとかあるのに
ストラウストラップのHPには昔話が見当たらない
0971デフォルトの名無しさん
NGNGところで誰も新スレ立てないけどどうして?
ちゃんとhttp://std.dkuug.dk/jtc1/sc22/wg21/も入れといてね。
0972デフォルトの名無しさん
NGNGhttp://www.unipress.com/toolkit/cfront.html
0973デフォルトの名無しさん
NGNG基底 class CGorua{略};
派生1 class CMorua : public CGorua {略}
派生2 class CHorua : public CGorua {略}
派生3 class CForua : public CGorua {略}
があり、派生クラス1〜3のオブジェクトを1つずつ作成しました。
また、別のクラスとしてCAhyaがあり、オブジェクトを1つ作成しました。
派生1〜3から、CAhyaのオブジェクトを使うにはどうしたらいいのでしょうか。
グローバルでCAhya ahyahya;と宣言するのでしょうか。
どうぞよろしくおねがいします。
0974デフォルトの名無しさん
NGNGfriend class
0975デフォルトの名無しさん
NGNGyou should stand thread of continuing!
0977966
NGNG微妙な所ですけど、汎用相談スレに書いて解答が得られるとも思えず、
専用スレを立てるのは明らかに荒らしなので、結局ここしかないんですよね。
>>969
文化的価値から知的興味+この間の C マガの特集を見て
コンバータ作りたいなぁ…なんて思ってたりして、その参考も含めてなんです。
>>970
エイプリールフールのジョークならあるのにね(あれはストラウストラップのページじゃないんですっけ?日本語訳しか読んだことないので不明かも)
>>972
サンクスコです。…でも商品ぽいですね…。さすがにお金だして買う気はしないです。ごめんなさい。
せっかくなので初心者さんの質問にも答えてみます。
>>973
質問の意図が不明です。public な部分を使うだけならどこからでも出来ますよ。
全体で唯一のインスタンスを使うならグローバル変数より Singleton と呼ばれる方法を使う方がスマートです(わからなければ検索サイトで Singleton を検索してみてください。)
アクセスコントロールの話の場合は >>974 さんの回答の通り friend にするのが手っ取り早い方法ですが、あまり好ましくありません。
アクセスを制限する Adapter クラスを通して使うとよいかもしれません。
ってなんかデザパタの宣教師みたいな回答になっちゃったな…。
0978デフォルトの名無しさん
NGNGと、したときの領域を動的に削る方法ってあります?
0979デフォルトの名無しさん
NGNG>>973
>オブジェクトを使う
とあるから、単に関連を張りたいだけの気がする。
CAhyaがプログラム中で一度しか出てこないならsingleton
多数出てくるなら、派生1〜3のコンストラクタに
ahyahyaへのポインタを渡すか、関連を張る関数を用意する。
>>978
いみふめ
静的に確保した領域は動的には変更できませんよ?
多分 vector<char> が望みのものだと思うけど
0980デフォルトの名無しさん
NGNGvoid* operator new(size_t size,void* buf){return buf;}
template<typename T,size_t reg=1>struct TSA{
enum{num=reg};
char p[sizeof(T)*num];
T* pt;
TSA(){pt=new(p)T;}
};
class X{void func(){}};
/**************************************************************/
void main(void)
{
TSA<X> tsa;
cout<<&tsa.p<<sizeof(tsa.p)<<endl;
cout<<&tsa.pt<<sizeof(tsa.pt)<<endl;
}
となっているとき、pとptのサイズが違うんですが、これって正しいのですか?
あと、アドレスも違うのですが。
0981デフォルトの名無しさん
NGNG正しい
> アドレスも違うのですが。
あたりまえ
0982こうか?
NGNG{
char p[100];
char *pt;
pt = p;
cout<<&p<<sizeof(p)<<endl;
cout<<&pt<<sizeof(pt)<<endl;
}
となっているとき、pとptのサイズが違うんですが、これって正しいのですか?
あと、アドレスも違うのですが。
0983デフォルトの名無しさん
NGNGptの「中身が」pのアドレスっていうだけだからどっちもそれで正しい
0984982
NGNG0986デフォルトの名無しさん
NGNGsscanf( argv[1]+1, "%2x", &x );
ココのargv[1]+1の部分はどういった処理なんでしょうか。
argvはchar型なので文字列連結では無いとは思うのですが。。
0987デフォルトの名無しさん
NGNG0988デフォルトの名無しさん
NGNG0989デフォルトの名無しさん
NGNGargv は char **型じゃないの?
あんたのプログラムがどうなってるか知らんから分からんけどなー
0990デフォルトの名無しさん
NGNG0991デフォルトの名無しさん
NGNG0992デフォルトの名無しさん
NGNG0994デフォルトの名無しさん
NGNG0995デフォルトの名無しさん
NGNG>>993でいいのか?
0996デフォルトの名無しさん
NGNG0997デフォルトの名無しさん
NGNG0998デフォルトの名無しさん
NGNG998!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
0999デフォルトの名無しさん
NGNG1000デフォルトの名無しさん
NGNG10011001
Over 1000Threadもう書けないので、新しいスレッドを立ててくださいです。。。
レス数が1000を超えています。これ以上書き込みはできません。