我正在学习提升,我想重写我的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:非法使用此类型 表达
有没有办法解决这个问题?
答案 0 :(得分: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;
}