我的程序中有一些枚举,我想在不同的类中分享它。
当我尝试在每个班级中定义它时,我得到了“重新定义”错误。
然后我搜索了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;”我得到“含糊不清”的错误。
做我想做的事的正确方法是什么?
提前致谢^ _ ^
答案 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 ); }
};