Как я могу решить эту проблему с пространством имен? - PullRequest
3 голосов
/ 22 января 2012

У меня есть следующий сценарий

    namespace A {
    //...
    class A {
        public:
        static void foo();
    }
    //...
    } //namespace A

Когда я пытаюсь получить доступ к foo () из другого класса с помощью A :: foo (), компилятор жалуется на "foo не является членом A", и когдаЯ пытаюсь использовать A :: A :: foo (), он жалуется на неразрешенное внешнее.

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

Ответы [ 2 ]

3 голосов
/ 22 января 2012

вы можете использовать ::, чтобы добраться до вершины иерархии пространства имен.Итак, ваш класс: :: A :: A

edit: выше отвечает на ваш главный вопрос о пространствах имен.Но, как отмечали другие, ваша проблема в том, что вы не определили foo.Добавьте

встроенный void A :: A :: foo () {};

1 голос
/ 22 января 2012

Вы хотите использовать полную квалификацию, то есть A::A::foo() (или даже ::A::A::foo(), если вы настаиваете на действительно полной квалификации). Тот факт, что функция не разрешена, просто означает, что вы ее не определили:

inline void A::A::foo() { ... }

... или пропустите inline, если определения отсутствуют в заголовочном файле.

Кстати, я не верю в ваш аргумент «вызывает слишком много неприятностей»: если что-то по-настоящему глупо (то есть члены вашей команды согласны с тем, что это неправильно), исправьте проблему скорее раньше, чем позже! Чем дольше вы будете ждать, тем больше проблем это вызовет, и тем больше будет проблем!

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