Можно ли использовать имя класса, который объявляется в пространстве имен без пространства имен :: - PullRequest
1 голос
/ 08 апреля 2020

Можно ли использовать имя класса, которое объявляется в пространстве имен без пространства имен?

Я пытался так:

//MyClass.h
namespace MyNamespace {
  class MyClass;
}

class MyNamespace::MyClass {
  public:
    /* ... */
}

//MyOtherClass.cpp
#include "MyClass.h"
using namespace MyNamespace;

void MyOtherClass::MyFunction() {
  MyClass *myClass = new MyClass;
}

Но это не работает. Complier говорит: «Мой класс неоднозначен».

Я думаю, этот код будет работать:

//MyOtherClass.cpp
#include "MyClass.h"
using namespace MyNamespace;

void MyOtherClass::MyFunction() {
  MyNamespace::MyClass *myClass = new MyClass;
}

Но мне это неудобно. Я хочу использовать «MyClass» без «MyNamespace ::».

Возможно ли это?

Спасибо за вашу помощь.

Я получил ответ : Это невозможно. Классы C ++ имеют собственное пространство имен по умолчанию. Если я объявляю MyNamespace, то с MyClass связаны два пространства имен. Если я использую MyClass, не выбирая, какое пространство имен я хочу использовать, компилятор будет неоднозначно чувствовать, какое пространство имен я действительно хочу использовать. Так что это скажет мне: «MyClass неоднозначно».

1 Ответ

0 голосов
/ 08 апреля 2020

, если приведенный ниже код находится в одном и том же файле .h (вы на самом деле не уточнили) У вас должно быть что-то подобное в MyClass.h

    namespace MyNamespace {
      class MyClass
      {
       public:
        // constructor, methods,...
      }; // end of class declaration
    } // end of namespace

и соответствующее определение в MyClass. cpp

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