MSVC утверждает, что публичный член недоступен - PullRequest
0 голосов
/ 11 февраля 2019

У меня есть такая структура с открытым членом enum:

namespace A {
    struct Events {
        enum CUES { CLEAR, DATA, ERROR };
        virtual void Event(CUES) = 0;
    protected:
        ~Events() {}
    };
}

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

Вот код и ошибка:

namespace B {
    class Base: A::Events{
        void Event(Events::CUES){}
    protected:
        Events::CUES lastCue;
    };

    class Impl: public Base {
        bool test(){
            return (lastCue == A::Events::CLEAR);
        }
    };
}

somefile(19): error C2247: 'A::Events::CLEAR' not accessible because 'B::Base' uses 'private' to inherit from 'A::Events'

somefile(3): note: see declaration of 'A::Events::CLEAR'

Как получить доступ к общедоступному перечислению?

Обновление: gcc Кажется, скомпилировать это без проблем.

1 Ответ

0 голосов
/ 11 февраля 2019

Решение, которое я придумала, состоит в том, чтобы изменить маршрут доступа через глобальное пространство имен:

namespace B {
    class Impl: public Base {
        bool test(){
            return (lastCue == ::A::Events::CLEAR);
        }                   // ^^
    };
}

Это позволяет избежать любых изменений на Base.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...