首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >提速和操作者超载

提速和操作者超载
EN

Stack Overflow用户
提问于 2011-05-16 18:29:45
回答 1查看 489关注 0票数 1

我正在学习boost,我想重写我的矩阵类。而不是for循环,我想使用BOOST_FOREACH,但是我在操作符重载方面有一些问题。

这是重载操作符/=的原始版本。

代码语言:javascript
复制
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;
}

我想把上面的代码转换成这样的

代码语言:javascript
复制
template<typename T>
Matrix<T> Matrix<T>::operator /= ( double varValue)
{
    BOOST_FOREACH(vector<T> row,datavector)
    {
        BOOST_FOREACH(T item,row)
        {
            item /= varValue;
        }
    }
}

然而,我经常会犯错误

T:非法使用这种类型的表达式

有办法解决这个问题吗?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-05-16 18:41:55

您需要使用引用(基于http://www.boost.org/doc/libs/1_39_0/doc/html/foreach.html上的示例)。此外,您还丢失了一条返回语句:

代码语言:javascript
复制
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;
}
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/6021710

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档