ページ 11

ヘッダファイル無しでいきたい

Posted: 2008年6月29日(日) 14:00
by 山下
山下と申します。皆さんのお知恵におすがりしたく参りました。

XPとVCC2008を使っております。

プログラムを複数のCPPファイルだけで構成して作ろうと考えています。
クラスがどんなメンバを持っているかをヘッダファイルに書いて、
実際の動作を他のCPPファイルに書くというのがどうにも面倒で、
クラスの概要も動作も同じCPPファイルに書きたいと思っております。

実際に3つのCPPファイルだけで書いてビルドしたところ、
「定義されていない識別子です」というエラーが山ほど出てきました。
最初にメイン関数のあるファイルからビルドしてしまい、
他のファイルで定義されているクラスが「定義されていない」ことになってしまいます。

クラスの宣言や動作をヘッダファイルとCPPファイルに分けたりせず、
複数のCPPファイルだけでプログラムを書く方法はあるのでしょうか。
どうか教えていただきたいと思います。

Re:ヘッダファイル無しでいきたい

Posted: 2008年6月29日(日) 15:48
by ibis
cppだけだと非常にややこしいです。
まぁできないことはないですが。
1つのcppと複数のhでなら簡単ですよ。
例えば以下のように。
//class1.h
class Class1{
    public:
        int function(void){
            return 1;
        }
};


//class2.h
class Class2{
    public:
        int function(void);
};
int Class2::function(void){
    return 2;
}


//main.h
#include <iostream>
#include "class1.h"
#include "class2.h"
int main(void){
    Class1 class1;
    Class2 class2;
    std::cout << class1.function();
    std::cout << class2.function();
    return 0;
}

Re:ヘッダファイル無しでいきたい

Posted: 2008年6月29日(日) 16:06
by たかぎ
必ずしもよい方法ではありませんが...
// a.cpp
#include "b.cpp"
#include "c.cpp"
のように、リンクではなくインクルードで解決すれば何とかなります。
もう少し現実的な方法としては、インクルードされる側のファイルは、.cppではなく.hppにでもしておいて、関数や非局所オブジェクトの定義はテンプレートかインライン関数だけにするのもよいでしょ。

Re:ヘッダファイル無しでいきたい

Posted: 2008年6月29日(日) 16:37
by 山下
たかぎさん、返信誠にありがとうございます。

最初に教えていただいた方法で私のやりたい事が実現できました。
ヘッダファイルにはクラスの動作は書けないと思い込んでいたので、
CPPファイルに書くことに固執していたようでした。
基本的なことでお恥ずかしいです。

これで先に進むことができます。本当にありがとうございました。

Re:ヘッダファイル無しでいきたい

Posted: 2008年6月29日(日) 18:08
by たかぎ
実現はできますが、必ずしも[color=yellow>よい方法ではない[/color]ので要注意です。