条件操作员的“无效转换”错误
-
04-10-2019 - |
题
我在这一行中遇到编译错误:
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 ::下班类的向量:
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(使用代码:: blocks分发的版本)。
解决方案
两个可能的条件值必须转换为普通类型。问题是外部条件的左侧:
(MenuItems[i].Value ? txt::mn_yes : txt::mn_no)
总是一个 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;
}
或类似。
不隶属于 StackOverflow