Совместное использование перечислений в C ++ над классами - PullRequest
3 голосов
/ 14 ноября 2011

У меня есть несколько перечислений в моей программе, и я хочу поделиться ими между различными классами.

Когда я попытался определить его в каждом классе, я получил ошибку "переопределения".

Затем я поискал в 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 ]

5 голосов
/ 14 ноября 2011

Помните ли вы охранник множественного включения? Обычно выглядит так:

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

и защищает типы и перечисления от заданного умножения в единице компиляции.

4 голосов
/ 14 ноября 2011

Вам нужно только один раз объявить свои перечисления в заголовке, если хотите, и включить этот заголовок, где вы используете перечисления:

//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;
   } 
};
1 голос
/ 14 ноября 2011

Может быть, вы включили его более одного раза?

Не забудьте добавить "охранники" на include

#ifndef MY_ENUM_H_
#define MY_ENUM_H_

.... enter your enums here ...
#endif // MY_ENUM_H_
0 голосов
/ 14 ноября 2011
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 ); }
};
...