2014-11-23 56 views
0

我有一个简单的代码两行“无效操作数为二进制表达......”当试图比较regex_iterators

std::regex_iterator<std::string::const_iterator> 
    regit (attributesStart, _curIter, _attributeRegex), 
    regend(std::regex_iterator<std::string::const_iterator>); 

while (regit != regend) 
{ 
    // [...] 
} 

编译器抱怨的while线,说

无效的操作数到二进制表达式('std :: regex_iterator'和'std :: regex_iterator(*)(std :: regex_iterator)')

任何想法,为什么这是?

+1

MVP? 'regend(std :: regex_iterator )'没有声明一个对象,它声明了一个函数。你需要'regend(std :: regex_iterator ())'。 – 2014-11-23 22:28:21

回答

4
int main() 
{ 
    int i = 0, f(int); 
    f(i); 
} 

int f(int) {return 0;} 

Is valid code。在main之内有f的块范围函数声明,在相同的初始声明符列表中为i,这是通常的int

您的情况也是如此,只是以更复杂的方式。这里声明的函数是regend,并且具有类型为std::regex_iterator<..>的参数 - 您也可以通过检查错误消息来推导出该参数。
该问题不会通过使用std::regex_iterator<std::string::const_iterator>()来解决;然后该参数将是一个指向函数的指针,但不是一个变量。
使用统一初始化(即{})或双括号来避免这种情况。

相关问题