无法调用重载的运算符C ++

时间:2015-01-05 16:45:28

标签: c++ operator-overloading

我无法调用对我的两个包装器对象求和的重载+运算符。

Vector.cpp的代码:

//Overload operators
Vector operator + (const Vector & lhc, const Vector& rhc)
{

    long shorterLength;
    if(lhc.numberOfElements > rhc.numberOfElements)
    {
        shorterLength = rhc.numberOfElements;
    }
    else
    {
        shorterLength = lhc.numberOfElements;
    }

    //Vector *vector = new Vector(shorterLength, true);

    Vector vector;
    for(int i = 0; i<shorterLength; i++)
    {
        vector.container.push_back(lhc.container[i]+ rhc.container[i]);
    }

    return vector;
}

在Vector.h中

Vector(long numerOfElements, bool isEmpty);
    Vector();
    ~Vector();
    Vector operator + (const Vector& rhc);

在main.cpp中。我无法在我的Vector实例上调用+运算符,将“无效运算符转换为二进制表达式Vector * Vector *”错误。

  Vector *a = new Vector(10, false);
    a->displayElements();

    Vector *b = new Vector(5, false);
    b->displayElements();
    Vector c;


    //c = a + b
    //If I comment this out I get c = a + b;
  //  Invalid operator to binary expression Vector * Vector *

2 个答案:

答案 0 :(得分:4)

您正在尝试添加两个指针。如果你真的想因为某种原因想要使用new,那么你需要取消引用指针

c = *a + *b;

但你几乎肯定会更好地使用对象

Vector a(10, false);
Vector b(5, false);
Vector c = a + b;

然后决定重载运算符应该是成员(当你声明它)还是非成员(如你定义的那样),并使声明和定义匹配。

答案 1 :(得分:1)

首先,您有两个operator+重载。

其次,您在指针上使用operator+,并且无法添加指针。

c = a + b;   <<<< Adding pointers doesn't make sense.

您可以执行以下操作: -

Vector a(10, false);
Vector b((5, false);
Vector c = a + b;