【发布时间】:2016-05-06 01:37:06
【问题描述】:
我正在尝试对具有以下成员和函数的类使用重载运算符:
class MyVector {
private:
int *data;
unsigned int vector_size;
public:
MyVector();
MyVector(unsigned int n);
MyVector(unsigned int size, int *in_array=NULL);
MyVector(const MyVector& copy);
~MyVector();
void print();
// Assignment operator.
MyVector& operator=(const MyVector& v);
friend MyVector operator*(const int &lhs, MyVector &rhs);
friend MyVector operator*(MyVector &rhs, int &lhs);
MyVector operator*(MyVector &vector);
};
// Implementing operator overloading.
MyVector operator*(int &lhs, MyVector &rhs);
MyVector operator*(MyVector &lhs, int &rhs);
在我的一个运算符重载函数中,这是我想要做的:
MyVector operator*(const int &lhs, MyVector &rhs) {
unsigned int size = rhs.vector_size;
// Create new vector.
MyVector *v = new MyVector(static_cast<unsigned int>(size));
for (unsigned int i = 0; i < rhs.vector_size; i++) {
v -> data[i] = lhs * rhs.data[i];
}
return *v;
}
我收到以下错误:
MyVector_fxns.cpp: In function 'MyVector operator*(const int&, MyVector&)':
MyVector_fxns.cpp:42:60: error: call of overloaded 'MyVector(unsigned int)' is ambiguous
MyVector *v = new MyVector(static_cast<unsigned int>(size));
在您将此标记为重复之前,我已经检查了this link,但没有一个解决方案适合我。
在三个可能的构造函数中,这里应该只调用 1 个。尽管我在构造函数参数中传递了正确的类型,但导致错误的原因是什么?
【问题讨论】:
-
该代码泄漏内存。您分配了一个新对象,但您无法在返回给您的指针值上调用
delete。您的operator *应该在本地创建一个MyVector对象,并按值返回它。摆脱对new的呼叫,只需MyVector v(static_cast<unsigned int>(size));...return v;即可。
标签: c++ pointers operator-overloading ambiguous