私は自分のプログラムを単一の cpp ファイルに書き始めましたが、今はコードが多すぎるので、分割することにしました。しかし、問題は、多くの定数、インクルード、およびすべてを 1 か所にまとめたい他のいくつかのものがあることです。残念ながら、それらはすべてコードの依存部分で必要とされるため、通常のインクルード ファイルでは実行できません。
何が私を助けますか?
(私は Linux で書き、コマンドラインでコンパイルします)
(私の英語でごめんなさい:))
私は自分のプログラムを単一の cpp ファイルに書き始めましたが、今はコードが多すぎるので、分割することにしました。しかし、問題は、多くの定数、インクルード、およびすべてを 1 か所にまとめたい他のいくつかのものがあることです。残念ながら、それらはすべてコードの依存部分で必要とされるため、通常のインクルード ファイルでは実行できません。
何が私を助けますか?
(私は Linux で書き、コマンドラインでコンパイルします)
(私の英語でごめんなさい:))
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 を含めた場所ならどこでも使用できます。
ほとんどのプロジェクトでは、定義はヘッダー ファイルにあり、実装はソース コード ファイルにあります。ただし、テンプレート関数の実装は、それらを使用するすべてのソース ファイルに表示される必要があるため、ヘッダー ファイルに含まれている必要があります。変数はヘッダー ファイルで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;
}