【初心者歓迎】C/C++室 Ver.59【環境依存OK】at TECH
【初心者歓迎】C/C++室 Ver.59【環境依存OK】 - 暇つぶし2ch443:デフォルトの名無しさん
08/09/21 16:02:09
簡単なことだ

二重ループは行列の全ての要素にアクセスするための手段でしかないから
その扱いについては制限されない

あとは各行和各列和を格納する配列を定義して要素に応じてそれぞれ適切に加算していくだけ

444:441
08/09/21 16:07:01
初心者丸出しで長ったらしいプログラムなのでろだにあげてみました。
No.7729です。よろしくお願いします。

445:デフォルトの名無しさん
08/09/21 16:38:13
for(j=0;j<4;j++)
 for(i=0;i<3;i++)
  table[3][j]+=table[i][j];
これ行和しか求めてないよ。ソース中には列和を求める部分は見当たらなかったけど。

446:444
08/09/21 18:52:32
>>445
列和の計算を入れ忘れている事に気付きました。ありがとうございます

この行和と列和を求めるプログラムの考察で、
列和も行和も同じループ内で処理できるのは何故かと言う問いなのですが
理由は>>443でOKもらえますかね・・・?

447:デフォルトの名無しさん
08/09/21 19:11:38
>>446
>>443は日本語がちょっとおかしいのでちゃんとした文章を自分で考えてくれろ
正解かどうかは知らないし

448:デフォルトの名無しさん
08/09/21 19:54:02
すいません質問なのですが、とあるクラスのprotectedメンバはその派生クラスの派生クラスからはアクセスできないんでしょうか??
MinGWで色々やっているのですが、間接継承の関係にあるクラスのprotectedメンバにアクセスしているプロググラムを実行すると、フリーズしてしまいます。
アドバイス頂けると幸いです。

449:デフォルトの名無しさん
08/09/21 20:29:22
>>448
フリーズするならそれはまったく別の問題。

450:デフォルトの名無しさん
08/09/21 20:40:54
>>448
フリーズならどこかで無限ループしてるんじゃ

451:デフォルトの名無しさん
08/09/21 21:27:02
VCの_COM_SMARTPTR_TYPEDEFなんですけど
これで作ったCOMのスマートポインタもAttachで入れないと
カウントがずれるですか?

452:デフォルトの名無しさん
08/09/21 23:02:33
頻繁に使われる関数で常にメモリを100Kほど確保して置きたいのですが
どのようにしたら良いですか? マルチスレッド対応の方法教えてください

こういう警告と同じ箇所で英語のエラーがでます。

マルチスレッド アプリケーションのコンストラクタでローカル静的変数を使うことは危険

453:デフォルトの名無しさん
08/09/21 23:08:57
>>452 クラスにしとけ。

454:デフォルトの名無しさん
08/09/21 23:59:27
100K みたいに大きいバッファは
マルチスレッド関係なく動的に確保しる。

455:デフォルトの名無しさん
08/09/22 00:44:37
頻繁に使うから、再確保はしないでそのままにしておきたいのですが。
2個以上同時に使われるとバッファが壊れますが、どうしたらいいでしょうか?

456:デフォルトの名無しさん
08/09/22 00:49:20
確保してから、アプリケーションが終了する直前までずっと確保したままでいい。
とりあえずマルチスレッドプログラムを組む場合は同期オブジェクトを勉強してください。

457:デフォルトの名無しさん
08/09/22 01:34:08
寝る前だけど質問させてもらいます
C++で横スクロールするアクションゲームっぽいもの
作ってるのですがキャラクターをクラスで扱っていて
場面ごとの関数1つ1つにクラスの変数やメソッドを使うから
インスタンス定義ってのをやらなきゃいけないようで
そうするとそのせいで場面の移り変わりのときに
それまで使っていた変数が初期化されてしまって
URLリンク(www.dotup.org)
このようになってしまいますよね
キャラクターのクラスだけでなく他にも場面やステージを
隔てて初期値に戻ると困るものを保存したり引き継いだり
できればいいのですがどうすればいいのでしょうか・・・

458:デフォルトの名無しさん
08/09/22 01:38:03
>>457
保存したり引き継いだりすればいいよ。
コンストラクタ含めて関数には引数が渡せるだろ。

その画像のプレゼン能力はすばらしい。

459:424
08/09/22 01:43:49
>>428
>>429
回答ありがとうございました。
これから検討してみたいと思います。

460:デフォルトの名無しさん
08/09/22 01:45:46
スコープが広めのリサイクルオブジェクトコンテナ見たいなのを作って、シーン終了時に必要なものを追加
次のシーン初期化時に、シーンのオブジェクトコンテナに移し変える

461:デフォルトの名無しさん
08/09/22 03:08:24
質問です。
ファイルオープンで、ファイルから値を読込んでもう一つのファイルにその値を書込むプログラムで、
読込用はテキストファイル(.txt)、書込用はバイナリファイル(.bin)を用いました。
上記の2つのファイルサイズは少量ですけど違いました。
この違いは何によるものなんでしょうか。

462:デフォルトの名無しさん
08/09/22 03:13:07
改行コードじゃない?

463:デフォルトの名無しさん
08/09/22 03:52:47
読込ファイルの値はスペース区切りでした
テキストファイルから「1 2」という値を読み込みバイナリファイルに書き込んで
ファイルをエディタで開くと「01 00 00 00 02」と表示されますが、
つまりは書き込みがバイナリファイルだとスペースにもコードがあるから
ファイルサイズが大きくなる・・・ということでいいんでしょうか・・・?

464:デフォルトの名無しさん
08/09/22 04:06:47
>>461,463
読み込んで形式変えて書き込んでるんだから、そもそも同じになるわけがないな。

465:デフォルトの名無しさん
08/09/22 04:30:31
質問です。
他のプロセスのメモリを監視するプログラム作ろうとしています。
ReadProcessMemoryで値を取得することはできたのですが、
できればそのメモリアドレスの値が更新された時に取得を実行したいです。
この「メモリアドレスの値が更新された」というイベントを取得することは可能でしょうか?


466:デフォルトの名無しさん
08/09/22 04:54:21
>>451
コンストラクタならfalseー緒に渡せば、AddRefしないよ。
operator=は無理だな。

467:デフォルトの名無しさん
08/09/22 07:22:34
>>465
チートツールはほどほどにしとけよ

468:448
08/09/22 12:19:03
>>449
>>450
おっしゃる通り別の問題でした汗
ありがとうございましたm(_ _)m

469:デフォルトの名無しさん
08/09/22 12:42:19
327です。

