微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

“int”和“const char [11]”类型的无效操作数到二进制“operator<<”

如何解决“int”和“const char [11]”类型的无效操作数到二进制“operator<<”

首先,我只是一个初学者,所以如果这听起来很愚蠢,我很抱歉。

我目前正在用 C++ 做一个游戏,其中玩家的一举一动都对应着额外的金钱和时间扣除。每个玩家从 0 初始资金和 30 分钟的时间开始。我计划循环播放,直到两个玩家的剩余时间都为 0。

这是我的代码的一部分:

if ((groupNumber1 == 1))
{
    cout<<"You Now have a total of "<<"$"<< initialMoney += teensMoney <<" and have "<< initialTime -= teensTime <<" minutes remaining."<<endl;
}
else if ((groupNumber1 == 2))
{
    cout<<"You Now have a total of "<<"$"<< initialMoney += familyMoney <<" and have "<<initialTime -= familyTime <<" minutes remaining."<<endl;  
}

现在当我运行程序时,它给了我这个:

[错误] 'int' 和 'const char [11]' 类型的无效操作数到二进制 'operator

我可以知道错误在哪里吗? 非常感谢!

解决方法

看起来像一个优先级问题。 += 将在 之后出现

initialMoney += teensMoney --> ( initialMoney += teensMoney )

,

由于运算符优先级规则(<<+=-= 之前计算),您需要将算术表达式括起来,如下所示:

if ((groupNumber1 == 1))
{
    cout<<"You now have a total of "<<"$"<< (initialMoney += teensMoney) <<" and have "<< (initialTime -= teensTime) <<" minutes remaining."<<endl;
}
else if ((groupNumber1 == 2))
{
    cout<<"You now have a total of "<<"$"<< (initialMoney += familyMoney) <<" and have "<<(initialTime -= familyTime) <<" minutes remaining."<<endl;  
}
,

回应@user4581301 的观点 - 您确定要在此处使用 +=-= 吗?这将在打印输出后永久更改存储在这些变量中的值,我怀疑这是您想要做的。这也不会打印出正确的值 - 你明白为什么吗?

相反,只需使用老式的 +-

if (groupNumber1 == 1)
{
    cout << "You now have a total of " << "$" << initialMoney + teensMoney << " and have " << initialTime - teensTime << " minutes remaining." << endl;
}
else if (groupNumber1 == 2)
{
    cout << "You now have a total of " << "$" << initialMoney + familyMoney << " and have " << initialTime - familyTime << " minutes remaining." << endl;  
}
,

简化问题以减少我们得到的噪音

cout << a += b << endl;

由于 operator precedence,这被编译器解释为

(cout << a) += (b << endl);

b << endl 阶段没有意义。你可以通过用括号强制你想要的顺序来解决这个问题

cout << (a += b) << endl;

但我发现修改输出语句中的值会导致编程错误,因为即使您打算用 a 更新 +=,人们也希望值从输出语句中来来去去不变。如果你真的想更新 a 的值,我会用

消除所有歧义
a+=b;
cout << a << endl;

如果您不打算更新 a

cout << a + b << endl;

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。