在类上用c ++共享枚举

时间:2011-11-14 08:44:36

标签: c++ enums namespaces

我的程序中有一些枚举,我想在不同的类中分享它。

当我尝试在每个班级中定义它时,我得到了“重新定义”错误。

然后我搜索了Google,看到我应该将它放在不同的标题中。 我试图这样做并将标题包含在每个类标题中 - 我仍然遇到同样的错误。

搜索了一些,在StackOverflow中找到一个线程,说我应该将它们放在自己的命名空间中。 所以我试过了:

enum.h:

namespace my_enums
{
enum classification {DATA_STORAGE,DMS,E_COMMERCE,GAMING,RTES,SECURITY};
enum skill { CPP, JAVA, SCRIPT, WEB, SYSTEM, QA };
enum company_policy {CHEAP, LAVISH, COST_EFFECTIVE};
}

但是这仍然不起作用:首先,如果告诉包含标题的类:“using namespace my_enums;”我得到“含糊不清”的错误。

做我想做的事的正确方法是什么?

提前致谢^ _ ^

4 个答案:

答案 0 :(得分:5)

你还记得多重包容护卫吗?通常看起来像:

#ifndef MY_HEADER_FILE_H
#define MY_HEADER_FILE_H
[...code...]
#endif

并保护类型和枚举不会在编译单元中进行多次定义。

答案 1 :(得分:4)

如果您愿意,您只需要在标题中声明一次枚举,并在您使用枚举的位置包含该标题:

//enum.h:
//include guards:
#ifndef MY_ENUMS
#define MY_ENUMS
namespace my_enums
{
enum classification {DATA_STORAGE,DMS,E_COMMERCE,GAMING,RTES,SECURITY};
enum skill { CPP, JAVA, SCRIPT, WEB, SYSTEM, QA };
enum company_policy {CHEAP, LAVISH, COST_EFFECTIVE};
}
#endif

//A.h

#include "enum.h"
class A
{
   void check()
   {
      my_enums::skill val = my_enums::SCRIPT;
   } 
};

答案 2 :(得分:1)

也许你已经把它包括在一次了?

不要忘记在include

上添加“警卫”
#ifndef MY_ENUM_H_
#define MY_ENUM_H_

.... enter your enums here ...
#endif // MY_ENUM_H_

答案 3 :(得分:0)

struct Classification
{
    enum Enum{ dataStorage, dms, eCommerce, gaming, rtes, security }
};

struct Skill
{
    enum Enum{ cpp, java, script, web, system, qa };
};

struct CompanyPolicy
{
    enum Enum{ cheap, lavish, cost_effective };
};

void whatever( Classification::Enum classification ) {}

class A
    : protected Classification
{
public:
    void foo() { whatever( dataStorage ); }
};

class B
{
public:
    void foo() { whatever( Classification::dataStorage ); }
};