我在使用[]运算符分配值时遇到问题,我有2个不同的错误,

“二进制'=':找不到使用'double'类型的右侧操作数的运算符(或者没有可接受的转换)”

没有运算符“=”与这些操作数匹配。

我在这里想念什么吗?

header

 Class CMyVector{
 public:
 double operator[](const int index) const;
 double & operator[](const int index);
 CMyVector operator+(const CMyVector mv1);
 }

cpp
double CMyVector::operator[](const int index) const
{
    return arr[index];
}

double & CMyVector::operator[](const int index)
{
    return arr[index];
}

CMyVector CMyVector::operator+(const CMyVector mv1)
{
    CMyVector *retval = new CMyVector();

    retval[0] = arr[i] + mv1[i];

    return *this;
}

最佳答案

CMyVector::operator+似乎很奇怪。

1. retval是一个指针(即CMyVector *),那么retval[i]将是CMyVector,这对retval[i] = arr[i] + mv1[i];毫无意义。您可能是(*retval)[i] = arr[i] + mv1[i];。顺便说一句:这是内存泄漏,因为您没有delete指针。

2.您new一个指针retval,然后为其设置值,最后返回*this?这没有道理。您可能的意思是:

CMyVector CMyVector::operator+(const CMyVector& mv1)
{
    CMyVector retval;
    for (int i = 0;i < dim;i++)
    {
         retval[i] = arr[i] + mv1[i];
    }
    return retval;
}

关于c++ - 重载支架运算符(operator)分配,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/36479192/

10-14 05:30