В программе «камень, бумага, ножницы», которую я пишу, я перечисляю три различных движения и объявляю их как класс. Однако, когда я пытаюсь написать оператор using, чтобы избежать использования оператора области видимости, он, похоже, не работает. Кто-нибудь знает почему?
enum class choice {rock, paper, scissors};
using namespace choice;
Здесь появляется сообщение об ошибке: [выбор] ‘выбор’ не является именем пространства имен.
Почему это? Я думал, что для выбора может быть пространство имен, в этом контексте.
Желаемое поведение может быть достигнуто с помощью namespace choice { enum choice { ... }; }
, Это будет работать только для значений, вы все равно должны использовать choice::choice
если вы хотите объявить переменную. Если вы также не используете auto
, конечно.
choice
не пространство имен, так using namespace choice;
не действителен Если вы не хотите использовать указатель области видимости, не используйте перечисление с областью видимости. Простое перечисление будет работать для того, что вы упомянули до сих пор:
enum choice { rock, paper, scissors };
enum class choice {rock, paper, scissors}
rock = choice::rock, paper = choice::paper, scissors = choice::scissors;
Если как показано ниже, я просто использую «typedef A :: B :: C C».
namespace A
{
class B
{
public:
enum class C : unsigned char
{
Something
};
};
}
: /
namespace choice
{
enum class type {rock, paper, scissors};
constexpr auto rock = type::rock ;
constexpr auto paper = type::paper ;
constexpr auto scissors = type::scissors;
}
int main()
{
choice::type move;
using namespace choice;
move = rock;
move = paper;
move = scissors;
return 0;
}
-__-