“无效转换”条件运算符错误

发布于 2024-09-24 00:42:15 字数 805 浏览 5 评论 0原文

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

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

I'm getting compile error in this line:

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

Error:

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 of following class:

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

mn_yes and mn_no are std::strings.

Compiler is MinGW (version that is distributed with code::blocks).

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

骄兵必败 2024-10-01 00:42:15

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

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

始终是一个string,但右边的:

MenuItems[i].Value

是一个int。它试图通过 const char *->string 找到一种方法,但随后它不允许 intconst char * 转换(这很好,因为它毫无意义)。只需执行:

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

或类似操作。

The two possible conditional values have to be convertible to a common type. The problem is that the left of the outer conditional:

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

is always a string, but the right:

MenuItems[i].Value

is an int. It tries to find a way by going const char *->string, but then it won't allow the int to const char * conversion (which is good, because it would be meaningless). Just do:

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

or similar.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文