我正在学习boost,我想重写我的矩阵类。而不是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:非法使用这种类型的表达式
有办法解决这个问题吗?
发布于 2011-05-16 18:41:55
您需要使用引用(基于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;
}https://stackoverflow.com/questions/6021710
复制相似问题