「遺伝的アルゴリズムと遺伝的プログラミング」付録CD-ROM内容への追加情報です。
(2003/06/04追加情報)
VC++ .NETスタンダード版におけるコンパイル
VC++ .NET に関しては,スタンダード版でのみで確認しました.
VC++ .NET のコンパイラはVC++6.0と同等ということです.したがって,コンパイル要領はVC++6.0と同じです.
VC++ .NET のプロフェッショナル版も,コンパイル要領はVC++6.0と同じだと推測できます.アカデミック版については,
確認していません.
なお,詳細な修正箇所は,VC++6.0におけるコンパイル等を参照してください.
※ご注意:すべてのプロジェクトについて「.NET版」を確認したわけではありませんので、ご了承ください.
(2001/02/16追加情報)
VC++バージョンの修正について
ここでは,VC++バージョンの各プログラムについて,これまでに判明したバグについてその修正個所をまとめておきます.本書初版第1刷(2000/02/29発行)に付属のCD-ROMのVC++バージョンが対象となります.
本書初版第2刷(2001/02/28発行)に付属のCD-ROMに含まれるVC++バージョンの各プログラムについては,これらの修正は済んでいます.
なお,これらの修正については,すべて以下のバグについてのものです.
◆現象
多くの繰り返し処理を行っていると,「リソースが足りない」といったメッセージや特定メモリからリードできないなど,あるいは表示がおかしくなるなどの不都合が起こります.
Windows2000では,実行中にマウスのボタンクリックなどイベントが発生すると,動きがおかしくなることもあります.
◆原因
すべて,メモリーを解放すべき個所でそれを行っていなかったため,処理を繰り返していくうちにメモリが使えなくなったためです.以下の場合があります.
- new演算子でオブジェクトを確保し,役目を果たした後.この場合はdelete演算子でオブジェクトを削除しておかねばなりません.一部これを行っていない個所がありました.
- GetDC()を使いデバイスコンテキストを獲得したら,処理を行った後は,それを解放しなければなりません.
◆対処法
以下の変更点を参照してください.
FrameWorkフォルダの共通の変更について
VcPackフォルダ中の変更点について
VcAntフォルダ中の変更点について
VcStoreKeeperフォルダ中の変更点について
変更上の注意点
(2000/11/17追加情報)
※VC++バージョンで,各アプリケーションフォルダのFrameWorkフォルダ内のStaGrpDlg.cpp が対象となる不具合があります。
こちらをごらんください。
(2000/09/01追加情報)
VC++6.0におけるコンパイル等
コンパイル要領はVC++5.0と同じです.
目的のフォルダ中の,*.dsw をダブルクリックするなどして環境を立ち上げます.
1 [ビルド]-[ビルド]で実行形式を作ります.
2 何事もなければ,リンク終了します.
3 以降は,上記VC++4.2を参照してください.
なお,VC++6.0でも,GaAppTpl.h中の以下のVC++5.0と同様,コメント化を解除してください.
// VC++4.2では以下のnamespaceをコメント化するが,VC++5.0では有効にする.
using namespace std;
なお,プロジェクトの中には,GaAppTpl.hがFileタグで開かれるウインドウに出てこない場合があります.このときには,[プロジェクト]-[プロジェクトへの追加]-[ファイル]により,そのファイルを指定して追加してください.
詳しくは,VC++4.2とVC++5.0の互換ソースを参照してください.
cgaframe.cppのVC++6.0でのコンパイルエラー
cgaframe.cppのコンパイル時以下のコンパイルエラーがでることがあります.
「構文エラー : ';' が '--' の前に必要です。」
対応
前の行のコメント行が長すぎて,改行された結果です.この余計な行を削除してください.
g++Tips
本書を出版したあと,g++について判明したことを以下に記述します.
コンパイルエラーがなかなかとれない
本CD-ROMにふくまれているCygnus B20.1(gcc ver. egcs-2.91.57 199801(egcs-1.1 release)) で下記の現象がありました.
現象:
class TRoomTApplication : public TSubject
{
protected:
.....
//何かのコメント
Period rm;
.....
};
struct Period { ..... }; は,このクラス定義の前に存在している.
このとき,あるメソッド内で,rmを参照すると,そこで未定義のコンパイルエラーとなる.
原因:「//何かのコメント」に起因していることが判明.
コンパイラのバグか?
対策:コメントを/* .... */形式に代える,コメント行を削除する. |