2015-05-04 79 views
1

我不能在下面的代碼中使用=運算符,因爲我遇到了compiller錯誤。我不明白什麼是錯的。無法指定向量迭代器

int CProcessData::calculateMidPoints(const std::vector<double>& xv, const std::vector<double>& yv) 
{ 
    if((0 == xv.size()) || (0 == yv.size())) 
     return 1; 

    std::vector<double>::iterator it; 

    for (it = xv.begin(); it < xv.end(); it++) 
    { 

    } 

    return 0; 
} 

我收到以下錯誤:

../src/CProcessData.cpp: In member function ‘int CProcessData::calculateMidPoints(const std::vector<double>&, const std::vector<double>&)’: 
../src/CProcessData.cpp:44:9: error: no match for ‘operator=’ (operand types are ‘std::vector<double>::iterator {aka __gnu_cxx::__normal_iterator<double*, std::vector<double> >}’ and ‘__gnu_cxx::__normal_iterator<const double*, std::vector<double> >’) 

我會aprichiate所有幫助!

回答

5

xvconst的參考,意思是隻有const成員函數可以在其中被調用。 std::vector<double>::begin()const過載返回const_iterator,並且不能用於構造iterator,因爲它會破壞const-coreectness。

所以你需要

std::vector<double>::const_iterator it; 

注意,由於C++ 11你有其他的選擇:

for (auto it = xv.begin(); it < xv.end(); it++) 

或者,如果你遍歷所有元素,基於範圍的循環可能更好:

for (auto x: xv) { ... // x is a copy 

for (auto& x: xv) { ... // x is a reference 
+2

這是正確的。如果你有C++ 11,只需要寫'for(auto it = xv.begin(); it dwcanillas

+0

我正在使用C++ 11,汽車修復了這個問題。我也意識到這些參考不能是常量,因爲我會修改它們。謝謝。 – Bremen

+0

我已經編輯了問題並跟進了 – Bremen