>329
ありがとうございます。

u_char *ucharAdr;
ucharAdr = (u_char *)(gulngUpdataAddress & 0x0fffffff) + 0x0c800000;
memcpy( ucharAdr, gushtUpdataArea, gulngUpdataDataCount * sizeof(short));

で、いけました。

470:デフォルトの名無しさん
08/09/22 12:45:08
CImageで(a,b)から(x,y)まで直線を引く方法はありませんか??
MoveTo、LineToを使用せずに描きたいです。


471:デフォルトの名無しさん
08/09/22 12:48:25
なんでMoveTo、LineToを使用したくないの?

472:デフォルトの名無しさん
08/09/22 13:13:47
>>470
おいらのCImageなら、メンバにLine(CPoint from, CPoint to)があるからそれを使えるよ。
でも、あんたの言っているCImageにそれがあるかどうかは知らんけどね。

473:デフォルトの名無しさん
08/09/22 19:04:58
const char str1[] = "str";
const char * str2 = "str";
"str"が配置されるのは、前者の場合、配列に格納するコードのところ
後者では文字列を置いておくところだと思うのですが、どういうときに、どちらを選べばいいのでしょうか

自分で考えたところでは、
・上の場合は、コンパイル時に配列のサイズが決まるのでstrlenなどを使う必要がない
・下の場合は、自動変数の確保がポインタだけですむ(速い?)
というちがいだと思うのですが、ほかにも違いがあるのでしょうか


474:デフォルトの名無しさん
08/09/22 19:18:10
>>473
後者は str2 = "another" のような代入が可能になってしまう。たぶん意図したものじゃないだろう。

static const char str3[] = "str";
↑これなら挙げられた前者と同じメリットを得つつ、後者のメリットを上回る(自動変数の確保はゼロ)。

475:デフォルトの名無しさん
08/09/22 19:46:37
const char * const str2

476:デフォルトの名無しさん
08/09/22 20:16:33
>>474-475
ありがとうございます。
475さんのはstr2が同じものをさし続けるようにするのですね。
474さんのは静的変数の初期化に、コストを預けてるわけですね。

477:デフォルトの名無しさん
08/09/22 20:31:51
>>476
str3 の初期化にコストなんか要らないよ。どのケースでも必要になる文字列リテラルの
実体を直接割り付ければいいだけ。

478:デフォルトの名無しさん
08/09/22 22:16:49
>>473
#define str4 "str"


479:デフォルトの名無しさん
08/09/23 22:01:02
ここの場所でC2614のエラーが起きます。
クラスや構造体の初期化子リストに表示できるのは、メンバか基本クラスだけです。
規定クラスのメンバはどうやって初期化するですか?


class A
{
 public:
  A(int apple)
 protected:
  int m_banana;
}

class B : public B
{
  B(int apple)
   : A(apple), m_banana(8)  ←ここ
{
}
}

480:デフォルトの名無しさん
08/09/23 22:04:32
基底クラスのコンストラクタで行う。
class A
{
public:
A(int apple)
protected:
A(int apple, int banana) : m_banana(banana) {}
int m_banana;
};
class B : public A
{
B(int apple)
: A(apple, 8)
{
}
};


481:デフォルトの名無しさん
08/09/23 22:05:16
できました。
ども

482:デフォルトの名無しさん
08/09/24 07:57:18
VC++2005を利用しています
例外を勉強しているのですが、例外を発生させたときに、
catchで例外を処理しても、デバッガに例外があったことが出力されます

catchで例外を処理するときは、
デバッガの出力に例外が発生したことが出力されるのを防ぎたいですが、どのようにすればいいでしょうか

483:デフォルトの名無しさん
08/09/24 12:37:12
>>482
出力って、例外時のデバッガのダイアログ?だったら、デバッグ->例外で設定できる
デバッグ出力の例外のレポートだったら気にするな。レポートが出すぎて困るのだったら例外の使い方が間違っている。

484:482
08/09/24 13:18:40
>>483
れす、ありがとうございます。後者です。

例外のつかいかたについては勉強していくところです。
もし、テストケースとかを今後記述するような場合に、デバッグ出力でOFFにできないのか探しています。

485:デフォルトの名無しさん
08/09/24 14:19:16
>>482
Visual Studio のスレで聞いたほうがいいんじゃないかな?

486:346
08/09/24 14:42:55
>>347-353
超連休で返事が遅くなって申し訳ない。レスありがとう。
グローバルとstaticがいい感じっぽいので、両方試してみます。

487:482
08/09/24 15:56:25
>>485

ありがとうございます。移動します。

488:デフォルトの名無しさん
08/09/24 16:35:28
private List<ISchedule> zTasks = new List<ISchedule>();
これを同じことを NET 1.1でやりたいんですが どうすればいいんですか?

489:デフォルトの名無しさん
08/09/24 16:39:34
ArrayList

490:デフォルトの名無しさん
08/09/24 17:15:17
>>489
すいません><
具体的なコードを教えてくれると助かります^^;


491:デフォルトの名無しさん
08/09/24 17:24:23
C#スレ行けよ

492:デフォルトの名無しさん
08/09/24 19:38:05
tchar.hをインクルードしてあるのですが、コンパイルすると、_tstofが未定義の関数なるのは何故でしょうか?

493:デフォルトの名無しさん
08/09/24 20:14:44
>>492
ちゃんと確かめて無いので間違ってるかもだけど、
_tstofは内部でatofや_wtofを使ってるので、それらを使う
ために必要な<stdlib.h><math.h><wchar.h>をincludeする必要があったかも?

494:デフォルトの名無しさん
08/09/24 23:14:43
>>493
その三つをインクルードしてみましたけど駄目でした。
環境の問題でこういう事ってありますかね?

495:デフォルトの名無しさん
08/09/24 23:56:07
>>493
その理屈はおかしいよ

496:マジレスチュウ ◆MaJi/01g.w
08/09/25 00:43:23 BE:279187542-2BP(50)
スペルはちゃんと合ってる?

497:デフォルトの名無しさん
08/09/25 06:09:59
BCC Developer使ってるんですけど、そのデバッガのTurbo Debugger
がダウンロードできません

どなたか入手方法教えてください

498:デフォルトの名無しさん
08/09/25 06:32:51
自己解決しました すいませんでした

499:デフォルトの名無しさん
08/09/25 06:37:59
turbodebugger.exe

500:デフォルトの名無しさん
08/09/25 21:54:04
>>492
includeする順番を変えてみたらどうだろう?
tcharではなかったかもしれないけど、以前にそんな感じの現象になったことがある。
そのときは、なにかのバージョン番号とかが順番によっては未定義になって
起きた現象だった。tchar.hの中をみて、どのように定義されているか確認すると
いいかもね。

