1

私は自分のプログラムを単一の cpp ファイルに書き始めましたが、今はコードが多すぎるので、分割することにしました。しかし、問題は、多くの定数、インクルード、およびすべてを 1 か所にまとめたい他のいくつかのものがあることです。残念ながら、それらはすべてコードの依存部分で必要とされるため、通常のインクルード ファイルでは実行できません。

何が私を助けますか?

(私は Linux で書き、コマンドラインでコンパイルします)

(私の英語でごめんなさい:))

4

2 に答える 2

2

Hristo が言ったように、通常はヘッダー ファイルに定義を記述し、ソース コード ファイルに実装を記述する必要があります。

ただし、質問に答えるには:

しかし、問題は、多くの定数、インクルード、およびすべてを 1 か所にまとめたい他のいくつかのものがあることです。

私が通常行ったことは、「common.h」または「defs.h」のような名前の単一のファイルを作成することです (私は Doom からアイデアを取り入れました...)。そのファイルには、全体で必要な多くの定義が含まれていますプログラム。定数を使用している場合は、次のようにヘッダー ファイルで定数を宣言します。

    extern const int MAX_SOMETHING;
    extern const bool TRUTH_VALUE;

これらの定数を定義する補完的なソース ファイル (defs.cpp または common.cpp) を作成します。

    const int MAX_SOMETHING = 5;
    const bool TRUTH_VALUE = true;

そのため、common/defs.h を他のソース ファイルにインクルードすると、extern キーワードによって、定義が別のソース ファイル (common/defs.cpp 内) にあることがソース ファイルに伝えられるため、そこに定義が見つかります。であり、common/defs.cpp を含めた場所ならどこでも使用できます。

于 2012-06-01T22:25:36.080 に答える
1

ほとんどのプロジェクトでは、定義はヘッダー ファイルにあり、実装はソース コード ファイルにあります。ただし、テンプレート関数の実装は、それらを使用するすべてのソース ファイルに表示される必要があるため、ヘッダー ファイルに含まれている必要があります。変数はヘッダー ファイルでexternとして定義し、ソース ファイルで宣言する必要があります。定数は、ヘッダー ファイルstaticで宣言することもできます。

例:

フー。

#pragma once
class Foo{
    public:
        void bar();
        template<class Type>
        void increment(Type &a){
            ++a;
            return;
        }
};
extern Foo theFoo;
static const int five=5;

Foo.cpp

#include "Foo.h"
#include <iostream>
void Foo::bar(){
    std::cout<<"Foo::bar called"<<std::endl;
    return;
}
Foo theFoo;

メイン.cpp

#include "Foo.h"
#include <iostream>
int main(){
    theFoo.bar();
    std::cout<<five<<std::endl;
    return 0;
}
于 2012-06-01T18:31:31.180 に答える