Доступ к перечислению в пространстве имен - PullRequest
0 голосов
/ 08 июля 2010

В шапке у меня есть такая настройка

namespace NS {
    typedef enum { GOOD, BAD, UGLY }enum_thing;
    class Thing {
        void thing(enum_thing elem);
    }
}

и, конечно, еще один файл cpp, который идет вместе с этим заголовком. Тогда у меня есть файл потока cpp, который содержит main (). В этом файле cpp я использую это перечисление для передачи в метод thing ().

using namespace NS;
int main() {
    Thing t();
    t.thing(BAD);
}

и, конечно, я получаю другие ошибки от G ++, говорящие, что BAD не был объявлен. Любая помощь о том, как я мог преодолеть эту ошибку?

Ответы [ 3 ]

5 голосов
/ 08 июля 2010

После исправления многочисленных небольших синтаксических ошибок в примере кода, он прекрасно скомпилируется для меня.Убедитесь, что вы правильно написали имена.Можете ли вы получить доступ к перечислению как NS :: BAD?Возможно, вы не включили правильный заголовок?Убедитесь, что у вас #include "FileWithEnum.h" наверху.

namespace NS {
    typedef enum { GOOD, BAD, UGLY }enum_thing;
    class Thing {
        public:
            void thing(enum_thing elem){}
    };
}


using namespace NS;
int main() {
    Thing t;
    t.thing(BAD);
    return 0;
}

Проверьте сами: http://codepad.org/Uw0XjOlF

2 голосов
/ 08 июля 2010

Можете ли вы избежать использования typedef? Просто сделай:

enum Foobar {good, bad, hello};
0 голосов
/ 08 июля 2010

должно работать.Это для меня (вариант от Mystagogue тоже должен работать).Я так понимаю, у вас были другие сообщения об ошибках?

Возможно, вам просто нужно исправить синтаксически правильный заголовок, например, поставить точку с запятой в конце класса Thing и т. Д. Когда заголовок будет в порядке,сообщение о том, что BAD отсутствует в пространстве имен, также должно исчезнуть.

...