1

新しく開発したコードにヘッダーファイルを含めることをスキップしたいと思います。Visual Studioで2つのプロジェクト(またはソリューション)に取り組んでいます。どちらも相互に依存しています。仮定する、

Project_1.slnとして1つのヘッダーファイルが含まれていますMyHeader.hMyHeader.hが含まれていますenum

MyHeader.h file

   typedef enum{
    hello, hi, bye
    }MyEnum;

Inには、。Project_2.slnとは異なる名前の1つのヘッダーファイルが含まれていHeader2.hます。asfromHeader2.hも含まsame enumれます。MyHeader.hProject_1.sln

Header2.h file

   typedef enum{
    hello, hi, bye
    }MyEnum;

だから、/ FORCE:MULTIPLEを使ってみましたが、うまくいきません。列挙型の名前も、両方のプロジェクトの多くの場所で使用されているため、変更できません。

MyTest.cファイルで使用している場合は、両方を使用する必要がありますheader files

MyTest.c File

#include "Header2.h"
#include "Another.h"

ここでAnother.h、ファイルには内部的にMyHeader.hファイルが含まれています。を他のファイルに移動する代わりに、enum他の解決策はありますか?この問題を解決するにはどうすればよいですか。

4

2 に答える 2

3

enumパーツの条件付きコンパイルは次のように使用できます。

#ifndef MY_ENUM
#define MY_ENUM
   typedef enum{
   hello, hi, bye
   }MyEnum;
#endif

両方のファイルで。

于 2013-03-25T13:36:18.897 に答える
2

Header2.hの場合:

#ifndef HEADER2_H
#define HEADER2_H
...current contents of Header2.h
#endif // HEADER2_H

そしてAnother.hで:

#ifndef ANOTHER_H
#define ANOTHER_H
...current contents of Another.h
#endif // ANOTHER_H

ただし、このような2方向の依存関係があることは、一般に設計が混乱していることを示しているため、おそらく3番目のモジュールを追加して解決を試みる必要があります。


質問を読み直した後の追加:これらが実際には別々の列挙型であり、たまたま同じ名前と内容を持っている場合は、両方を別の名前空間に配置する必要があります。また、それらが同じ列挙型である場合は、1つのヘッダーファイルで定義します。これは、との両方にインクルードし、Header2.h上記のように「インクルードガード」Another.hによって保護されます。

于 2013-03-25T13:33:52.520 に答える