Можно ли использовать имя класса, которое объявляется в пространстве имен без пространства имен?
Я пытался так:
//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
неоднозначно».