C++ 如何避免与其他.cxx重复枚举值
我的代码库中有大量文件。我正在尝试使用另一个库编译我的代码库,该库有一个文件a.h。 如果在我的代码库中包含一个.h文件,该文件已使用与a.h中定义的相同枚举定义了一些值,则我会遇到编译问题。例如: 在“a.h”头文件中C++ 如何避免与其他.cxx重复枚举值,c++,enums,C++,Enums,我的代码库中有大量文件。我正在尝试使用另一个库编译我的代码库,该库有一个文件a.h。 如果在我的代码库中包含一个.h文件,该文件已使用与a.h中定义的相同枚举定义了一些值,则我会遇到编译问题。例如: 在“a.h”头文件中 typedef enum mylist_s { FIRST, SECOND, THIRD, FOUR, :::::: } mylist_e; 在其他.cxx文件中,如下所示(如果其定义与mylist中的定义相同) 我知道同样的变量也有一个定义。
typedef enum mylist_s
{
FIRST,
SECOND,
THIRD,
FOUR,
::::::
} mylist_e;
在其他.cxx文件中,如下所示(如果其定义与mylist中的定义相同)
我知道同样的变量也有一个定义。
我不想用新变量更改代码库。
另外,由于a.h同时包含在.c和.cxx文件中,所以我不能使用名称空间将其封装为其他名称
我也不想更改.h文件中的名称。
有没有其他方法可以在不更改枚举值名称的情况下处理这种情况
提前感谢C++可以防止名称冲突的发生
在自定义名称空间中定义所有实现代码应该可以解决此问题。我使用了与下面提到的相同的问题:
struct mylist_s
{
enum Type
{
FIRST,
SECOND,
THIRD,
FOUR
};
};
typedef mylist_s::Type mylist_e;
这就是
namespace
s被发明的目的。您可以将FIRST=1
打包为一个。将所有代码放在名称空间中我不能使用名称空间,因为.c文件中也包含“a.h”文件。可能是我们需要在.cYou不遵循的情况下在中查找命名空间的等效项。您可以在cxx
文件中使用空格,而不是无法更改的标题。顺便说一句,您还可以选择将#include
指令放置在命名空间中。。
struct mylist_s
{
enum Type
{
FIRST,
SECOND,
THIRD,
FOUR
};
};
typedef mylist_s::Type mylist_e;