首页 > 解决方案 > 在 myVector 类中重载运算符 + 时出错

问题描述

我知道这个问题在这里和互联网上出现过很多次,但即使通过在这个网站上搜索,我也不能在课堂上超载+运算符。myvec奇怪的是我可以重载=运算符,但是当我编写运算符的声明和定义时+,我得到了一个错误。

更具体地说,我将运算符声明为

myvec& myvec::operator+(const myvec& v, const myvec& w)

定义是

myvec& myvec::operator +(const myvec& v, const myvec& w)
{
    int d = v.size();
    myvec x(d);
    for (int i = 0; i < d; i++) {
        x(i) = v(i)+w(i);
    }
    return x;
}

在下面我的小班:

#include <iostream>
#include <cmath>

using namespace std;

class myvec {
private:
    int dimension;
    double* data;

public:
    myvec(int dim);
    myvec(const myvec& v);
    ~myvec();

    int size() const;
    void Print();
    double& operator ()(int i);
    myvec& operator =(const myvec& v);
    myvec& operator +(const myvec& v, const myvec& w);
};


myvec::myvec(int dim)
{
    dimension = dim;
    data = new double[dim];

    for (int i = 0; i < dimension; i++) {
        data[i] = 0.0;
    }
}

myvec::myvec(const myvec& v)
{
    int dimensione = v.size();
    data = new double[dimensione];
    for (int i = 0; i < dimensione; i++) {
        data[i] = v.data[i];
    }
}

myvec::~myvec()
{
    dimension = 0;
    delete[] data;
    data = NULL;
}

int myvec::size() const
{
    return dimension;
}

double& myvec::operator ()(int i)
{
    return data[i];
}

myvec& myvec::operator =(const myvec& v)
{

    int dim  = v.size();
    for (int i = 0; i < dim; ++i) {
        data[i] = v.data[i];
    }
    return *this;
}

myvec& myvec::operator +(const myvec& v, const myvec& w)
{
    int d = v.size();
    myvec x(d);
    for (int i = 0; i < d; i++) {
        x(i) = v(i)+w(i);
    }
    return x;
}

void myvec::Print()
{
    for (int i = 0; i < dimension; i++) {
        cout << data[i]<<endl;
    }
}

编译器给了我错误:

testmyvec.cpp.cc:77:59: error: ‘myvec& myvec::operator+(const myvec&, const myvec&)’ must take either zero or one argument

它显然是指+操作员的定义。如何修复它以使操作员超载?

标签: c++classoperator-overloading

解决方案


编译器已经给了你答案:“必须接受零或一个参数”。

声明应该是myvec operator+(const myvec&);并且在您使用的定义中this是这样的:

myvec myvec::operator +(const myvec& w)
{
    int d = v.size();
    myvec x(d);
    for (int i = 0; i < d; i++) {
        x(i) = (*this)(i) + w(i);
    }
    return x;
}

并且不要返回对本地对象的引用。


推荐阅读