конфликт между именем класса и значением перечисления: разрешимый без пространств имен?

class cippa{};

enum close{ cippa };

int main(){
new cippa();    //bad here
}

С помощью ::cippa тоже не помогает Есть ли способ решить эту проблему без enum или class в отдельном namespace?

0

Решение

Устранить неоднозначность с помощью new class cippa, Если имя класса и имя перечислителя (или функции / переменной) объявлены в одной и той же области видимости, имя класса будет скрыто. Вы можете получить к нему доступ по class name, То же самое, если имя типа является именем перечисления. Вы можете получить доступ к этому по enum name

#include <unistd.h>

// oops, close is now hidden! but we know a trick..
enum close c = cippa;
4

Другие решения

С 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 остается такой же.

1

По вопросам рекламы [email protected]