C++相談室 part85
■ このスレッドは過去ログ倉庫に格納されています
0001デフォルトの名無しさん
2010/10/09(土) 20:22:35ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。
前スレ
C++相談室 part84
http://hibari.2ch.net/test/read.cgi/tech/1284736187/
0455デフォルトの名無しさん
2010/10/24(日) 17:21:28あ、普通に参照渡してもコピーされるのね…なんか勘違いしてた
どうもですた
0456デフォルトの名無しさん
2010/10/24(日) 17:21:46配置new
0457デフォルトの名無しさん
2010/10/24(日) 19:06:38Java もやってる?Java だと挙動違うから混乱しやすい
0458デフォルトの名無しさん
2010/10/24(日) 19:29:590459デフォルトの名無しさん
2010/10/24(日) 19:31:310460デフォルトの名無しさん
2010/10/24(日) 19:33:45そのメンバのクラスのコンストラクタって実行されますか?
実行されるとしたら、どのタイミングで実行されますか?
0461デフォルトの名無しさん
2010/10/24(日) 19:35:15クラス内の→クラス内に
が正しいです。
0462デフォルトの名無しさん
2010/10/24(日) 19:37:420463デフォルトの名無しさん
2010/10/24(日) 19:38:570464デフォルトの名無しさん
2010/10/24(日) 19:43:430465デフォルトの名無しさん
2010/10/24(日) 19:44:330466デフォルトの名無しさん
2010/10/24(日) 19:46:25:now(0),width(0),height(0){}
こんな感じ
0467デフォルトの名無しさん
2010/10/24(日) 19:47:430468デフォルトの名無しさん
2010/10/24(日) 19:48:570469デフォルトの名無しさん
2010/10/24(日) 19:52:510470デフォルトの名無しさん
2010/10/24(日) 19:53:15問題のメンバはどれなんだ
質問してる内容についてのことが何もわからないぞ
0471デフォルトの名無しさん
2010/10/24(日) 20:01:09http://codepad.org/UxA3ZeAX
printf挟むなりデバッガ使うなりしようぜ
0472デフォルトの名無しさん
2010/10/24(日) 20:05:24!?
0473デフォルトの名無しさん
2010/10/24(日) 20:08:06やっぱり実行されますよね。
どっかで値が変わってしまってるようなので、徹底的に調べます。
0474デフォルトの名無しさん
2010/10/24(日) 21:37:090475デフォルトの名無しさん
2010/10/24(日) 21:40:020477デフォルトの名無しさん
2010/10/24(日) 21:58:31どのメソッドにconst付けるべきか判断できないなら、
それは設計に失敗しているかもしれない
0478デフォルトの名無しさん
2010/10/24(日) 22:04:20データ構造を考えるようになると、いろいろと。
0479デフォルトの名無しさん
2010/10/26(火) 21:53:18フレームワーク使うと、裏でいろいろやってくれているから発生しな気がするんだけど
0480デフォルトの名無しさん
2010/10/26(火) 22:13:030481デフォルトの名無しさん
2010/10/26(火) 22:51:59そうとは限らないぞ
巨大な配列や巨大なクラスをローカル変数に取るとスタックがパンクする事がある
0482デフォルトの名無しさん
2010/10/26(火) 22:52:290483デフォルトの名無しさん
2010/10/26(火) 22:56:07俺も再帰覚えたての頃やらかしたわ
0484デフォルトの名無しさん
2010/10/26(火) 22:58:14それ以前に二次元配列あたりでぶちあたるはずだが
0485デフォルトの名無しさん
2010/10/26(火) 22:58:53その後は使わないんですよね?
0486デフォルトの名無しさん
2010/10/26(火) 22:59:26再帰書いても滅多なことではオーバーフロー起こさないよね
0487デフォルトの名無しさん
2010/10/26(火) 23:15:05ライブラリを作成してみようとしたところで詰まってしまいました
調べてみても納得いく説明があるサイトが見つからず、他に聞ける人もいなくて困っています
もしかしたらライブラリの解釈も間違っているかもしれないので、1からご教授頂けると助かります
私の中では静的ライブラリ(libファイル)の中には複数のh、cppファイルを内包できて、
ライブラリを利用する関数などの宣言が書かれているhファイルと出来上がったlibファイルをプロジェクトに追加すれば呼び出せる
と考えているのですがどうでしょうか
また、ライブラリの中にクラスを入れたい場合や、ライブラリ内にあるクラス同士での#includeなどの操作、
ひとつのlibファイルに複数のクラスを入れてもいいものなのかどうなのかなど、
全然わからず手探り状態なので、どなたかよろしくお願いします
0488デフォルトの名無しさん
2010/10/26(火) 23:23:13libもリンクしないと使えないし、コンパイルする環境が違うと困る
0489デフォルトの名無しさん
2010/10/26(火) 23:51:070490デフォルトの名無しさん
2010/10/26(火) 23:57:43たとえばライブラリ内に以下の4ファイルを含めてあった場合
foo.h //外部用関数宣言&#include "bar.h"
bar.h //クラス宣言
bar.cpp //クラス実装 #include "bar.h"
この場合は使用するプロジェクトへ追加するファイルはfoo.libとfoo.hの二つで、
プロジェクト側でのリンクが必要、ということでいいのでしょうか?
0491デフォルトの名無しさん
2010/10/26(火) 23:57:46API の考え方ならその API のスレ
0492デフォルトの名無しさん
2010/10/26(火) 23:58:370493デフォルトの名無しさん
2010/10/26(火) 23:59:23ミスた、3ファイルの間違いです修正
0494デフォルトの名無しさん
2010/10/27(水) 00:02:37叩かれて戻ってきたらすいません。
0495デフォルトの名無しさん
2010/10/27(水) 00:44:46全部にゲッタメンバをつけるのはなんか変なので
0496デフォルトの名無しさん
2010/10/27(水) 00:49:320497デフォルトの名無しさん
2010/10/27(水) 01:09:34内部状態なんで外部から変更されたくないけど、観測する必要があるので
0498デフォルトの名無しさん
2010/10/27(水) 01:12:430499デフォルトの名無しさん
2010/10/27(水) 01:13:40何故、自分で試さないの?
バカなの?死ぬの?
0500デフォルトの名無しさん
2010/10/27(水) 01:21:430501デフォルトの名無しさん
2010/10/27(水) 08:13:300502デフォルトの名無しさん
2010/10/27(水) 09:09:06何を返すの?
0503デフォルトの名無しさん
2010/10/27(水) 10:15:17やってみればいいじゃん
0504デフォルトの名無しさん
2010/10/27(水) 10:22:21スコープを制限したいんですが、関数内に関数を書くことは出来ませんよね?
なんか近い方法ないでしょうか?
0505デフォルトの名無しさん
2010/10/27(水) 10:23:16期待しているぞ>>582
お前ならできる>>582
0506デフォルトの名無しさん
2010/10/27(水) 10:23:58○>>502
実際やってみた
int main()
{
std::vector<int> vi;
std::vector<int>::const_iterator vic = vi.begin(), vic2 = vi.end();
if (vic == vic2)
std::cout << "vic == vic2" << std::endl;
}
この結果が vic == vic2 なので、viの中身は空である事を考慮すれば、vicの指す
要素は無効であるが、vic2は正しく空のコンテナの次を指しており、vicは実質的に
それと等しく初期化されている事がわかる
本当の所はどうなのかは規格票によらなければならないが、まあだいたい予想通り
と言う事が出来る
0507デフォルトの名無しさん
2010/10/27(水) 10:28:42構造体とかクラスを関数内で定義すれば書ける。
0508デフォルトの名無しさん
2010/10/27(水) 10:30:31関数オブジェクトという奴でしょうか?
ただそれだとメソッド内クラスから元のクラスのメンバが参照できないため
invaild use of nonstatic data memberエラーになってしまうんです
0509デフォルトの名無しさん
2010/10/27(水) 10:36:20プロジェクトを作成する手間が省けたわ
0510デフォルトの名無しさん
2010/10/27(水) 10:48:17C++0xのラムダ式をmutableにして無理矢理使う
0511デフォルトの名無しさん
2010/10/27(水) 11:07:10いいですね、これ
コンパイラも対応しているみたいですし
ありがとうございます
0512デフォルトの名無しさん
2010/10/27(水) 11:23:20もう遅いけどそういう場合はthisポインタ渡しとけばいいんじゃない?
0513デフォルトの名無しさん
2010/10/27(水) 11:28:510514デフォルトの名無しさん
2010/10/27(水) 11:29:31http://codepad.org/mM6aROvP
foo::func()内でbar::func()を宣言して、bar::func()内でfoo::Valueにアクセスしている。
0515デフォルトの名無しさん
2010/10/27(水) 15:09:53頭おかしいやつが登場したww
private指定したいわけじゃなくて??
0516デフォルトの名無しさん
2010/10/27(水) 15:19:49観測したい変数を全部構造体でまとめて、
それをconst参照するゲッタを作ればいい
ようはいちいちゲッタ作るの面倒って話でしょ?
0517デフォルトの名無しさん
2010/10/27(水) 15:19:50・雪駄は勿論、下駄は必要なだけで充分。
・基本的に、下駄を公開するのは設計に問題がある場合が多い。本来なら適切な名前のメソッドで置き換えられるだろう。
・当然、雪駄については下駄以上に生で晒すのはおかしい。
という認識がないことじゃないか。
結論:
下駄や雪駄も生足同様、安易に公開するもんじゃない。
0518デフォルトの名無しさん
2010/10/27(水) 15:21:41なにかおかしくね?
0519デフォルトの名無しさん
2010/10/27(水) 15:25:060520デフォルトの名無しさん
2010/10/27(水) 15:29:23「装備の一覧を見せてくれ。」
「一番いいのはどれだ。」
「そいつを頼む。」
下駄を使わない場合。
「一番いいのを頼む。」
0521デフォルトの名無しさん
2010/10/27(水) 15:39:500522デフォルトの名無しさん
2010/10/27(水) 16:41:43内部状態を外部から観測してなにするの?
0523デフォルトの名無しさん
2010/10/27(水) 16:41:460524デフォルトの名無しさん
2010/10/27(水) 16:46:410525デフォルトの名無しさん
2010/10/27(水) 16:46:550526デフォルトの名無しさん
2010/10/27(水) 17:45:13コンパイル防壁も兼ねてProxyでも使っとけばええんちゃうの?
class Logic
{
int x;
public:
class ProxyForView
{
Logic const * mpL;
public:
ProxyForView(Logic const * pL) : mpL(pL) {}
int x(void) const { return mpL->x; }
};
ProxyForView proxy(void) const { return ProxyForView(this); }
};
int main(void)
{
Logic l;
Logic::ProxyForView p(l.proxy());
std::cout << p.x() << std::endl;
return 0;
}
0527デフォルトの名無しさん
2010/10/27(水) 17:53:02読み込みに失敗したら強制終了させたいんです。
でもコンストラクタって、戻り値返せないじゃないですか。
そのときって、exit(0)でkillするしかないんですか?
exitした時の動作って、ウィンドウとかちゃんと終了してくれるんですか?
0528デフォルトの名無しさん
2010/10/27(水) 17:54:28・initメンバ
0529デフォルトの名無しさん
2010/10/27(水) 17:54:560530デフォルトの名無しさん
2010/10/27(水) 17:55:140531デフォルトの名無しさん
2010/10/27(水) 18:05:10考えるしかなさそうだな。わかったよ。
0532デフォルトの名無しさん
2010/10/27(水) 18:52:21コンパイルエラーが出るんですけど
エラー E2247 readonly1.cpp 19: 'Logic::x' はアクセスできない (関数 Logic::ProxyForView::x() const )
0533デフォルトの名無しさん
2010/10/27(水) 19:04:44別にまずくないよ。
std::vectorだってコンストラクタで失敗すれば例外投げるだけでしょ。
0534デフォルトの名無しさん
2010/10/27(水) 19:19:31struct a
{
private: int b;
public: const int& c;
a() : c(b) { }
};
const_cast されたらアウトだけどね
0535デフォルトの名無しさん
2010/10/27(水) 19:21:50ちゃんとpublicにしてるか?
0536デフォルトの名無しさん
2010/10/27(水) 19:24:40>>526をコピペしたんですけど
今からEclipse+CDTでもやってみます
0537デフォルトの名無しさん
2010/10/27(水) 19:25:07環境は?
0538デフォルトの名無しさん
2010/10/27(水) 19:27:36MinGW4.5.1ではコンパイル出来ました
ECC6.3.0のバグらしいです
0539デフォルトの名無しさん
2010/10/27(水) 20:05:45コンストラクタで例外は投げてもいいよ。
でも例外のへんな使い方はしないでね。
0540デフォルトの名無しさん
2010/10/27(水) 20:48:38今のところ普通に動いてるが、もっとでかくなる予定だから問題あるなら早めに修正しときたい。
0541デフォルトの名無しさん
2010/10/27(水) 20:51:110542デフォルトの名無しさん
2010/10/27(水) 20:51:210543デフォルトの名無しさん
2010/10/27(水) 20:52:480544デフォルトの名無しさん
2010/10/27(水) 20:57:04newしたかをosが監視して、プロセスの終了とともにOSがヒープ領域を解放すればいいだけじゃないですか
0545デフォルトの名無しさん
2010/10/27(水) 20:58:22へぼだから
0546デフォルトの名無しさん
2010/10/27(水) 21:00:130547デフォルトの名無しさん
2010/10/27(水) 21:03:48OS って前提があるようだが
どんな範囲の話がしたいんだ?
0548デフォルトの名無しさん
2010/10/27(水) 21:04:07> 何故メモリーリークが発生するのですか?
解放してないからです。
> newしたかをosが監視して、プロセスの終了とともにOSがヒープ領域を解放すればいいだけじゃないですか
普通は解放してます。
0549デフォルトの名無しさん
2010/10/27(水) 21:05:550550デフォルトの名無しさん
2010/10/27(水) 21:07:53Amiga以外にプロセスの終了時に開放しないOSが有んのかよ
0551デフォルトの名無しさん
2010/10/27(水) 21:09:490552デフォルトの名無しさん
2010/10/27(水) 21:17:41言語仕様的に必要性がない
0554デフォルトの名無しさん
2010/10/27(水) 21:25:22普通は入れ子のクラスは親のクラスのプライベート領域にもアクセス出来るんだけど
古いコンパイラだと対応してないらしい
そういう時はProxyをfriendにして誤魔化してくれ
■ このスレッドは過去ログ倉庫に格納されています