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


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

C++相談室 part62



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

前スレ
C++相談室 part61
pc11.2ch.net/test/read.cgi/tech/1205059063/

285 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 00:39:28 ]
>>284
もちろんユーザは A の public メンバにアクセスできることが前提です。

286 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 00:57:47 ]
>>285
A を抽象インターフェースにして実体を >284

287 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:12:34 ]
template hackerさん。ヘルプミー。

template < class _T >
class C
 {
  public:
   template < class _Ta >
   void X();
 };

template < class _T >
void F()
{
C< int > obj1;
obj1.X<int>();

C< _T > obj2;
obj2.X<_T>();
}

288 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:13:57 ]
めっちゃ途中で書き込んだ。さーせん。
その上のコードの、obj2.X<_T>();がコンパイルエラーで通りません。
何ででしょうか
代替案とかあるでしょうか

289 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:21:27 ]
環境とエラーメッセージくらい書こうぜ

290 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:29:17 ]
ったりめーだろ
class _Tの実体がない

291 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:29:37 ]
じゃなかったclass _Tの定義がない

292 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:33:42 ]
>>286
ああ、その手があったね。

しかも A の唯一の派生クラスを A の friend にしておけば抽象である必要もないし
X の中に入れる必要もないね。

ありがとう。

293 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:34:00 ]
>>290
_Tはテンプレート引数だろ。



294 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 01:57:05 ]
>>288
obj2.template X<_T>();
その名がテンプレートであることを示せ

>>289
この場合はいらんかも


295 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:02:54 ]
>>294
>>287-288

296 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:21:21 ]
>>287 予約識別子死ね。

297 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 02:25:06 ]
>>292
> しかも A の唯一の派生クラスを A の friend にしておけば抽象である必要もないし
> X の中に入れる必要もないね。

何か変だな。一般的には、抽象でいいものに実装を混ぜる必要もないし、
スコープを無駄に広める必要もない、となりそうなもんなんだが。

まぁ望むものは得られたみたいなんで、書き込みに出てない部分の都合があっての
話ならどうでもいいけど。

298 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 07:38:23 ]
これでいいんだよね?

class A {
public:
 virtual ~A() { }
 virtual void Foo() = 0;
};

class X {
public:
 X();
 A* NewA();
private:
 class Impl* impl_;
};

class X::Impl {
public:
 A* NewA() {
  return new AImpl;
 }

private:
 class AImpl : public A {
 public:
  virtual void Foo();
 };
};

X::X() : impl_(new Impl) { }
A* X::NewA() { return impl_->NewA(); }

299 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:39:10 ]
>>297
抽象にしたくないのは単に性能のため。
Aは単純なクラスを想定しているのでそれほど実装を隠す必要はないから。
もしAの実装を隠したい場合はImpl方式にするかもしれない。
抽象クラスより優れている根拠は特にないが。

確かにAの派生はXに入れたほうが名前空間の汚染を軽減できるね。

>>298
デストラクタは private にしてユーザが削除できないようにしたい。
さらに特定のクラスにしか派生できないようにしほうが何となく安心。

300 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 12:47:35 ]
obj2.template X<_T>();

いや本当は知らないんですけどね

301 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:02:51 ]
>>294
>>300
thx。たすかりますた。thx。
>>287
解った。死ぬから_Tを使わせてくれ。

302 名前:デフォルトの名無しさん mailto:sage [2008/06/16(月) 23:03:51 ]
> _T
処理系の予約語じゃねえか・・・

303 名前:デフォルトの名無しさん [2008/06/17(火) 21:38:29 ]
ワラタ



304 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:47:32 ]
class x について ++x と x++ を定義する場合
operator++ はどうなるのかしらぁぁぁぁぁぁぁぁ

305 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:53:14 ]
++x → operator++()
x++ → operator++(int)

後者の引数はオーバーロードのためのダミー引数で、
それ以外の何かに使う物ではない。

306 名前:デフォルトの名無しさん mailto:sage [2008/06/17(火) 23:55:50 ]
X & X::operator ++ (void) ;
X X::operator ++ (int) ;

307 名前:304 mailto:sage [2008/06/17(火) 23:59:07 ]
ありがとうございました。orz

308 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 07:40:42 ]
関係無い話だけど、
テンプレート引数型で後置インクリメント使う馬鹿は氏ねと言いたい。

309 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 07:56:32 ]
いやむしろ型特性を利用して組み込み型のときだけ後置インクリメントにするという手も

