【发布时间】:2018-11-25 20:34:27
【问题描述】:
我有自己的向量类,我想创建一个运算符——删除数组中的最后一个元素。但是在我的实现中我得到了一个错误:
二进制“--”:向量没有定义这个操作符或转换为 预定义运算符可接受的类型。
如何正确声明?
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;
}
【问题讨论】:
-
你是怎么声明的?
-
@tkausl void operator--();
-
在问题中发布您的代码。
-
@pookeeshtron Please read the following.
-
即使你修正了声明,实现仍然是错误的。
new int(size)需要改为new int[size]。并且代码没有考虑size为0 的可能性,或者new抛出异常的可能性。实际上,根本不需要重新分配vect,如果您只是将capacity成员添加到类中,那么减少size本身就足够了,因此分配的大小可以不同于填充的大小。跨度>