如何在不同类型的值之间进行选择以传递给多态函数?
How do I choose between values of different types to pass to a polymorphic function?
数字和字符串都可以通过<<
传递给cout。当它们具有不同的类型时,如何使用三元运算符将这两个值中的任何一个传递给它?
例如,这是合法的:
if(___0607sqrt(a) != 0) {
cout << "sqrt(" << a << ") = " << ___0607sqrt(a);
} else {
cout << "sqrt(" << a << ") = " << "?");
}
但这不是:
cout << "sqrt(" << a << ") = " << ((___0607sqrt(a) != 0) ? ___0607sqrt(a) : "?");
当我尝试时,我得到这个错误:
Error (active) E0042 operand types are incompatible ("int" and "const char *") Basic programming C:\Users\szeva\Desktop\Basic programming\Basic programming\Source.cpp 2316
函数 ___0607sqrt 运行良好(我已经检查过了)并且 returns 是一个整数,但为了以防万一,这里是它的代码:
int ___0607sqrt(int n)
{
for (int i = 1, j = 1; i < n; i++)
{
n -= j;
j += 2;
if (n == j)return i + 1;
}
return 0;
}
我读到 <<
的优先级高于 '?'和 ':',所以我将其放在括号内,但这并没有帮助。
我怎样才能输出两种不同类型中的一种而不需要将 if
语句与两个不同的 cout
语句一起使用?
这个表达式的类型是什么?
((___0607sqrt(a) != 0) ? ___0607sqrt(a) : "?")
是 int
还是 char*
?编译器也不知道。
编译器需要 :
左侧的表达式与三元中 :
右侧的表达式具有相同类型或可转换。
更好:
cout << "sqrt(" << a << ") = " << ((___0607sqrt(a) != 0) ? std::to_string(___0607sqrt(a)) : "?");
您可能需要 #include <string>
进行 std::to_string
声明。
数字和字符串都可以通过<<
传递给cout。当它们具有不同的类型时,如何使用三元运算符将这两个值中的任何一个传递给它?
例如,这是合法的:
if(___0607sqrt(a) != 0) {
cout << "sqrt(" << a << ") = " << ___0607sqrt(a);
} else {
cout << "sqrt(" << a << ") = " << "?");
}
但这不是:
cout << "sqrt(" << a << ") = " << ((___0607sqrt(a) != 0) ? ___0607sqrt(a) : "?");
当我尝试时,我得到这个错误:
Error (active) E0042 operand types are incompatible ("int" and "const char *") Basic programming C:\Users\szeva\Desktop\Basic programming\Basic programming\Source.cpp 2316
函数 ___0607sqrt 运行良好(我已经检查过了)并且 returns 是一个整数,但为了以防万一,这里是它的代码:
int ___0607sqrt(int n)
{
for (int i = 1, j = 1; i < n; i++)
{
n -= j;
j += 2;
if (n == j)return i + 1;
}
return 0;
}
我读到 <<
的优先级高于 '?'和 ':',所以我将其放在括号内,但这并没有帮助。
我怎样才能输出两种不同类型中的一种而不需要将 if
语句与两个不同的 cout
语句一起使用?
这个表达式的类型是什么?
((___0607sqrt(a) != 0) ? ___0607sqrt(a) : "?")
是 int
还是 char*
?编译器也不知道。
编译器需要 :
左侧的表达式与三元中 :
右侧的表达式具有相同类型或可转换。
更好:
cout << "sqrt(" << a << ") = " << ((___0607sqrt(a) != 0) ? std::to_string(___0607sqrt(a)) : "?");
您可能需要 #include <string>
进行 std::to_string
声明。