Ошибка «Неверное преобразование» с условным оператором - PullRequest
1 голос
/ 19 сентября 2010

Я получаю ошибку компиляции в этой строке:

cout << (MenuItems[i].Checkbox ? (MenuItems[i].Value ? txt::mn_yes : txt::mn_no) : MenuItems[i].Value)

Ошибка:

menu.cpp|68|error: invalid conversion from 'int' to 'const char*'
menu.cpp|68|error:   initializing argument 1 of 'std::basic_string<_CharT, _Traits, _Alloc>::basic_string(const _CharT*, const _Alloc&) [with _CharT = char, _Traits = std::char_traits<char>, _Alloc = std::allocator<char>]'

MenuItems is std :: vector следующего класса:

class CMenuItem
{
public:
string Name;
int Value;
int MinValue, MaxValue;
bool Checkbox;
CMenuItem (string, int, int, int);
CMenuItem (string, bool);
};

mn_yes и mn_no - это std :: strings.

Компилятор - MinGW (версия, которая распространяется с code :: blocks).

1 Ответ

6 голосов
/ 19 сентября 2010

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

(MenuItems[i].Value ? txt::mn_yes : txt::mn_no)

всегда есть string, а справа:

MenuItems[i].Value

- это int.Он пытается найти путь, перейдя const char * -> string, но тогда он не допустит преобразования int в const char * (что хорошо, потому что это будет бессмысленно).Просто сделайте:

if(MenuItems[i].Checkbox)
{
    cout << (MenuItems[i].Value ? txt::mn_yes : txt::mn_no);
}
else
{
    cout << MenuItems[i].Value;
}

или аналогичный.

...