2

你能告诉我有什么问题吗?:操作员告诉错误:

 C2446: ':' : no conversion from 'int' to 'std::basic_ostream<_Elem,_Traits>'   
           c:\documents\visual studio 2005\projects\8.14\8.14\8.14.cpp  36

编码:

int _tmain(int argc, _TCHAR* argv[])
{
int B;
int A=(6,B=8);
bool c = true;
cout << endl << B;
while (B != 100)
{
cout << "qgkdf\n";
(A<B) ? (c = 100, B=100, cout << "!!!") : (A = 100);
A--;
}
_getch();
return 0;
}
4

4 回答 4

3

条件运算符的两个操作数的类型需要相同。

(A<B) ? (c = 100, B=100, cout << "!!!") : (A = 100);

的类型c = 100, B=100, cout << "!!!"是 的类型cout << "!!!",即std::ostream

的类型A = 100int

这两种类型不匹配,因此出现错误。

编辑:逗号运算符返回最后一部分的值。您不能添加一个 int,例如:

(A<B) ? (c = 100, B=100, (cout << "!!!"), 42) : (A = 100);
//                                      ^^^^

现场示例在这里

于 2013-07-20T10:08:01.610 回答
2

如果您要编写混淆代码,请确保您知道如何使用强制转换,因为解决方案显然是将结果cout << "!!!"转换为int

(A<B) ? (c = 100, B=100, reinterpret_cast<int>(cout << "!!!")) : (A = 100);
于 2013-07-20T10:09:49.583 回答
1

这是对 ?: 运算符的公然滥用。使用if声明。这就是他们的目的。

于 2013-07-20T12:46:52.033 回答
1

由于未使用返回值,因此将双方都设为无效可能更清楚。
虽然不如使用一个好的旧“如果”那么清楚。

于 2013-07-20T10:46:27.087 回答