Aumente la sobrecarga de cada operador y cada uno

Estoy aprendiendo boost y quería reescribir mi clase de Matrix. En lugar de bucles for, quería usar BOOST_FOREACH, sin embargo, tengo algunos problemas con la sobrecarga del operador.

Esta es la versión original del operador de sobrecarga / =

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

Quería cambiar el código anterior a algo como esto

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

Sin embargo, constantemente recibo un error.

T: uso ilegal de este tipo como expresión

¿Hay alguna manera de arreglar eso?

preguntado el 16 de mayo de 11 a las 18:05

Es más idiomático que la forma de asignación de un operador devuelva una referencia, mientras que está devolviendo una copia de *this. -

1 Respuestas

Necesita usar una referencia (basada en el ejemplo en http://www.boost.org/doc/libs/1_39_0/doc/html/foreach.html). Además, le faltaba una declaración de devolución:

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

contestado el 16 de mayo de 11 a las 22:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.