したがって、私が何をしようとも、同じプロジェクト内の複数のソース コード ファイルに同じヘッダー ファイルをインクルードした結果、Dev C++ が多数の複数定義エラーを吐き出すことを避けられないようです。すべてのソース コードを 1 つのファイルにダンプし、ヘッダーを 1 回だけインクルードする必要はありません。ファイルが非常に長くなり、管理が難しくなるためです。
本質的に、これは何が起こっているかです:
#ifndef _myheader_h
#define _myheader_h
typedef struct MYSTRUCT{
int blah;
int blah2; } MYSTRUCT;
MYSTRUCT Job_Grunt;
MYSTRUCT *Grunt = &Job_Grunt;
MYSTRUCT Job_Uruk;
MYSTRUCT *Uruk = &Job_Grunt;
int Other_data[100];
void load_jobs();
#endif
Cpp ファイルの例 (ほとんどすべて次のようになります):
#include "myheader.h"
void load_jobs(){
Grunt->blah = 1;
Grunt->blah2 = 14;
Uruk->blah = 2;
Uruk->blah2 = 15;
return; }
この 1 つのヘッダーを含む約 5 つの cpp ファイルがあり、それぞれがヘッダー ファイルにある異なるタイプの構造体を扱っていることに注意してください。この例では、実際のヘッダー ファイルにはさらに多くのメンバーを持つ約 4 ~ 6 個の異なる構造体があるのに、いくつかのメンバーを含む構造体は 1 つしかありませんでした。これを含めたすべてのファイルは、この例で見られるのと同じ式に従います。
これで、ヘッダー ガードは個々の cpp ファイルがヘッダー ファイルを複数回インクルードするのを防ぐだけであることがわかりました。何が起こっているように見えるかは、コンパイラが各 cpp の開始時にインクルードを読み取るときに、ヘッダー ファイルを最初から定義し直して、次の行と行を吐き出すことです。
Multiple Definition of Uruk, first defined here
Multiple Definition of Job_Uruk, first defined here
Multiple Definition of Grunt, first defined here
Multiple Definition of Job_Grunt, first defined here
Multiple Definition of Other_data, first defined here
ヘッダーを含むプロジェクト内のほぼすべての cpp ファイルで、このセットが表示されます。構造体と構造体変数の定義をcppファイルに移動しようとしましたが、他のcppファイルはそれらを表示したり操作したりできません。プロジェクト内のすべてのファイルが機能する必要があるため、これは非常に重要ですこれらの構造体で。
しかし、この問題で最も紛らわしい部分については、もう少し説明が必要です。
このプロジェクトでこれらの複数のファイルをセットアップする方法は、私が作業している本、John S. Harbour による All In One Game Programming と同じです。同じプロジェクト内の複数の cpps によって含まれる 1 つのヘッダーを要求する本のサンプル プロジェクトのファイルを作成したときに、まったく同じ問題に遭遇しました。
私はそれらを本から一語一語入力することができました、そして私は一語一語を意味します...
そして私はプロジェクトのすべてのcppについて一連のMDエラーを得るでしょう.
本に付属の CD からサンプル プロジェクトを読み込んだ場合、問題なくコンパイルおよび実行されますが、ファイル自体とプロジェクト オプションは、私が作成したものとまったく同じように見えます。
独自のプロジェクト ファイルを作成し、サンプル プロジェクトのソース ファイルとヘッダー ファイルを CD から追加しただけでも、これもコンパイルおよび実行されますが、それらと私の違いはわかりません。
それで、私は自分のプロジェクト ファイルを作成し、空のソース ファイルとヘッダー ファイルを作成してそれに追加し、対応するはずの CD 上のファイルから内容をコピー アンド ペーストして埋めてみました (同じ働いていたもの)。確かに、私は同じことを得るでしょう...何行ものMDエラーメッセージ。
私は絶対に困惑しています。これらすべての方法を何度も繰り返しましたが、コードの入力ミスやミスコピーではないことを確信しています。事前に作成されたファイル自体に何かがあるようです。いくつかの構成設定または私が完全に欠落している何か...それにより、自分で作成したファイルは正しくコンパイルされませんが、正しくコンパイルされます。