Повышение foreach и перегрузка операторов - PullRequest
1 голос
/ 16 мая 2011

Я учусь ускоренно, и я хотел переписать свой класс Matrix.Вместо циклов for я хотел использовать BOOST_FOREACH, однако у меня есть некоторые проблемы с перегрузкой операторов.

Это оригинальная версия оператора перегрузки / =

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: незаконное использование этого типа в качестве выражения

Есть ли способэто исправить?

1 Ответ

3 голосов
/ 16 мая 2011

Вам необходимо использовать ссылку (на примере http://www.boost.org/doc/libs/1_39_0/doc/html/foreach.html).. Также вы пропустили оператор возврата:

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;
}
...