2014-10-21 6 views
0

Я пытаюсь найти элемент перечисления в векторе, по-видимому, как некоторая ошибка оператора. Любые указания, пожалуйста?найти в векторе enum

Вот перечисление

enum RESPONSE{ 
GAME_START='P', 
GAME_HELP='H', 
GAME_QUIT='Q' 
} 

Здесь использование

std::string s = getinputChar(); //this returns a string with a one character. 

std::vector<RESPONSE> responces; 
responces.push_back(GAME_START); 
responces.push_back(GAME_QUIT); 

std::vector<RESPONSE>::iterator it = find (responces.begin(), responces.end(), s.c_str()); 

Ошибка:

error C2678: binary '==' : no operator found which takes a left-hand operand of type 'RESPONSE' (or there is no acceptable conversion)

+0

@AdrianoRepetti Каждое перечисление является 'RESPONSE'. Это будет способствовать использованию 'int', если оно используется в контексте, где' RESPONSE' неприемлем. –

+0

@JamesKanze довольно прав! –

ответ

0

c_str() возвращает const char *, но ваш вектор содержит перечисление. Вы хотите сравнить первого персонажа? Попробуйте find(responces.begin(), responces.end(), static_cast<RESPONSE>(s[0])). Это будет работать, если вы добавите перечисление со значением больше, чем полукокса

+0

Все ответы работают. Но это тот, которого я ожидал. –

+0

Он также перестает работать, если ключевому символу предшествует пустое пространство, или если строка пуста. –

+0

@JamesKanze Я доверяю его документации '// это возвращает строку с одним символом.' :) –

1

Вы могли бы принять их вклад в char вместо string

char s = getinputChar(); 

Тогда вы можете изменить ваш find к

std::vector<RESPONSE>::iterator it = find (responces.begin(), responces.end(), static_cast<RESPONSE>(s)); 
+1

Это выглядит как лучший ответ для меня. Если функция называется 'getInputChar', она должна возвращать' char', а не 'std :: string'. –

1

Попробуйте это:

RESPONSE r = (RESPONSE) s[0]; // conversion from input string to RESPONSE 
std::vector<RESPONSE>::iterator it = find (responces.begin(), responces.end(), r); 
+0

Вы должны использовать 's [0]', поскольку это проще, и компилятор может добавить проверку границ. –

+0

ДА, СПАСИБО @NeilKirk –

Смежные вопросы