'int' 和 'const char [11]' 类型的无效操作数转换为二进制 'operator<<'

invalid operands of types 'int' and 'const char [11]' to binary '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<<'

请问哪里出错了? 非常感谢!

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

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;  
}

看起来像是一个优先级问题。 += 将在 <<

之后出现

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

呼应@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;