1

我想跳过在我新开发的代码中包含头文件。我正在 Visual Studio 中从事两个项目(或解决方案)。两者都相互依赖。认为,

Project_1.sln包含一个头文件作为MyHeader.h. MyHeader.h包含一个enum

MyHeader.h file

   typedef enum{
    hello, hi, bye
    }MyEnum;

InProject_2.sln包含一个不同名称的头文件,如Header2.h. Header2.h还包含same enumas MyHeader.hfrom Project_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

在另一个.h 中:

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

但是有这种 2-way 依赖通常是设计混乱的标志,你应该尝试解决它,可能通过添加第三个模块。


重新阅读问题后的补充:如果这些实际上是单独的枚举,恰好具有相同的名称和内容,那么您应该将两者放入不同的命名空间。如果它们是相同的枚举,则将其定义在一个头文件中,您将其包含在两个Header2.hAnother.h中,并且还受"include guard" 保护,如上所示。

于 2013-03-25T13:33:52.520 回答