1

我在这一行收到编译错误:

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 是以下类的 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 一起分发的版本)。

4

1 回答 1

6

两个可能的条件值必须可转换为通用类型。问题是外部条件的左侧:

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

总是 a string,但是正确的:

MenuItems[i].Value

是一个整数。它试图通过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;
}

或类似的。

于 2010-09-18T21:47:09.780 回答