使用二进制运算符“-”进行向量

时间:2018-11-25 20:34:27

标签: c++ operator-overloading

我有自己的Class Vector,我想创建一个运算符-删除数组中的最后一个元素。但是在我的实现中,我遇到了一个错误:

  

二进制“-”:向量未定义此运算符或未转换为   预定义运算符可以接受的类型。

我如何正确声明它?

class Vector {
private:
    int *vect;
    int size;
public:
    void operator--();
}
void Vector::operator--() {
    int *tmp = vect;
    size--;
    vect = new int(size);
    for (int i = 0; i < size; i++) vect[i] = tmp[i];
    delete[] tmp;
}

1 个答案:

答案 0 :(得分:-2)

我应该这样声明:

void operator--(int);

并这样实现:

void Vector::operator--(int) {
    if (size>1) size--;
    else std::cout << "Only one element in vector.\n";
}

此(int)帮助编译器更改前缀和后缀的增量或减量。

一个例子:

struct A {
    void operator --(int) { std::cout << "Postfix\n"; }
    void operator --() { std::cout << "Prefix\n"; }
};

int main()
{
    A a;
    a--;
    --a;
}

感谢@PaulMcKenzie提供了link