[表示 : 全て 最新50 1-99 101- 201- 301- 401- 501- 601- 701- 801- 2chのread.cgiへ]
Update time : 05/09 21:45 / Filesize : 205 KB / Number-of Response : 843
[このスレッドの書き込みを削除する]
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧] [類似スレッド一覧]


↑キャッシュ検索、類似スレ動作を修正しました、ご迷惑をお掛けしました

C++相談室 part56



1 名前:デフォルトの名無しさん [2007/07/26(木) 00:33:07 ]
C++に関する質問やら話題やらはこちらへどうぞ。
ただし質問の前にはFAQに一通り目を通してください。
IDE (VC++など)などの使い方の質問はその開発環境のスレに
お願いします。

テンプレその他 >>2-15 付近参照

前スレ
class C++相談室lt;part56gt;
pc11.2ch.net/test/read.cgi/tech/1170343752/l50



285 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 23:16:39 ]
>>284
メンバテンプレートって呼び名が付いてるのに書くことはできないんだ。ふーん。
コンパイラ何使ってるの?

286 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 23:19:40 ]
たしかVC5か6かなんかでは出来なかっただけ。

287 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 23:45:41 ]
vc6 では出来る。
が、一部文法が通らないな。

hoge h;
h.f(1); // OK
h.f<float>(1); // NG

vc5 は知らん。

288 名前:284 mailto:sage [2007/08/12(日) 23:46:09 ]
あ゛ぅ、手元のコンパイラでやってみたらできた・・・
>>283 すまん、284 は全くのマチガイ。忘れてくれ m(_ _)m

>>285 VC2005。
>>286 今試したら VC6 ではできた。VC 5 以前はわからんけど。

いぢめないで。。。

289 名前:デフォルトの名無しさん mailto:sage [2007/08/12(日) 23:59:00 ]
ちょっと興味が湧いたので実装してみた。

   template<class derived_t>
   class TClassData {
   private:
      template<typename T>
      string& data(T* t) {
         static string data;
         return data;
      }
      friend derived_t;
   };

   class TManager : TClassData<TManager> {
   public:
      void set(string const& s) { data(this) = s; };
      string& get() { return data(this); };
   };

…………しかし、継承使われたりすると危なっかしくてしょうがないな。
TManagerはクラス内クラスにしてファイナル化しといた方が安全そうだ。

290 名前:289 mailto:sage [2007/08/13(月) 00:01:46 ]
というよりもVC5,6はステだろ。
未だに保守でVC5,6使わされているプログラマは可哀想でしょうがない。

291 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 00:03:03 ]
class TLogPolicy { public: void foo() { ::std::cout << "Hello"; } };
class AbstractTLogPolicyHolder { public:
TLogPolicy& policy;
AbstractTLogPolicyHolder( TLogPolicy& policy ) : policy( policy ) {}
};
template < class T >
class TLogPolicyHolder : public AbstractTLogPolicyHolder {
static TLogPolicy policy;
public: TLogPolicyHolder() : AbstractTLogPolicyHolder( policy ) {}
};
template <class T> TLogPolicy TLogPolicyHolder<T>::policy;
class Cont { ::std::list< AbstractTLogPolicyHolder* > cont;
public: void add( AbstractTLogPolicyHolder* holder ) { this->cont.push_back( holder ); }
void callAllFoo();
};
void Cont::callAllFoo() {
::std::list< AbstractTLogPolicyHolder* >::iterator i = this->cont.begin();
for( ; i != this->cont.end(); ++i ) { ( *i )->policy.foo(); }
}
class TManager : public TLogPolicyHolder< TManager > {};
class UManager : public TLogPolicyHolder< UManager > {};

void main() {
Cont cont;
TManager t1, t2, t3; // TManager::policy は 1 個だけ存在
UManager u1, u2, u3; // UManager::policy も 1 個だけ存在

cont.add( &t1 );
}

292 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 00:05:41 ]
>>290
この前、VC3の案件が回ってきて笑った。

293 名前:289 mailto:sage [2007/08/13(月) 00:15:30 ]
うわ……ありゃc++とは言えないだろう……