310 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:14:00 ]
VC++ の2005を使用し、C++/CLIでアプリを作成しています。

ListViewに複数項目が登録されている場合、最下段での下キー押下で最上段へ、
また、最上段での上キー押下で最下段にフォーカスを移したいと思っています。

これをやるだけならキーイベントを拾って
「最下段で下キーが押された場合、フォーカス位置を0にする」
というようにすればいいのかと思ったのですが、ListViewのデフォルト機能(?)で
上下キー押下はフォーカス位置を1つずらすようになっています。

つまり、

1
2
3←フォーカス

この状態で下キーを押すと、フォーカス位置が0に戻る処理が実行された後、
フォーカス位置が1つ下にずれてしまうので

1
2←フォーカス
3

となってしまいました。

ListViewが持っているデフォルトのキーイベントを破棄できればいいのかと思ったのですが、
その捨て方も分かりませんでした・・・。

上記要件を満たす方法などがありますでしょうか?

311 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:39:20 ]
スレ違い
.NETスレ行け

312 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:39:59 ]
>>310
C++/CLIはC++を元にした別の独立した言語です。
なので基本的にはC++/CLIスレで質問して下さい。

しかし、言語自体でなく、
ListView(.NETコンポーネント)のことなので、
.NET総合スレか、人の多い(+構文が近い)C#スレをお勧めします。

System.Windows.Forms.ListView などは
C++/CLI, C#, VB.NETで同一のものです。

313 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 13:52:12 ]
次スレのテンプレには、
C++/CLI関連の誘導を加えた方がよさそうだな



314 名前:デフォルトの名無しさん mailto:sage [2008/06/18(水) 14:25:33 ]
>>311、312
失礼しました
他スレにて再質問します
ありがとうございました

315 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 14:53:55 ]
以下のプログラムで、ddd() の中のようなキャストを行ってから bbb() の中で B::f() を正しく
呼び出せるでしょうか?

struct B { void f(); };
struct D : B {};
void bbb( B* b[], int size ) { for ( int i = 0; i < size; ++i ) b[i]->f(); }
void ddd( D* d[], int size ) { bbb( static_cast<B**>( static_cast<void*>( d ) ), size ); }

316 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 15:46:32 ]
ちょっと聞いてください。
enumハックを使ってクラスの中でSIZE_MAXという名前の定数を定義したんですよ。
そしたら、「error C2143: 構文エラー : '}' が '定数' の前にありません。」などのエラーが何個か出ました。
いろいろコメントアウトして原因を探ったら、vectorやstringなどをインクルードするとエラーが出る事がわかったんです。
で、インクルードファイルが壊れてると思い、再インストールしたんですが直らず、
結局、limits.hでSIZE_MAXという名前のマクロが定義されていたのが原因でした。
エラーメッセージに名前は出ないし、ネームスペースも無視される。
マクロって最低じゃないですか?

317 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 16:00:25 ]
マクロのない言語に乗り換えるといいと思うよ

318 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 20:39:42 ]
>>316
だからマクロは大文字を使うんだよ。

319 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 21:15:33 ]
やってみて結果を述べるのが自立した大人の行動と思う。

320 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 21:15:56 ]
319はto315

321 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 21:21:24 ]
だから、大文字の識別名はマクロ名以外には使わないという
お約束があるんだよ。

322 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 21:46:10 ]
>>319
すみません。特定の環境ということではなく一般的にできるかどうかです。
VC8で試したら動きます。

323 名前:デフォルトの名無しさん [2008/06/19(木) 22:37:03 ]
やってみた結果から刷り込まれた処理系依存な「知識」が豊富な「大人」は痛いよな



324 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:44:01 ]
>>318,321
列挙型や定数に大文字使ってるのよく見かけるけどそんなお約束あるの?

325 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 22:51:45 ]
>>324
定数もマクロだったりするし、列挙型はスコープ無いから定数の代わりに使ったりするから


326 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 23:29:25 ]
std::wstring以外で、汎用的な文字列クラスって言うと何になるんでしょうか。
今までずっとATL::CStringWでやっていたのですが、std::wstringはいまいち不便で。
boostあたりになっちゃうんでしょうかね。

327 名前:デフォルトの名無しさん mailto:sage [2008/06/19(木) 23:49:29 ]
>>325
>定数もマクロだったりするし、
定数をマクロで書くのはよくないんじゃない?
Effective C++ 1項に書いてあるように、これこそお約束なのでは。

