【发布时间】:2016-09-28 16:35:00
【问题描述】:
以下与条件表达式相关的代码:
typedef unsigned char uchar;
uchar data[100];
// assign something to array[] here
uchar *start = data;
uchar *end = data+100;
bool cond = f(); // f() could return true or false
uchar *itr = std::upper_bound(start, end, uchar(20),
cond? std::greater<uchar>() : std::less<uchar>());
遇到这样的错误:
error: operands to ?: have different types
‘std::greater<unsigned char>’ and ‘std::less<unsigned char>’
这是编译器错误吗?在我的直觉中,这两个函子应该具有相同的类型。
【问题讨论】:
-
那是什么类型的?
-
我刚刚将
char *itr更改为uchar *itr。我以为那是意图。 (这与主要问题无关,但编译这段代码很重要) -
@Aaron:是的,这是一个错字。