Как использовать вложенное перечисление одного класса в качестве вложенного перечисления другого? - PullRequest
6 голосов
/ 03 августа 2011

Код ниже выдаст ошибку компиляции в строке enum en = A::en;, но он описывает, что я хочу сделать (сделать вложенное перечисление A также вложенным перечислением B).

#include <iostream>
using namespace std;
struct A
{
    enum a_en{X = 0, Y = 1};
};
struct B
{
    enum b_en = A::a_en; //syntax error
};
int main()
{
    cout << B::X << endl;
    return 0;
}

Итак, вопрос в том, как я могу сделать это в C ++?

Ответы [ 3 ]

5 голосов
/ 03 августа 2011

Поместите перечисление в базовый класс, от которого могут наследовать и A, и B

0 голосов
/ 03 августа 2011

Когда классы / структуры связаны таким образом, вы должны их наследовать.Поместите общедоступное перечисление в базовый класс, чтобы все производные (связанные) классы могли получить к нему доступ.

MFC 'CFile В классе определены перечисления, которые CStdioFile и другие производные классы могут использовать:

enum OpenFlags {
        modeRead =         (int) 0x00000,
        modeWrite =        (int) 0x00001,
...    };
0 голосов
/ 03 августа 2011

Используйте

struct B: A
{
};

вместо

struct B
{
    enum b_en = A::a_en;
};
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...