>列挙型はスコープ無いから定数の代わりに使ったりするから
>>316の例だって列挙型を定数がわりに使ってハマってるように見えるんだが、何か違う?


328 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 00:13:55 ]
怪しかったらundef
CreateWindowとか

329 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 00:35:20 ]
質問です。
あるクラスのインナークラスを他のファイルで前方宣言したいと思っているのですが
どのように宣言すればよいのでしょうか…。

以下例です。
名前空間SpaceAに定義されたクラスClassAがあったとして
ClassA内部にはInnerClassAが定義されているとします。

namespace SpaceA {
class ClassA {
public:
class InnerClassA{}
}
}

このInnerClassAを他のファイルClassB.hで前方宣言して使うことはできるのでしょうか…。

// 前方宣言
namespace SpaceA {
class ClassA;
//struct ClassA::InnerClassA; // ClassAは名前空間じゃないからエラー…どう書けばいいのか
}
using SpaceA::ClassA;

namespace SpaceB {
class ClassB {
public:
ClassB( InnerClassA* p ); // イメージ的にはこんな感じで使いたい
}
}

よろしくお願いします。

330 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 01:44:36 ]
>>315
D* を B* としてアクセスするのは、規格の 3.10 p15 にあるエイリアスの制約に
違反するので、未定義動作。

ddd() の引数に B* の配列を似たようなキャストしてねじ込んだ場合は、上記の
制約を満たすことになるのでセーフ。

331 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 01:48:50 ]
>>329
無理。外側の ClassA の定義が必要。 ClassA の中で class InnerClassA; としてあれば
InnerClassA の定義は必要ない。

332 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 08:20:45 ]
>>315
>D* を B* としてアクセスするのは、規格の 3.10 p15 にあるエイリアスの制約に
>違反するので、未定義動作。

普通のアップキャストだからOKじゃないの?

333 名前:332 mailto:sage [2008/06/20(金) 08:34:45 ]
332は>>315じゃなくて>>330だった。

なおModern C++ Designでは、
仮想継承でなければstatic_castによる
アップキャストは問題ないとなってた。
規格でどうなってるかは知らない。



334 名前:332 mailto:sage [2008/06/20(金) 09:16:06 ]
>>330

もしかして static_cast<B**> がダメってことですか?

335 名前:330 mailto:sage [2008/06/20(金) 09:30:49 ]
>>332
ごめん。まぎらわしいね。

「D* に B*& でアクセスするのは、〜」ってことで、少しは伝わりやすいかな、と。

336 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 13:36:27 ]
C++ の仕様では sizeof(B*) != sizeof(D*) の処理系もありえるのかな。

337 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 15:16:43 ]
クラスが違うとポインタサイズも違うのか・・・?なんという

338 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:08:14 ]
class XをSTL準拠にするため自作イテレータを作ろうと
operator++( X* x )みたくしたら
「クラス型パラメータがひとつもありません」と怒られました。
ハーバートシルト先生のSTL標準講座を読んでも解決法が書いてありません。
っていうか自作STLの書き方なんて載ってないし。
もうだめです。さようなら。

339 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 16:56:07 ]
はい、さようなら。

340 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 17:37:07 ]
using namespace std;という呪文が書いてある他人の作ったヘッダ(hoge.hh)をインクルードするのが気持ち悪かったので、

>hogehoge.hh
namespace hogehoge{
#include "hoge.hh"
};

>hogehoge.cc
#include "hogehoge.hh"
……

ってやったらhoge.hhの中でhogehoge::stdをさがしにいきやがったのが納得いかないんですが、
using namespace std;っていうのはstdをグローバルスコープにする命令じゃないんですか?

341 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 17:52:33 ]
違うよ。
現在の名前空間から見てstd::以下にあるシンボルを現在のスコープにロードする命令だよ。

ちなみに、名前空間のなかから普通の"std"を読み込みたいなら
using namespace ::std;
とする必要がある。

342 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 18:11:09 ]
>>338
ポインタで横着しようとしないで、イテレータ用のクラスを作る。

343 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 18:16:56 ]
>>340
hogehoge::stdを探しにいったってことは、
hoge.hh内に namespace std {...} があるのか・・・。

using namespace std;で飽き足らず、
std空間にユーザー定義を追加するとは、不届きなヘッダだなw

とりあえず、

>hogehoge.hh
namespace hogehoge {
namespace std { using namespace ::std; } // これを追加
#include "hoge.hh"
};

しておけばおk。



344 名前:343 mailto:sage [2008/06/20(金) 18:54:47 ]
あ、hoge.hhにstd系のincludeがあったら駄目か・・・。