501:デフォルトの名無しさん
08/09/26 01:31:26
VC++2008は.NETの関数を使えるんですか?

502:デフォルトの名無しさん
08/09/26 01:49:00
自己解決しました
C++/CLI言語で出来ることがわかりました

503:デフォルトの名無しさん
08/09/26 19:45:12
動的な配列を作るにあたって、
引数付きコンストラクタを呼び出したいんですが、何か方法はありますか?
Const なメンバ変数のために初期化リストを使いたいんですが・・・。

CHoge *hoge;
hoge = new CHoge[2] //ここでHoge( X )のように引数を指定したい

504:デフォルトの名無しさん
08/09/26 20:18:13
ない

505:デフォルトの名無しさん
08/09/26 20:20:29
0xかCLIでなら・・・・・・

506:デフォルトの名無しさん
08/09/26 21:32:03
プロパティページの中にスライダーコントロールをつけたいのですが
setRangeをする場所がわかりません。
コンストラクタの中でやるとエラーで落ちてしまいます。
OnInitDialogでやっても何もダメでした。
何かよい方法は無いでしょうか?

IMPLEMENT_DYNAMIC(CPropOption, CPropertyPage)
CPropOption::CPropOption()
       : CPropertyPage(CPropOption::IDD)
       , m_xvEditPenthick(_T(""))
       , m_xvSliderPenthick(0)
{
//      m_xcSliderPenthick.SetRange(0,10);      //なぜかこれをつけると壊れる
}

VC 2003です

507:デフォルトの名無しさん
08/09/27 00:49:00
>>506
ありません

508:デフォルトの名無しさん
08/09/27 07:16:59
DLLをlibにするテクありませんか?

509:デフォルトの名無しさん
08/09/27 07:55:01
すみません。質問なんですけど、charとwchar_tを比べたとき、charでは表せない文字やファイル名はありますか?
VC++2008ではchar型は、SJISかEUCであってUNICODEは表せませんか?

510:デフォルトの名無しさん
08/09/27 07:59:35
char型に入るのは英数字とあといくらかなのでsjisとかeucだとか言う時点でなんかおかしい

511:デフォルトの名無しさん
08/09/27 08:03:10
char配列でおねがいします

512:デフォルトの名無しさん
08/09/27 08:32:29
>>511
ただのバイト列だからなんでも入るよ

513:デフォルトの名無しさん
08/09/27 08:51:14
>>509
charは只の8bitの数値。それをどの文字コードで解釈するかってこと。
文字コード表を比較してください

514:デフォルトの名無しさん
08/09/27 13:43:04
㌧クス

515:デフォルトの名無しさん
08/09/28 02:38:26
クラスが保持するstaticメンバ関数から
同一クラスのprivateメンバ変数へアクセスできない

書き方が悪いのか、それともそういうもんなの?

516:デフォルトの名無しさん
08/09/28 02:54:48
実体を渡せよ
thisとか

517:デフォルトの名無しさん
08/09/28 03:10:16
>>515
class AAA {
private:
int m_a;
public:
static void func(int arg, AAA* pinst);
};

void AAA::func( int arg, AAA* pinst)
{
pinst->m_a = arg;
}

こんな感じか

518:デフォルトの名無しさん
08/09/28 04:00:18
struct Hoge {
  Hoge() {}
  Hoge(const Hoge&) { Sleep(1000); }
  Hoge& operator=(const Hoge&) { Sleep(1000); return *this;}
};
もしこのくらいコピーにコストがかかるクラスをSTLのコンテナに入れる場合、どうするのが良いですか。
特にvectorだとpush_backしていくうちに、サイズ増やすために全部コピーしたりしますよね。(listだとそういうことはないのでしょうか)
ポインタ(std::vector<Hoge*>とかstd::vector<std::tr1::shared_ptr<Hoge> >)で管理するのが普通ですか。

519:デフォルトの名無しさん
08/09/28 05:00:37
>>518
listやset、mapはpush_back(insert)しても新たにコピーされることは無い
ただまぁvectorと同じようには使えないので、boost::ptr_vectorあたりがお手軽か?

520:デフォルトの名無しさん
08/09/28 08:00:28
>>518
そのとおり、shared_ptrが無難

521:デフォルトの名無しさん
08/09/28 20:52:45
クラスAのメンバの配列を動的確保できるようにnewとdelete用の関数を作りました。
そうするとクラスAに全く関係のないクラスBのメンバの値がおかしくなりました。

調べていくと、
クラスBのコンストラクタで初期化完了
         ↓
クラスAのコンストラクタでnewを使う
         ↓
クラスBのメンバの値がおかしくなる

という流れでした。
これは何が原因なのでしょうか?
ちなみにクラスAのnew用関数ではクラスBは全く使用していません。

522:デフォルトの名無しさん
08/09/28 21:01:43
クラスBのデストラクタにブレークポインタ打ってみそ


523:デフォルトの名無しさん
08/09/28 21:08:37
>>522
プログラム終了時のみにしか呼ばれてませんでした

524:デフォルトの名無しさん
08/09/28 21:09:04
new用関数て?
operator new のオーバーロードをしてるわけじゃないよな

525:デフォルトの名無しさん
08/09/28 21:12:00
クラスBのインスタンスをウォッチしながらステップ実行してみそ

526:デフォルトの名無しさん
08/09/28 21:13:28
>>524
多次元配列なのでまとめてるんです

void New()
{
  int i;;

  for(i = 0; i < MAX; i++)
    p[i] = new int [SIZE];
}

こんなのです

527:デフォルトの名無しさん
08/09/28 21:15:24
全く関係ないところでスタックやヒープを壊してる悪寒

528:デフォルトの名無しさん
08/09/28 21:23:12
>>525
ググって見たんですけどやり方が今一分かりませんでした。
クラスA・Bどちらのインスタンスもグローバル変数でクラスBのほうが先に作られます。

529:デフォルトの名無しさん
08/09/28 21:23:20
>>526
pの領域は確保してるか?

530:デフォルトの名無しさん
08/09/28 21:33:09
>>529
pは int *p[SIZEX]; と宣言してます。

531:デフォルトの名無しさん
08/09/28 21:41:51
>>528
VisualStudioだったら、ウオッチにCLASS Bのインスタンスを表示させてステップ実行すると、値が変わったところで赤くなる。


532:デフォルトの名無しさん
08/09/28 21:51:48
>>531
クラスAのコンストラクタでnew用の関数が終わったときに値が変わりました。