良く良く考えたらテンプレートメンバ関数要らんな。
ただ危険にしているだけだった。
   template<class derived_t>
   class TClassData {
   protected:
      TClassData() {};
      string& data() {
         static string data;
         return data;
      }
   };
   class TManager : public TClassData<TManager> {
   public:
      void set(string const& s) { data() = s; };
      string& get() { return data(); };
   };



294 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 08:35:29 ]
>>293
TLogPolicyとContはどこいった?

295 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 11:17:36 ]
規格読んでたらよく分かんなくなってきた。

std::complex<double> c = std::complex<double>(1, 2);

とした時、コピーコンストラクタが呼ばれるかどうかに関する規定がよく分からない。

これは「コピー初期化」であって「std::complex<double>(1, 2)がcにコピーされる」らしいんだが、
実際やってみると、どうもコピーコンストラクタは呼ばれない。
この「コピー」というのがコピーコンストラクタを呼ぶことを意味していないのか、
それともコピーコンストラクタを呼ばない最適化が規格で許されてるのか、
どうもよく分からない。

このあたりどうなってるのか詳しく知ってる人はいる?

296 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 11:22:35 ]
>>295
ttp://www.kmonos.net/alang/cpp/glossary.html#RVO

297 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 11:27:38 ]
1)T a = T(...)
2)T a(...)
は同じじゃなかったっけ


298 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 11:45:31 ]
>>295
つまり、これも戻り値最適化に含まれる、というわけ?

299 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:05:27 ]
>>297
いいえ。前者はコピーコンストラクタが呼ばれる可能性があります。
# >296参照。

300 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:06:17 ]
>>298
正しく、RVOですね。

301 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:07:59 ]
規格には何箇所かコピーコンストラクタの省略を許す箇所が挙げられている。
戻り値最適化もコピー初期化時の省略もそのひとつ。

って、他にあったっけ?

302 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:09:56 ]
>>300-301
これで安心して眠れます。
まだ寝ないけど。

303 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:10:44 ]
>>295
これかしらん?

web.archive.org/web/20050308020505/www.kuzbass.ru/docs/isocpp/special.html
ここの最後の方

> -15- Whenever a temporary class object is copied using a copy constructor, and this object and the copy have the same cv-unqualified type,
an implementation is permitted to treat the original and the copy as two different ways of referring to the same object and not perform a copy at all,
even if the class copy constructor or destructor have side effects.



304 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:22:55 ]
>>303
おおー。それですね。完璧ですね。

305 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 12:31:03 ]
規格 8.5.14 内のここは?

if the function is a constructor, the call initializes a temporary of the
destination type. The result of the call (which is the temporary for the
constructor case) is then used to direct-initialize, according to the rules above,
the object that is the destination of the copy-initialization. In certain cases,
an implementation is permitted to eliminate the copying inherent in this
direct-initialization by constructing the intermediate result directly into the
object being initialized;


306 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 13:07:44 ]
>299
ええ? >297の通りじゃ……と思ってC++STDを確認しました。
8.5 Initializers
(snip)
initializer:
  = initializer-clause
  ( expression-list )
initializer-clause:
  assignment-expression
  { initializer-list ,opt }
  { }
initializer-list:
  initializer-clause
  initializer-list , initializer-clause
ということで、>297の通りじゃね?良くわからないけど。

307 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 13:12:39 ]
>>306
「ということで」じゃねーよ。何を確認したんだよ。

= に続けて置かれた初期値の型が同じなら、動作上は direct-initialization と
同じに最適化されるが、意味上は依然として copy-initialization なので、
たとえばコピーコンストラクタが private になってたりすると >>297 の 1 は
コンパイルエラーになる。

308 名前:306 mailto:sage [2007/08/13(月) 14:06:53 ]
あれ?そうだっけ? ということでもうちょっと調べてみました。
過去ログにあった。
ir9.jp/prog/ayu/datlog/tech_cpp/1047560042/1047560042_03.html#R700
条件付きで同じになるっつうのが正解かしらん?

copy-initializationとdirect-initializationについて纏まっている資料は無いのかね?
More Exceptional C++に載っているみたいだけど……


309 名前:デフォルトの名無しさん mailto:sage [2007/08/13(月) 14:56:26 ]
ためになるなあ

310 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 01:11:10 ]
おもしろいな、copy constructorへのaccess checkがかかるけど、
実際にはdirect-initializationが行われる(よばれる)のか

