'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;
首先,我只是一个初学者,如果这听起来很愚蠢,我很抱歉。
我目前正在用 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;