2011-05-16 73 views
1

我正在學習提升,我想重寫我的Matrix類。我想用BOOST_FOREACH來代替循環,但是我有一些操作符重載的問題。提升foreach和運算符超載

這是原始版本的重載operator/=

template<typename T> 
Matrix<T> Matrix<T>::operator /= (double varValue) 
{ 
    for (int i=0;i<this->rows;i++) 
    { 
     for (int j=0;j<this->columns;j++) 
     { 
      datavector.at(i).at(j) /= varValue; 
     } 
    } 
    return *this; 
} 

我想上面更改代碼弄成這個樣子

template<typename T> 
Matrix<T> Matrix<T>::operator /= (double varValue) 
{ 
    BOOST_FOREACH(vector<T> row,datavector) 
    { 
     BOOST_FOREACH(T item,row) 
     { 
      item /= varValue; 
     } 
    } 
} 

不過,我不斷收到一個錯誤

T:非法使用此類型爲 表達式

有什麼辦法解決這個問題嗎?

+2

這對於運算符的賦值形式返回引用,而您返回'* this'的副本更爲慣用。 – 2011-05-16 19:02:43

回答

3

您需要使用參考(基於http://www.boost.org/doc/libs/1_39_0/doc/html/foreach.html的示例)。此外,你錯過了一個return語句:

template<typename T> 
Matrix<T> Matrix<T>::operator /= (double varValue) 
{ 
    BOOST_FOREACH(vector<T> &row,datavector) 
    { 
     BOOST_FOREACH(T &item,row) 
     { 
      item /= varValue; 
     } 
    } 
    return *this; 
}