class Nurupo
{
private:
//public:
 Nurupo(const Nurupo&) {
  *(int*)0 = 0;
 }
public:
 Nurupo(int nurupo1, int nurupo2, int nurupo3) {
  ;
}
};

void foo() {
 Nurupo nurupo = Nurupo(1,2,3);
}

private:だとコンパイルエラーになるが、
public:にして実行しても落ちるわけではない

でさ、これもRVOって呼ぶの?returnしてないのに?

311 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 01:53:47 ]
>>310
これは RVO とは呼ばない。

312 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 01:55:03 ]
>>308
規格のドラフトでいいんじゃないの? >>2

313 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 02:39:08 ]
JIS に行けばドラフトじゃなくてちゃんとしたのを一応読める。色々と不便ではあるけど。



314 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 02:45:47 ]
日本の未来に絶望する配布形式


315 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 08:29:54 ]
不要なものは使いにくくなっている
C++的には正しい配布形式

316 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 10:19:47 ]
const int i[10];
という配列をメンバーに持っていた場合、どうやって初期化すればよいのでしょうか? 


317 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 10:21:52 ]
>>316
できません。 const 外すか、パフォーマンスに問題なければ std::vector を使うか。

318 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 10:23:08 ]
int i[10]; という配列をメンバーに持つクラス X を作って、
const X x; として、その x のコンストラクタで初期化する。

319 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 10:40:09 ]
残念ながらコンストラクタ内で代入することになるね。

320 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 23:11:20 ]
ご意見伺いたいです。

C++にてシングルトンを実装するに当たって、インスタンスの解放を明示的に実装しますか?

私は、実装します。
プログラムの終了まで存在するものとしても解放するべきだと思っています。

実装しないという人の理由が、解放される順番が難しい、
というのですがそれは理由にはならないのではと。

解放しない派で、もっとこう積極的な理由があるなら教えてください。

321 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 23:19:43 ]
明示的な解放が必要ってことは
static HogeClass *s = new HogeClass;
return s;
とかするのか?

322 名前:デフォルトの名無しさん mailto:sage [2007/08/14(火) 23:25:57 ]
Modern C++ Design読め。

言語に頼れるのならば任せるのがベターだろうと思うよ。
それができない(例外的な)ケースのときだろうね。明示的に実装することを考えるのは


323 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 02:20:59 ]
mallocしたメモリは確実に解放しますか?

私は、解放します。
プログラムの終了まで存在するものとしても解放するべきだと思っています。



324 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 03:29:48 ]
だからModern C++ Design読めって。そもそもmallocなんか使わないよ。
ローカル関数内のstaticオブジェクトを使うのが簡単じゃない?

325 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 04:20:38 ]
「リソースは解放する」「順序は守る」「両方」やらなくちゃならないのがのC++のつらいところだな。

326 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 05:39:13 ]
シングルトンの解放に関する話は結構ややこしいからな。
Modern C++ Design 読め、で済ますしかない。

327 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 07:29:15 ]
機械翻訳のような妙な日本語。

328 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:00:51 ]
>>323
C++でmalloc()使う方がどうかしている。

329 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:43:20 ]
>>324>>328
有名な「malloc/free論争」と同じ
不毛な議論だということを述べているのだと思うが

330 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 08:46:56 ]
不毛も何も、C++ならnew/deleteがあるのだからmalloc()なんて使わないだろって話だが。
そんなに毛が欲しければCを使っていればいいだけのことだ。

331 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:25:19 ]
論点はmallocかnewか、ではなく
newしたものは必ずdeleteする必要があるか、という点なのだけど。

「mallocではなくnew」などというのは、本質を外れた揚げ足取りに過ぎないと
気が付いているんだろうけど、引っ込みがつかないんだろうね。

332 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:33:22 ]
相手が呆れて去っていきさえすれば勝ちだから、そりゃあ頑張るさ。

「勝者とは強い者のことを言うのではない、戦場に最後まで立っていた者のことを言う」
と、妖魔司教ザボエラ様も仰ってる。

333 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 09:48:46 ]
deleteするか否かは時と場合による。



334 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:04:49 ]
placement new なら delete しない代わりにデストラクタ呼ぶ、という話か?