345 名前:デフォルトの名無しさん mailto:sage [2008/06/20(金) 19:01:52 ]
>>341
うむむ、namespaceは奥深いですね。

>>343
namespace stdは見つかりませんでした。。。
あと、その行を追加してもhogehoge::stdを探しに行ってるように見えます。。。

一番簡単なのはヘッダのusing namespace std;の行を削除することなんだろうけど、
ファイルの上の方のコメントみたらcopyrightとか書いてあるし……

諦めて裸のままインクルードして使うことにします。
ありがとうございました。

346 名前:デフォルトの名無しさん mailto:sage [2008/06/21(土) 13:11:25 ]
>>344-345
hoge.hhの中にincludeがあるなら、
それを先にincludeしとけば良いんじゃね?
インクルードガードで無視されるから。
例えば #include <vector> があるなら↓のように。

#include <vector>
namespace hogehoge {
  namespace std { using namespace ::std; }
  #include "hoge.hh"
};

347 名前:デフォルトの名無しさん mailto:sage [2008/06/22(日) 23:55:19 ]
定数を指定するとき、C言語では#defineを使いましたが、
C++ではconstな変数を使え、とモノの本に書いてありました

ところで、定数がint型で何個も欲しいのですが、
列挙型の列挙子で代用するのはアリでしょうか?

348 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:09:47 ]
>>347
どれくらいの個数かにもよるかもしれないけど、
列挙子で代用(?)している入門書は結構ある。

349 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:28:08 ]
#define 使うなってのは、型だとか副作用だとかエラーメッセージだとかだから
enum なら問題ないと思うよ

350 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:30:07 ]
配列の添え字に使いたかったんです
単なる数字より、文字のほうが読みやすいですし
ありがとうございました

351 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:34:33 ]
>>347
なんで数が増えたら enum で代用するなんてことになるの?
意味が違うだろ。

352 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:37:28 ]
連番なら enum だね。

353 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:46:05 ]
>>351
いや、0から始まる連番なもんで



354 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 00:50:15 ]
>>353
それなら代用じゃなくて enum が正解。逆に int const で用意するほうがありえない。

355 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 03:11:09 ]
すみません.
ここでする質問ではないかも知れませんが.
C++でMPEG2を取り扱うプログラムを作らなくてはならなくなりました.
MPEG2を扱うにはどのようなlibraryを使わなければならないでしょうか?
またそのマニュアルが詳しく掲載しているサイトを教えてくれません?
Directshowは抜きでお願いします.

356 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 03:25:18 ]
ffmpegでヤフれ

ただしMPEG2特許の利用ライセンスは自分でとってね!

357 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 16:44:37 ]
VC++環境です。STLのlistについて質問です。
あるlist(Aとする)の情報をまるまる別のlist(Bとする)にassign()で写したのち、
Aのある位置を指しているイテレータをそのままBで使いたい
(Aで指していた位置にある情報を指させたい)
のですが、方法を探しても見つかりません。
アルゴリズムのfind()以外で何か方法はありますか?

358 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:13:09 ]
>>357
std::distance(), std::advance()

ただ、listだとランダムアクセス出来ないから
一応それぞれO(n)で、セットでO(2n)になる。
まぁとんでもない要素数でない限り一瞬だろうけど。

359 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:18:01 ]
listはアクセスするだけでもメモリの中を不規則な順序で飛び飛びするので、平均の次の要素へのアクセス速度は
要素が連続しているvectorよりも遅い。

360 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 17:24:45 ]
>>357->>359
頭からの距離で考える発想は思いつきませんでした。
要素も少なく、実際に動かしてみても一瞬で処理できました。
ありがとうございました。

361 名前:デフォルトの名無しさん mailto:sage [2008/06/23(月) 22:12:24 ]
解決したようだが、
begin()〜itとit〜end()の2回に分けてコピーするのもいいな。

362 名前:355 mailto:sage [2008/06/24(火) 02:37:33 ]
ffmpegをヤフりました.
MS-DOSで動くオープンソースの動画変換アプリなんですね.
ソースを見て参照方法を探れということですね?
これも方法の一つとしますが時間がかかるので,なにか他の方法はないでしょうか?

それと商用配布は考えていないのでライセンス申請の必要はありません.

363 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 03:12:10 ]
いいえ、商用に限らず許可なく使うことは許されません。



364 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 07:35:29 ]
特許権は、それを使ったものを製造、保管、流通することを制限することができるよ。
商用かどうかは関係ないよ。
詳しくは法務に聞こうね。

