提升 foreach 和运算符重载

发布于 2024-11-07 17:59:35 字数 807 浏览 0 评论 0原文

我正在学习 boost,我想重写我的 Matrix 类。我想使用 BOOST_FOREACH 而不是 for 循环,但是我在运算符重载方面遇到了一些问题。

这是重载运算符 /= 的原始版本

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:非法使用该类型作为 表达方式

有什么办法可以解决这个问题吗?

I'm learning boost and I wanted to rewrite my Matrix class. Instead of for loops I wanted to use BOOST_FOREACH, however I have some problems with operator overloading.

This is the original version of overloading operator /=

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

I wanted to change code above into something like this

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

However I constantly get an error

T: illegal use of this type as
expression

Is there any way to fix that?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

花落人断肠 2024-11-14 17:59:35

您需要使用参考(基于 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;
}

You need to use a reference (based on the example at http://www.boost.org/doc/libs/1_39_0/doc/html/foreach.html). Also, you were missing a return statement:

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;
}
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文