335 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:34:09 ]
時と場合で移り気なの

336 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:34:36 ]
スマートポインタ使えよ
RAIIの原則に従っておけば何も考えなくていいんだから

337 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 10:41:01 ]
newしたらdeleteするのは当たり前だが、mallocしたものはfreeしないと言うこともあるかも知らん。

338 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:10:57 ]
あーあ、mallocやっちゃった。スレタイ読めない馬鹿発見。

339 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:13:18 ]
というのは、レスが読めてない馬鹿の言うことなんだけどね、この場合。

340 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 11:20:33 ]
delete はデストラクタ呼ぶから、free とは問題が別だよという話だろう。

341 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:09:46 ]
newしたメモリは確実に解放しますか?

私は、解放します。
プログラムの終了まで存在するものとしても解放するべきだと思っています。

342 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:15:10 ]
あーあ、newやっちゃった。スレタイ読めない馬鹿発見。

343 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:31:17 ]
ティンコティンコティンコ



344 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:38:33 ]
デストラクタでOSが自動でやる以上に何か意味のある仕事をするんなら
勿論deleteすべきだろうな

345 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:48:37 ]
RAIIとかリソース所有の概念を知らないやつが混ってるな。
C++必須の概念のはずなのに、知らないやつってホント多いよな。


346 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:52:51 ]
>>345
決め付けは良くないですyo

347 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:53:03 ]
解放しないとデバッガがメモリリークを報告しまくってうっとうしい

348 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 12:53:52 ]
>>347
それはデバッガがクソ

349 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 13:01:34 ]
いずれにせよnewしたメモリは全部スマートポインタに突っ込むのが常識だろ。
今時手動deleteとかありえねえ

350 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 13:04:15 ]
今時ガベコレも無い言語なんて時代遅れもはなはだしい

351 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 13:25:50 ]
ライブラリでいくらでも実装できるLispとC++は最高、ということですね?

352 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 13:40:39 ]
スマートポインタが万能だとでも思ってるんだろうか

353 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 13:42:58 ]
RAIIあれば大抵は処理できるよ。 >350
ガベコレも結局無限リソース(メモリ)しか上手く処理できないしな……




354 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 13:44:47 ]
循環参照があっただけでおしまいじゃん

355 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:01:29 ]
シングルトンどうしが循環参照してても解放すべきです。
私はそう考えます。

356 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:29:38 ]
おまえいいこと言うな

357 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:48:33 ]
>354
ちゃんとリソース所有権を考えれば循環参照はめったにおこらない。
まあ、考えるのが面倒だからガベコレに頼りたくなるんだけどね。

>355
どういう状況だよ。シングルトンわかってないだろ。


358 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:49:34 ]
>>355
そんなシングルトンが存在すること自体、設計が変だと思わないか

359 名前:デフォルトの名無しさん [2007/08/15(水) 14:51:45 ]
寝具るddd

360 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 14:57:57 ]
>>357-358
可哀相なくらい行間が読めないコンビだな。

361 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:35:05 ]
読む気ねぇ。ここはマ板じゃねぇし。なんで技術的な部分以外を気にしなきゃいかんのかね?
いい加減夏厨相手にするのも飽きたなぁ

362 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:51:47 ]
馬鹿を晒すぐらいなら書かなきゃいいのに

363 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:54:14 ]
行間なんてものは要するに書き漏らしただけ
ちゃんと伝えたきゃ書け



364 名前:デフォルトの名無しさん mailto:sage [2007/08/15(水) 15:56:26 ]
行間っつーか、ギャグだろ。

365 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 06:38:10 ]
>>361
日本語でコミュニケーションする能力が
技術的な部分と両輪で機能してない間抜けなぞ問題外。

366 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 14:56:08 ]
(゚ー゚*)ダッコ♪

367 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 15:29:53 ]
reddit 経由「透過的プログラマ指向ガベコレ for C++」
ttp://www.open-std.org/jtc1/sc22/wg21/docs/papers/2007/n2310.pdf

Boehm らによる言語機能としてのガベコレ提案。ちょっと期待。

368 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 18:15:46 ]
class SUBCLASS {
public:
   LPSTR& operator[](LPCSTR);
};

class SUPERCLASS{
public:
   SUBCLASS *subclass;
};


