Сравнение строки с текстом - PullRequest
0 голосов
/ 31 декабря 2011

Когда я пытаюсь это сделать:

string msm_arg1;

...

if (msm_arg1 = "--console" )
run_console();

Я получаю:

res/functions/ReadArgs.h|40|error: could not convert ‘msm_arg1.std::basic_string<_CharT, _Traits, _Alloc>::operator= [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>, std::basic_string<_CharT, _Traits, _Alloc> = std::basic_string<char>](((const char*)"-c"))’ from ‘std::basic_string<char>’ to ‘bool’|

То, что я вижу, это то, что он пытается сравнить строку (msm_arg1) с bool, чего явно не является "--console".

Я вижу один из возможных способов: создать строку для сравнения, но с множеством возможных аргументов CLI, которая может стать грязной.

Я использую Code :: Blocks в Ubuntu 11:10 с gcc по умолчанию.

1 Ответ

5 голосов
/ 31 декабря 2011

= является оператором присваивания.

В настоящее время ваш код делает это:

   if (msm_arg1 = "--console")
//     \____________________/
//       assign to msm_arg1;
//      evaluate to new value
// 
   if (msm_arg1)
//     \______/
//      convert string to bool
//       for `if` comparison
//
// ERROR: Can't do that!

Оператор эквивалентности в C ++ равен ==:

if (msm_arg1 == "--console")

Также стоит помнить, что это сравнение с учетом регистра и что оно не будет работать вообще, если вы перестанете использовать std::string и попытаетесь сравнить два литерала.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...