トップページ > コンテンツ > プログラミング入門 > C++入門 > 基本まとめ > ヘッダファイルと実行ファイルの分割について

クラス設計の方法の一つに次のような例を挙げる。

//----sample.h-----//
#include "xxx.h"
#include "yyy.h"
class Test {
   private:
     int x;
     int y;
   public:
     Test();
     ~Test();
     void test();
};

//----sample.cpp----//
#include "sample.h"
Test::Test() {
   初期化;
}
Test::~Test() {
   終了処理;
}
void Test::test() {
   関数処理;
}

このようにヘッダファイルを引用して実装していくと、
他のクラスとヘッダファイルが重複してエラーが出る場合がある。
その時は、extern宣言をすることで異なるソース間で変数を共有するか、
#ifndefと#endifで囲い宣言されていなかった場合のみコンパイルするようにする。
//----sample.h----//
#ifndef SAMPLE
#define SAMPLE
/*xxx.hで#ifndef XXX #endifで囲んでおき、下の3行を追加すると、
 *xxx.hを既にインクルードしている場合にコンパイルしないで済む
 */
#ifndef XXX
#include "xxx.h"
#endif

#include "yyy.h"
class Test {
   private:
     int x;
     int y;
   public:
     Test();
     ~Test();
     void test();
};
#endif

これらは共にコンパイラに指示しているわけだが、これ以外にも#pragmaといったものがある。
これはコンパイラに与える指示を書くもので各コンパイラにより挙動は異なる。
ちなみにVC++の場合だと、#pragma comment(lib,"xxx.lib")で一々プロジェクトのリンカの
設定をしなくてもリンクを指定できる。

最終更新:2011年04月03日 11:34