class cippa{};
enum close{ cippa };
int main(){
new cippa(); //bad here
}
С помощью ::cippa
тоже не помогает Есть ли способ решить эту проблему без enum
или class
в отдельном namespace
?
Устранить неоднозначность с помощью new class cippa
, Если имя класса и имя перечислителя (или функции / переменной) объявлены в одной и той же области видимости, имя класса будет скрыто. Вы можете получить к нему доступ по class name
, То же самое, если имя типа является именем перечисления. Вы можете получить доступ к этому по enum name
#include <unistd.h>
// oops, close is now hidden! but we know a trick..
enum close c = cippa;
С C ++ 11, если вы делаете
class cippa;
enum class close { cippa };
тогда класс cippa
и и значение enum close::cippa
не будет конфликтовать
Кстати, что по существу делает
class close{
public:
enum enum_t{cippa};
};
Но тогда вместо close
вам нужно использовать close::enum_t
чтобы получить доступ к типу перечисления.
close::cippa
остается такой же.