如何在不同类型的值之间进行选择以传递给多态函数?
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:UsersszevaDesktopBasic programmingBasic programmingSource.cpp 2316
该函数___0607sqrt运行良好(我已经检查过了(并返回一个 int,但以防万一,这是它的代码:
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
声明。
相关文章:
- 如何基于循环迭代器选择函数
- 控件不会在选择函数旁边移动
- 函数模板 - 使用同一类型调用时,使用不同的参数类型选择函数
- 使用声明类型选择函数专业化
- 如何使“确认选择”函数从“主要”取消,如果它是假的
- 在编译时根据参数大小选择函数
- 在选择函数中检测超时的客户端
- 如何选择函数模板专用化
- 如何编写用于选择函数的样板代码
- "string_literal"解析为布尔值,但不解析为 std::string,当编译器选择函数的重载版本时
- 如何在编译时根据 constexpr 结果选择函数
- 使用模板选择函数的正确版本
- 在选择函数中等待fd的异常条件是什么?
- 矢量扩展的最佳选择函数
- 根据运行时数据选择函数重载
- 选择函数一直返回-1
- 在运行时选择函数参数
- 使用SFINAE根据函数是否存在特定的过载来选择函数
- 如何在c++中使用namespace::function选择函数的单个重载
- 根据模板参数选择函数名称