原因がつかめないのでnewする前にクラスBの値を保存しておいて終わったらそれを代入することにしました。
皆さんありがとうございました。

533:デフォルトの名無しさん
08/09/28 22:12:57
領域が重なってるんだヤバイ状態だ。
解決してから進まないと、あとで手が着けられない状態になるよ

534:デフォルトの名無しさん
08/09/28 22:13:29
>>532
MAX > SIZEX
になってない?

535:デフォルトの名無しさん
08/09/28 22:22:12
>>534
思いっきりなってました・・・
何で気づかなかったんだろう・・・
直したら正常になりました。
ありがとうございました。

536:デフォルトの名無しさん
08/09/29 01:08:29
Visual C++ 2003
MFC利用

でExcelファイルの読み書きをexcelのtypelibを使って行っているんですが、
CRangeオブジェクトのメンバ
CString get_Address(VARIANT RowAbsolute, VARIANT ColumnAbsolute, long ReferenceStyle, VARIANT External, VARIANT RelativeTo)
のReferenceStyleに設定すべき定数がどこにあるのかわからず困っています。
XlReferenceStyleをxlA1にすれば良いらしいのですが。

CRangeの"C8"などのアドレスを返す代替手段があればそちらでもかまわないです。

他の部分はほとんどなんとかなったんですがこれだけどうしようもないです。
よろしくお願いします。

537:デフォルトの名無しさん
08/09/29 10:10:33
>>508
インポートライブラリを作るってこと?できるよ。
環境によって違うけど。

538:デフォルトの名無しさん
08/09/29 12:01:34
fstreamでパスに日本語を含むファイルを開けないんですが、
std::localeとかimbue()つかってもダメで探してもlocaleのことしか見つかりません。
環境はVC2008使ってるけどやはりVCのバグ?fopenとか_openとか使えってことですかね?


539:デフォルトの名無しさん
08/09/29 12:05:07
ワイド文字版のコンストラクタを使えばいいよ

540:デフォルトの名無しさん
08/09/29 12:22:23
ストリーム関連のライブラリは設計段階でダメダメなので使わないほうがいい。
何しろ、一文字は7bitであるという前提が頭からこびりついて離れない西側諸国の連中が作ったんだから。


541:538
08/09/29 12:24:00
wfstreamでもダメだったんでやはりCライブラリですか

542:デフォルトの名無しさん
08/09/29 12:29:31
>>541
wfstreamはファイルの「中身」をワイド文字で読み書きしたいときに使うんだ
ファイル名の問題とは関係ない

つうか>>539
VC8以降は、fstreamにワイド文字版コンストラクタがあるんだよ

543:541
08/09/29 12:34:34
つまりfstreamのインスタンス作成のときにアドレスをワイド文字で渡せばおkということですか


544:543
08/09/29 12:54:55
できましたー
>>542ご指摘ありです。
>>539理解できてなくてすません。

ところでVC8以降ってことはVC依存のコンストラクタ?他のビルダーとかだとマルチバイトで指定してもおk?


545:デフォルトの名無しさん
08/09/29 13:02:17
>>544
少なくとも非標準
他の環境でも利用したいのならboost使え

546:544
08/09/29 13:14:55
なるほど了解しました。

547:デフォルトの名無しさん
08/09/29 14:39:12
C++…というかC言語自体が初心者です。
C++の開発環境で、PCに『Visual Studio 2005』が入っていたのでそれを使おうとしたのですが、いまいち上手く使えません。
Visual Studio 2005 について解説しているサイトを見ながら設定し、それにのっているプログラムを丸写ししてみたのですが、ビルドが上手くいかなかったり、実行してもエラーが出たり出なかったりでよくわからない状態です。
これ以外で無料で使えて、それでいて使いやすい開発環境はありますか?

548:デフォルトの名無しさん
08/09/29 15:19:22
あきらめた方がいいよ

549:デフォルトの名無しさん
08/09/29 15:39:47
開発環境のせいじゃないだろ。
一歩ずつ進めてみては

550:デフォルトの名無しさん
08/09/29 20:20:09
>>547
VS2005は簡単な部類だからあきらめないでね。


551:デフォルトの名無しさん
08/09/29 20:23:04
>>547
2008を入れて、この本を買いなさい。
URLリンク(www.amazon.co.jp)
URLリンク(www.amazon.co.jp)

552:デフォルトの名無しさん
08/09/29 20:25:45
なんか昔アカデミックのおまけについてたような本だなw

553:デフォルトの名無しさん
08/09/29 20:56:57
そういうツールの解説本は例外なく糞だ。
買うならこれだ。
URLリンク(www.amazon.co.jp)

554:デフォルトの名無しさん
08/09/29 21:01:45
コンパイルができないってのは、独学者がぶつかる最初の壁だろ。
周囲に訊く人間がいなかったら、バカっぽくても画面写真が載りまくりのような本を見るしかない。

555:デフォルトの名無しさん
08/09/29 21:19:19
その辺は、まともな本ほど載ってないような話題だしな

556:536
08/09/30 00:40:35
自己レスです。

enum XlReferenceStyle
{
xlA1 = 1,
xlR1C1 = -4150
};

でした。全て解決しました。


557:デフォルトの名無しさん
08/09/30 03:31:12
クラス名をつけたらコンストラクタ出来ますが、クラス名無しで変数だけ定義したら
コンストラクタは出来ませんか?

558:デフォルトの名無しさん
08/09/30 03:34:39
日本語でおk

559:デフォルトの名無しさん
08/09/30 03:47:13
class cls{
int a;
public: cls(){・・・} };

というクラスを

class {
int a;
public: } hensuu;

と書いた場合に、初期化が出来るか教えてください

560:デフォルトの名無しさん
08/09/30 04:12:46
それを構造体にしない理由は?

561:デフォルトの名無しさん
08/09/30 07:25:39
>>560
後者にコンストラクタは定義できませんか? 構造体にしないのは初期化したいからですよ。

562:デフォルトの名無しさん
08/09/30 07:27:22
>>561
構造体にすれば初期化できるよw

563:デフォルトの名無しさん
08/09/30 07:29:54
初期化は、代入だけとは限らないですが出来ますか? 普通のプログラムも掛けますか

564:デフォルトの名無しさん
08/09/30 07:43:16
POD(Plain Old Data)の定義からも、
PODの初期化のルールからもはずれるから初期化されないと思う。
第一privateなint a;はどこからもさわれない、そこで警告なりなりラーなりになるような。

565:デフォルトの名無しさん
08/09/30 07:47:18
クラス名を付ければ、初期化出来ますけど、クラス名無しだと初期化は無理って事ですか?