365 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 10:47:36 ]
>>362
> MS-DOSで動くオープンソースの動画変換アプリなんですね.
違います。

> ソースを見て参照方法を探れということですね?
違います。

> これも方法の一つとしますが時間がかかるので,なにか他の方法はないでしょうか?
規格書読むより時間掛かりませんよ。

366 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:10:28 ]
classのstaticメンバで、shortの配列があります。
例えば、
class hoge {
private:
 static array[100];
};
となっていて、arrayの中身を
for(int i=0; i<100; i++){
 array[i] = i*i;
}
のように初期化したいとします。
このよな作業はどの箇所で行えばいいでしょうか。

367 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:16:38 ]
>>366
クラスの外で一回やっておけばよい。
main()が呼ばれる前に初期化される保証がある。

368 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:19:15 ]
Singletonの問題のようにも思えるが

369 名前:366 mailto:sage [2008/06/24(火) 16:27:24 ]
>>367
GCCですが、.cxxの先頭でやると怒られます。

src/hoge.cxx:24: error: expected unqualified-id before ‘for’
src/hoge.cxx:24: error: expected constructor, destructor, or type conversion before ‘<’ token
src/hoge.cxx:24: error: expected constructor, destructor, or type conversion before ‘++’ token

24: for(int i = 0; i < 100; i++){


370 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 16:28:58 ]
#include <iostream>

class hoge {
private:
static int array[100];
static int flag;
public:
hoge() {
if (flag) {
for (int i = 0; i < 100; i++)
array[i] = i * i;
flag = 0;
}
}
void printa() const {
for (int i = 0; i < 100; i++)
std::cout << array[i] << ' ';
}
};

int hoge::flag = 1;
int hoge::array[100];

int main()
{
hoge h;

h.printa();
}


371 名前:366 mailto:sage [2008/06/24(火) 16:31:18 ]
short* hoge::array = 0;

としておいて、constructorで
if(!array){
 array = new short[100];
 for(int i=0; i<100; i++){
  array[i] = i*i;
 }
}

でしょうか。それだと、いつdeleteするのでしょうか。
それとも、初期化フラグをメンバ変数に持っておいて、
それのtrue/falseでconstructorからfor文を呼び出す?

372 名前:366 mailto:sage [2008/06/24(火) 16:32:03 ]
>>370
ということのようですね。
ありがとうございました。

373 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 17:22:54 ]
どんな初期化をするかにも夜
コンストラクタとデストラクタは忘れないであげてくだちぃ



374 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 17:54:53 ]
>>373
staticだからこの場合は無理なのよ

375 名前:355 mailto:sage [2008/06/24(火) 18:33:23 ]
ffmpegのAPIを使ってMPEG2を読み込めということでしょうか?
現在mpeg2dec-0.4.1 とでどちらを使うか考えています.

両方の向き不向きについて何か教えてくれませんか?

376 名前:デフォルトの名無しさん mailto:sage [2008/06/24(火) 18:49:21 ]
C++相談室

377 名前:355 mailto:sage [2008/06/24(火) 19:53:12 ]
すみません.
そうでした.完全にスレ違いになってしまいました.
去ります

378 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:49:33 ]
C++って先頭からコンパイルしますよね

だから↓はコンパイルエラーになりますよね。
void main(){
int a=func(3);
}
int func(int x){
return x+5;
}

なのに、なぜ↓はコンパイルエラーにならないんでしょうか?
class cA{
public:
cA(){a=10;}
private:
int a;
};


379 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:50:14 ]
C++って、単純な速さは他の言語と比較してどうなの?

380 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:56:45 ]
>>378
そういう仕様に決まったから。

>>379
書き方や問題領域で当然変わってくるけど、大体Cと同じ。

381 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 00:58:44 ]
ていうことは、C++のコンパイラは場合によっては、
読む場所を行ったり来たりしうるんですね
ありがとうございました

382 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:00:09 ]
>>378
正確に述べると、クラス定義の中に関数定義を書くと、
そいつはクラス定義の終わった後に、inline付で定義されたものとして扱われるということになる。

383 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 02:15:49 ]
クラス宣言じゃないのか。



384 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 07:37:29 ]
定義。

385 名前:デフォルトの名無しさん mailto:sage [2008/06/25(水) 07:51:00 ]
クラス宣言って外部でメンバ関数の定義をしたりあと前方宣言
の時に使われる物?






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

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

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