2014-11-23 67 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>()來解決;然後該參數將是一個指向函數的指針,但不是一個變量。
使用統一初始化(即{})或雙括號來避免這種情況。

相關問題