SUPERCLASS aaa;

int main()
{
   aaa.subclass = new SUBCLASS(hogehoge);
   return aaa.subclass["bbb"];
}

わけあってmapが使えないので上のようにしているのですが
「error C2107: ポインタでない式に、添字が使われました。」
というエラーが出てしまいます

どのようにすれば解決できますでしょうか?
開発環境はVS2005です
よろしくお願いします

369 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 18:30:39 ]
あんまり真面目に読んでないけど、とりあえずこうじゃね?
 return (*aaa.subclass)["bbb"]; 

370 名前:368 mailto:sage [2007/08/16(木) 18:44:26 ]
>>369
どうもー
やってみましたがだめでした

371 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 18:53:11 ]
>>370
エラーメッセージが変わっただろ。ちゃんとその辺を書けよ。
で、戻り値の型がLPSTRなんだから、らreturn文で呼ばずに単独で呼んでみな。

372 名前:368 mailto:sage [2007/08/16(木) 19:00:40 ]
>>371
うーんエラーメッセージは変化なしです

373 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 19:06:17 ]
aaa.subclass->operator[]("bbb")



374 名前:368 mailto:sage [2007/08/16(木) 19:08:45 ]
>>373
コンパイル通りました
ありがとうございました

375 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 19:11:26 ]
意味があるかは知らんが、(*aaa.subclass)["bbb"] でコンパイルは通るぞ。

376 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 19:11:34 ]
>>373
俺もそうだと思ったけど、関数形式で呼ぶのがなんか嫌だから書かなかった
なんか解決策ないかね

377 名前:371 mailto:sage [2007/08/16(木) 19:13:21 ]
>>372
そうか? 前者は引き数が合わなくて関数が見つからないが、後者は戻り値の型が合わなくてエラーになると思うのだが。
つーか、なんでまたmain()のreturnなんかで試すんだ? >371の後半は読んでないのか?

378 名前:376 mailto:sage [2007/08/16(木) 19:13:31 ]
ああそうか、違和感の理由が分かった。
連想配列にしたくて添え字をオーバーロードしているはずなのに
opreator[]で呼んだら意味を成さなくなっちゃうからだ。

379 名前:376 mailto:sage [2007/08/16(木) 19:15:59 ]
つうことで解決案

subclassをカプセル化して、参照越しにoperator[]を呼ぶ

380 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 19:23:44 ]
(*aaa.subclass)["bbb"] でコンパイル通らず、
aaa.subclass->operator[]("bbb") でコンパイル通るってあり得ないと思うんだが。

381 名前:368 mailto:sage [2007/08/16(木) 19:28:22 ]
>>375
あわわ間違って(*aaa.subclass["bbb"])としちゃってたようです

>>377
エラー部分だけ抜き出そうとして型違いのreturnになってました、ごめんなさい…

>>379
単語の意味がわかってないので検索してやってみます、ありがとうございました

382 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 19:35:38 ]
でもなんでchar *じゃなくて、char * &なんだろう。
constでないということは、こういうことがやりたいんだろうか。


(*aaa.subclass)[''bbb"] = new char[10] ;

いや、ひょっとしたらこういうことがしたいのか

char * & ptr = (*aaa.subclass)[''bbb"] ;
ptr = static_cast<char *>( realloc(ptr) ) ;

383 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 20:59:50 ]
class Base
{
public:
Base(int n) {}
};
class Derived : Base
{
public:
Derived(int n) {}
};
これがどうしてダメで、Base::Base()が必要なのか教えてください。



384 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:06:38 ]
親クラスに n を渡すなら、それをちゃんと書かなきゃいけない。

public:
Derived(int n) :Base(n) {}

385 名前:デフォルトの名無しさん mailto:sage [2007/08/16(木) 21:06:53 ]
はい?






[ 続きを読む ] / [ 携帯版 ]

前100 次100 最新50 [ このスレをブックマーク! 携帯に送る ] 2chのread.cgiへ
[+板 最近立ったスレ&熱いスレ一覧 : +板 最近立ったスレ/記者別一覧]( ´∀`)<205KB

read.cgi ver5.27 [feat.BBS2 +1.6] / e.0.2 (02/09/03) / eucaly.net products.
担当:undef