566:デフォルトの名無しさん
08/09/30 07:57:35
クラス名のあるなしは関係ない。
グローバル変数としてhensuuがあったら初期化ずみ。
ローカル変数としてhensuuがあったら未初期化。
このへんは普通の変数と同じ考え方でいい。
あとはPODでググる。PODならnewを使った場合にコンストラクタなしでも初期化される。

それから新規の質問以外はsageる。


567:デフォルトの名無しさん
08/09/30 08:07:47
struct {
 int id;
 char *name;
} table[] = {
 { 0, "zero", },
 { 1, "ichi2, },
};
が出来るのだから
デフォルトの公開性が違うだけのclassでも
class {
public:
 int id;
 char *name;
} table[] = {
 { 0, "zero", },
 { 1, "ichi2, },
};
と出来るだろ。

やったことないけど。

568:デフォルトの名無しさん
08/09/30 08:14:06
>>567
そこまで書いたらやってみればいいよwww

569:デフォルトの名無しさん
08/09/30 08:15:04
それでいいはず。
なんでint a; が何でprivateなのだろ。
publicならPODだから、newやhoge xx = {} で初期化可能になる。

570:デフォルトの名無しさん
08/09/30 08:18:42
初期化っていうのはコンストラクタを起動出来るかという質問です。

class cls{
int a;
public:
cls(){a=10;} };

っていうのは出来ますけど、クラス名無しだと標準のコンストラクタ名が使えないですけど
なんとか出来ますか?っていう質問です。

571:デフォルトの名無しさん
08/09/30 08:21:59
無名ではコンストラクタは指定できない。メンバーをpublicにする。以上。

572:デフォルトの名無しさん
08/09/30 08:28:57
>>570
つーかいちいちあげるな

573:デフォルトの名無しさん
08/09/30 08:30:28
>>570
無名クラスではコンストラクタは作れないです
もし名前空間を汚染したくないだけであれば無名名前空間を使うのも手です

574:デフォルトの名無しさん
08/09/30 08:43:28
トンクス

575:デフォルトの名無しさん
08/09/30 09:22:14
すみません質問良いでしょうか。 
関数chk()の戻り値がFALSEになるまで待つにはどうしたらいいですか?

576:デフォルトの名無しさん
08/09/30 09:26:52
なるべくCPUを使わず、即座に進める方法おねがいします。

577:デフォルトの名無しさん
08/09/30 09:40:57
自己解決しました。 関数の戻り値を監視するには、定期的に関数を呼び出すしかないようですね。

578:デフォルトの名無しさん
08/09/30 12:26:27
>>577
戻りが変わった可能性があることをイベントを使って検出してから見にいくといい。
OSのAPIにはそういうイベント関係の関数が多数ある。

579:デフォルトの名無しさん
08/09/30 12:36:18
>>570
PODをクリアするテンプレートクラスを作って、それをクラスに所有させる。するとデフォルトコンストラクタで初期化できるようになる。

template<class T)
class tclear
{
T a;
public:
tclear()
 :a(0)
 {
 }
};

class X
{
tclear<int> a;
};


580:デフォルトの名無しさん
08/09/30 15:54:03
ICL10.1(win)でXP32bit用アプリ?をゴニョゴニョしてるんだけど、
SSEのインラインアセンブラとか組み込み関数を使うと、/archとか/Qxとかに関わり無くなぜか勝手に拡張命令を使うみたいなんで困ってます><
インラインアセンブラはともかく組み込み関数は汎用命令で何とかしてくれると思ってたのに・・・

汎用命令以外吐かないようにする方法を教えてください、よろしくお願いします。

581:デフォルトの名無しさん
08/09/30 17:28:52
もうSSEの無い環境なんて切り捨ててもいい時期に来てるってことだろ。

582:デフォルトの名無しさん
08/09/30 18:14:32
そうだな C3 だとハングアップするソフトも結構あるしな ><

583:デフォルトの名無しさん
08/09/30 20:23:58
いや、SSE2未満なら切捨てでいいと思うけど
オレが使いたいのはSSSE3(_mm_hadd_epi16)までなんでチョットまずいかなと・・
俺自身SSSE3が動かないPCも使ってるし困るんです><


てかQaxがマトモに機能してれば困らない事に気付いたよ!!
ICLがコピーと論理演算位しかベクトル化してくれないのが全部悪いんだ!!!
型が複数あると出来ないとか、無理矢理全部intでやったら複雑すぎとかふざけてるとしか思えない
てことで普通の自動ベクトル化があるコンパイラ教えてください、お願いします。

584:デフォルトの名無しさん
08/09/30 21:35:54
空の書き込み可能なテンポラリディレクトリを確保する命令ありますか?
WindowsXPです。


585:デフォルトの名無しさん
08/09/30 21:38:29
GetTempFileName()のフォルダ版ないですか?  存在していない空のフォルダを作りたいのですが

586:デフォルトの名無しさん
08/09/30 21:51:20
同じ名前のファイルとフォルダは同時に存在できない。

587:デフォルトの名無しさん
08/09/30 22:01:53
GetTempFileNameで取った名前使ってディレクトリ作れば?

588:デフォルトの名無しさん
08/09/30 22:16:51
>>587
それは無理。
GetTempFileNameの作ったファイルを消してディレクトリを作らないといけないから、
その間に他のプロセスに割り込まれる可能性がある。

589:デフォルトの名無しさん
08/09/30 23:15:32
これで出来ました。

GetTempdir(){

wchar_t w[1000], z[1000];
GetTempPathW(1000, w);

if(!GetTempFileNameW(w, L"aa", 0, z) ) {
wcscpy(w,L".\\temp\\"); CreateDirectoryW(w,NULL);
if(!GetTempFileNameW(w, L"aa", 0, z) )
wcscpy(w,L"c:\\temp\\"); CreateDirectoryW(w,NULL);
}

wchar_t ch[9];
for(int n=0;n<100000;n++){
swprintf(ch,L"aa%06d",n);
wcscat(w,ch); CreateDirectoryW(w,NULL);
if( (GetFileAttributesW(w)&FILE_ATTRIBUTE_DIRECTORY) )break;
w[wcslen(w)-8]=0;}
}

590:デフォルトの名無しさん
08/09/30 23:26:38
まちがえました

wchar_t ch[9];
for(int n=0;n<100000;n++){
swprintf(ch,L"aa%06d\\",n);
wcscat(w,ch);
int flg=GetFileAttributesW(w);
if( flg==-1 || !(flg&FILE_ATTRIBUTE_DIRECTORY) )
{CreateDirectoryW(w,NULL); break;}
w[wcslen(w)-9]=0;

591:デフォルトの名無しさん
08/09/30 23:30:25
GetTempdir が使われてないのと>>588の意見を全つっぱした理由が気になるな

592:デフォルトの名無しさん
08/10/01 04:40:03
GetTempFileNameはファイル作らないよ?

593:デフォルトの名無しさん
08/10/01 21:41:36
>>592
作ったり作らなかったりする。
MSDN嫁あほ

594:デフォルトの名無しさん
08/10/01 23:21:58
C++なんですけど、(Cも同じでしょうか)
グローバル変数でstatic付けるのと付けないのと、どんな違いがあるのでしょうか。

595:デフォルトの名無しさん
08/10/01 23:28:51
>>594
その名前がコンパイル単位の外から見えるかどうかが変わる。
C++ では無名の namespace に入れるのが推奨されてる。

596:デフォルトの名無しさん
08/10/01 23:34:01
>>594
つけると静的になり、ファイルスコープになる。
つまり、外部に公開しないで済む。

597:デフォルトの名無しさん
08/10/02 04:58:54
template< class T > class Base を継承したクラス Derived を作りたいのですが
クラス定義はどのように記述すればいいんでしょうか?

598:デフォルトの名無しさん
08/10/02 05:15:16
template<class T>
class Deriv : public Base<T>

こうだろうか?

599:デフォルトの名無しさん
08/10/02 05:19:28
#include <iostream>

template <class T>
class Base {
T a;
public:
Base(T b) : a(b) {}
void print() const {
std::cout << a << std::endl;
}
};

template <class T>
class Derived : public Base<T> {
T c;
public:
Derived(T a, T b) : Base<T>(a), c(b) {}
void print() const {
Base<T>::print();
std::cout << c << std::endl;
}
};

int main()
{
Derived<int> d(1, 2);

d.print();
}

600:デフォルトの名無しさん
08/10/02 06:48:15
おふっ。
できました。ありがとうございます。

601:デフォルトの名無しさん
08/10/02 09:35:56
例外を扱うとき場合
実行中どういう例外を吐いたかログを取るような仕組みを組みこんだりするのでしょうか?

その場合、どういう方法でログ取りの仕組みを実装するのがよいでしょうか?

602:デフォルトの名無しさん
08/10/02 10:29:09
SYSLOGでも利用すれば

603:デフォルトの名無しさん
08/10/02 16:47:32
イベントログも使えば

604:594
08/10/02 18:21:18
>>595-596
ありがとうございます。
staticはローカル変数でしか使ったことがなく、ちゃんと理解してませんでした

605:デフォルトの名無しさん
08/10/02 18:31:59
まあ、まず使わん仕様だがな。

606:デフォルトの名無しさん
08/10/02 19:44:00
質問があります。私は今WindowsGUIプログラムで、WinMainのスレッドでGUIの処理、別に作ったスレッドで
ファイルへの書き込みを行っています。一定時間間隔で複数のデータをサンプリングしてファイルへ書き込んで
いるのですが、メインスレッド終了時に、同時刻上のデータがすべて書き込み終わっている様にしたいのです。
ファイル書き込みスレッドを終了させた場合、どこまで処理を終えているのか確定できませんが、どのようにコントロール
するのが一般的なのでしょうか。よろしくお願いします。

607:デフォルトの名無しさん
08/10/02 19:46:01
>>606
fflush 相当のことをすればいいんじゃないかと

608:デフォルトの名無しさん
08/10/02 19:57:36
>>606
書き込みスレッドにイベントを送って、書き込みスレッドがファイルをクローズしその後スレッド終了するようにすればいい。それを待ってwinmainのスレッドを終了させる。


609:デフォルトの名無しさん
08/10/02 22:00:18
イベントについて調べたところ、これで大丈夫そうです。ありがとうございました。

610:デフォルトの名無しさん
08/10/02 22:52:18
クラスをリスト化してるのですが
クラスの一番最初のメンバ変数をsortを使って
昇順や降順に変更したいと思っています
何かいいやり方はないでしょうか?

611:デフォルトの名無しさん
08/10/02 22:55:20
reverseのが早いんじゃない?
使えるリストなのかは知らないけど

612:デフォルトの名無しさん
08/10/02 22:55:44
>>610
STLを使おう

613:デフォルトの名無しさん
08/10/02 22:57:42
>>609
豆知識

スレッドの実行が終わると、スレッドのハンドルがシグナル状態になる。結構便利


614:デフォルトの名無しさん
08/10/02 23:27:10
豆知識ていうか必須知識だろ

615:デフォルトの名無しさん
08/10/02 23:37:04
>>606
文章の酷さが気になった
もう少し読み書きしようぜ

616:デフォルトの名無しさん
08/10/03 02:04:13
int hoge(int a) {
return a++ * ++a;
}
という関数があるときに
hoge(5)
とすると、Return値は5×6で30になると思ったんだけど、g++とVC++の両方で
答えが36になりました。これってどうしてでしょうか?
どうかお願いします。


617:デフォルトの名無しさん
08/10/03 02:20:56
>>616
それは未定義動作なのでそういうコードは書いちゃいけないけど、
あえてコンパイラの気持ちを大便するなら、
1. a++を発見。「評価後にaの値を+1する」と覚えておく
2. ++aを発見。「評価前にaの値を+1する」と覚えておく
3. コード生成開始
4. 評価前なのでaの値を+1するコードを生成
5. a*a のコードを生成して、その結果が返り値となるようにする
6. aの値を+1するコードを生成する。意味がないから最適化で削除されるかも。


618:デフォルトの名無しさん
08/10/03 02:23:42
水に流せってことですか

619:デフォルトの名無しさん
08/10/03 03:35:14
変な物を放り込むと詰まるという意味も

620:デフォルトの名無しさん
08/10/03 04:08:33
template < class T > class Hoge;
で const の T を受け取った時に、
クラス内部で非 const な T 型を使いたい場合には
どうすればいいんでしょう?

例えば Hoge< const string > というように呼ばれたとき、
内部で(非 const な) string 型を扱いたいのです。

621:デフォルトの名無しさん
08/10/03 07:54:20
>>620
boostのtype_traitsにconstを外した型を返せる
remove_cってのがある。
URLリンク(www.kmonos.net)

手法としてはtemplateの特殊化で行ってるらしい。

622:デフォルトの名無しさん
08/10/03 07:55:16
すまん、remove_constだね

623:デフォルトの名無しさん
08/10/03 08:36:56
サンクスです。boostが必要ということは
もともと const 修飾された型から 非 const の型を特定するのは
難しいプログラム技術が必要だってことなわけですね・・・。

自作のiteratorを作ってたんですが、こりゃー自分には無理かな。・_・

624:デフォルトの名無しさん
08/10/03 08:59:29
>>623
いや、試してないけど実装はたったこれだけで良いっぽいよ。

// remove_const : const修飾の除去

//非constが渡されたらこれが実体化
template <typename Type>
struct remove_const {
typedef Type type;
};

//constの場合はこちらが実体化
template <typename Type>
struct remove_const<Type const> {
typedef Type type;
};

//用例
remove_const<const int>::type i; //constが外れる

625:デフォルトの名無しさん
08/10/03 11:00:15
>>617
未定義動作じゃなくて不定動作だろ。
a++と++aの評価順が決まってない。

626:デフォルトの名無しさん
08/10/03 11:08:18
>>617
副作用完了点について理解しとかないと泣きを見るよ。

627:デフォルトの名無しさん
08/10/03 11:48:35
またそうやって「何かをわかってるフリ」したデタラメを書くw

628:デフォルトの名無しさん
08/10/03 11:51:43
>>625
↓にはそういったコードは未定義だと書いてあるが・・・
URLリンク(www.kouno.jp)

629:デフォルトの名無しさん
08/10/03 11:59:34
ANSI-C89より前では「不定動作」だったがANSI-C89からは「未定義動作」
に改められたね。

630:デフォルトの名無しさん
08/10/03 13:17:57
>>624
おぉ!すごい!できました!革命的!

が、これは安全なんでしょうか。^^;
VC++2008では
allocator::allocate, allocator::construct は const オブジェクトを引数に取れますが
allocator::deallocate. allocator::destroy は const オブジェクトを引数に取れません。

つまり、例えば const string 型のオブジェクトのためのメモリ領域は確保できますが、
その領域を開放する術はありません。そこで、

// T は const string 型とする。
// T* p;
// allocator< T > alloc;
typedef typename remove_const< T >::type * not_constT; // T 型からコンストはずし
alloc.destroy( const_cast< not_constT >( p ) ); // p からコンストはずし

のようなコードを書いたわけですが、これが正常なのかどうか…。
コンパイルは通っており、テストもパスしていますが、メモリの中身を覗く術がわからないので
もしかしたらメモリリークでもしてるのでは、と。

631:デフォルトの名無しさん
08/10/03 14:29:18
スレッド、セマフォ、ミューテックス辺りを次の業務でするんだけど
プロセスとスレッドの違いが良くわかりませぬ。
スレッドってなんだ?

632:デフォルトの名無しさん
08/10/03 14:42:34
ここのこと
それはスレッド

633:デフォルトの名無しさん
08/10/03 14:44:55
>>632
それだけは言って欲しくなかった…

634:デフォルトの名無しさん
08/10/03 14:54:21
プロセス・・・プロセスごとにメモリ空間(=グローバル変数とかヒープとか)が別々
スレッド・・・全部のスレッドでひとつのメモリ空間を共有

メモリ空間を共有するので複数のスレッドからひとつの変数を
同時に書き換えたりとかわけわからんことにならぬよう注意せよ

セマフォとかは普通にプロセス間でも使えるんじゃ?

635:デフォルトの名無しさん
08/10/03 15:15:19
>>634
ありがとう
確かに共有メモリがどうの聞いた!

636:デフォルトの名無しさん
08/10/03 15:17:08
「業務」で未知状態でマルチスレッドか……

ご愁傷様って奴だな

637:デフォルトの名無しさん
08/10/03 15:25:13
共有メモリとメモリ空間共有とは違うw

638:デフォルトの名無しさん
08/10/03 15:36:17
えらんツッコミのせいでせっかくの感動が台無しだ

639:デフォルトの名無しさん
08/10/03 15:40:48
地獄への第一歩で感動とかされても

640:デフォルトの名無しさん
08/10/03 15:50:50
Windows3.xやWin32sのプロセスはスレッドだったのか

641:デフォルトの名無しさん
08/10/03 16:06:45
地獄とかやめて
確かに既に炎上してるらしいが

642:デフォルトの名無しさん
08/10/03 16:16:21
既に炎上してるところに知識のない奴が投入されるのか・・・
ご愁傷様という他ないな

643:デフォルトの名無しさん
08/10/03 16:16:35
passive hell and death

644:デフォルトの名無しさん
08/10/03 17:19:33
デスマーチのプロジェクトは働かなくても給料もらえるからいいじゃない。
だって、どうせ出来上がらないんだから!

645:デフォルトの名無しさん
08/10/03 17:22:18
const char *hoge[5]={"test","test2","test3","test4","test5"};

というのを宣言します。

char *hoge2;


hoge2 = hoge[3]; という代入をしたいんですが、コンパイルが通りません。hogeのほうにconstをつけなければいけるんですが・・・
教えてください

646:デフォルトの名無しさん
08/10/03 17:26:08
>>645
そういうのを通さないためのconstです。
明示なcastをしてください。

647:デフォルトの名無しさん
08/10/03 17:28:11
>コンパイルが通りません
エラーになった原因とかコードとかでてるだろ?
それを調べてみればここで聞くまでもなく答えはすぐわかるよ。

648:デフォルトの名無しさん
08/10/03 17:28:42
代入される変数がconstついてなければできるのだと思ってました

hoge2 =(char)hoge[3];ですか?

649:デフォルトの名無しさん
08/10/03 17:29:53
hoge2にconst

650:デフォルトの名無しさん
08/10/03 17:31:25
char * だろ。
constのポインタをconstでないポインタに代入しようとしてるから。

651:デフォルトの名無しさん
08/10/03 17:32:21
程よいレベルだとやっぱ群がるなぁ

652:デフォルトの名無しさん
08/10/03 17:35:24
>>649
hoge2はconstだと困るんです

653:デフォルトの名無しさん
08/10/03 17:38:02
char hoge2[5]
でstrcpy

654:デフォルトの名無しさん
08/10/03 17:42:35
>>652
なんで困るのか言ってみようか

655:デフォルトの名無しさん
08/10/03 17:42:48
C++ならSTLのstd::string使うとか

656:デフォルトの名無しさん
08/10/03 17:43:37
>>650
それだといけました

>>653
それもありなんですね

>>654
いろいろ書き換えたいんです

657:デフォルトの名無しさん
08/10/03 17:50:41
文字列定数を書き換えてはいけない
必ずstrcpyでコピーしる

658:デフォルトの名無しさん
08/10/03 17:53:18
そもそもなんとなく この宣言を使ってるんですが

char *hoge[5]={"test","test2","test3","test4","test5"};

イメージ的にはどんな感じですか

hoge[0] 文字列testへのポインタ
hoge[1] 文字列test2へのポインタって感じですか?

659:デフォルトの名無しさん
08/10/03 18:24:19
そんな感じ

660:デフォルトの名無しさん
08/10/03 19:13:21
a.hにクラスAを宣言、別ファイルのb.hでクラスAを継承したクラスBを宣言したいんですが、
B宣言部の「class B:public A」の部分に「型名が必要」とエラーが出ます。(当方Borland C++)
a.hをインクルードしても「Aの宣言が複数見つかった」と言われたりで、どうしたらいいんでしょうか。

661:デフォルトの名無しさん
08/10/03 19:15:04
>>660
class B の定義より前に class A の宣言だけしてみるとか
class A;

662:661
08/10/03 19:16:28
ごめん >>661 は無しで

663:デフォルトの名無しさん
08/10/03 19:26:27
質問です。
他クラスのメンバ変数にアクセスするにあたって
privateなメンバにgetterを使ってアクセスするのと
publicなメンバを直接参照するのではどちらが速いですか?

CHoge hoge;
int a = hoge.m_publicHoge;
int b = hoge.getHoge();

// CHogeの実装
// const int& getHoge(){ return m_hoge; };
// public: :
// int m_publicHoge;
// private :
// int m_hoge;

664:デフォルトの名無しさん
08/10/03 19:30:51
一応
速度は直接アクセス
安全性はゲッター
だろう一般的に
最適化で速度差無い事もあるけど
普通はゲッター使いなさいと教わるはず

665:デフォルトの名無しさん
08/10/03 19:30:52
>>660
それだけだとうまくいくはずなのでもうエスパーさんしか
アドバイスできないんじゃないかと
エラーの出る最小のコードをどうぞ

666:デフォルトの名無しさん
08/10/03 19:32:06
VC++2008のデフォルト状態Releaseでコンパイルしたものを実行し、CPUメーターで見ました。するとコアが満遍なく使われています。
私はマルチスレッドプログラムも何もしていないのに、コンパイラが自動でマルチコアに最適化してくれたということでしょうか?

667:デフォルトの名無しさん
08/10/03 19:35:11
ほかのプログラムが満遍なくCPUを使っていただけだろ。

668:デフォルトの名無しさん
08/10/03 19:42:44
>>660
インクルードガードでぐぐれ

669:デフォルトの名無しさん
08/10/03 19:52:56
>>665
こんな感じです。

URLリンク(kansai2channeler.hp.infoseek.co.jp)

670:デフォルトの名無しさん
08/10/03 19:54:33
>>669
#include "ca.cpp"
#include "cb.cpp"

これは。。
ヘッダをインクルードするようにして、多重インクルードガードすればいいと思うよ。

671:デフォルトの名無しさん
08/10/03 19:55:40
ボーランドのリンカ使い方知らないけど、
それぞれのcppからobj作って、それらをリンクして、exeを作るのが普通。

672:デフォルトの名無しさん
08/10/03 19:57:11
>>671
makefileみたらそうなってるから >>670 だけでいいんじゃないかな

673:デフォルトの名無しさん
08/10/03 20:22:08
>>670
つまり、main.cppでa.hとb.hをインクルードして、
a.cppとb.cppではインクルードガードをかけるだけて、単にメンバ関数を書くだけでいいという事ですか?

674:663
08/10/03 20:37:11
>>664
サンクスです。
やはり直接アクセスの方が速いですか。。。
参照返ししてるからほぼ同等だと思ったのですが甘かったようですね。

getter使うにしてもローカルで複数回使う場合

func1( hoge.getHoge(; );
func2( hoge.getHoge() );
func3( hoge.getHoge() );

とするより

int& b = hoge.getHoge();
func1(b);
func2(b);
func3(b);

のようにした方がオーバーヘッドは減りますよね?

675:デフォルトの名無しさん
08/10/03 20:42:29
メンバ関数はインライン関数にできてだな

676:デフォルトの名無しさん
08/10/03 20:43:35
最適化を前提にするなら余計なことはしないほうがよいだろう。
get/setは*.hにインラインで記述するのが基本。
気になるならアセンブリリストを出力したり、実際に測定するといいよ。

677:デフォルトの名無しさん
08/10/03 21:05:57
>>674
intなら参照使わない方が早いんじゃね?
どういう用途か知らないけど


なんにせよ実測するのが一番だな

678:デフォルトの名無しさん
08/10/03 21:23:04
>>674
値をレジスタに置けるなら、メンバの内容をローカル変数にコピーして、
一通り操作が終わったら、メンバに書き戻す方が良いかも。
メンバへの変更 ( 副作用 ) が発生するポイントが、書き戻し部分に限定
される点もメリット。

679:673
08/10/03 21:50:44
解決しました。
どれから読み込んでもいい様、使う関数のあるヘッダはインクルードガード付けた上で
形式上でもインクルードしておけ、って事ですね(多分)。
アドバイスくれた方々、ありがとうございました。

680:デフォルトの名無しさん
08/10/03 22:33:10
>>679
> a.cppとb.cppではインクルードガードをかける
ヘッダ内でガードする。
多重インクルードされた結果、重複定義が発生する。

> ヘッダはインクルードガード付け
となっているから理解したのかもしれないけれど。

すっきりさせるために動かない状態が続くよりは、ぐちゃぐちゃでもなんとか動く状態の
ほうがいいので、動く状態をキープしたまますっきりさせられるように努力するといいですよ。
リファクタリングって言葉も調べてみてください。

681:デフォルトの名無しさん
08/10/03 23:09:43
よくwindowsプログラムのサンプルコードでInitAppとInitInstanceってあるけど、どういう分け方してるんですか?

682:デフォルトの名無しさん
08/10/03 23:31:17
エスパーに失敗した。もうちょっと情報頼む。

683:デフォルトの名無しさん
08/10/04 01:04:14
>>681
気分

684:デフォルトの名無しさん
08/10/04 01:22:24
>>681
そういう作りはWin16時代の遺物なので今となっては意味がない

Win16ではアプリケーションの最初のインスタンスだけが実行すべき処理を
InitApplication()に記述して、
WinMain()の引数hPrevInstanceがNULLの場合にのみInitApplication()を実行していた。


最新レス表示
レスジャンプ
類似スレ一覧
スレッドの検索
話題のニュース
おまかせリスト
オプション
しおりを挟む
スレッドに書込
スレッドの一覧
暇つぶし2ch