我正试图为具有以下成员和函数的类使用重载运算符:
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));
在你将此标记为重复之前,我已经检查了此链接,没有任何解决方案对我有效。
在三个可能的构造函数中,这里只应调用一个。尽管我在构造函数参数中传递了正确的类型,但是什么导致了错误?
MyVector(unsigned int n);
MyVector(unsigned int size, int *in_array=NULL);
这是模棱两可的。给定上述构造函数:
MyVector v(10);
这可以使用这两个构造函数中的任何一个,默认使用第二个构造函数的第二个参数。这就是编译器所抱怨的。编译器不知道该使用哪个构造函数。它可以使用任何一个。它不能自己决定,也不能掷硬币或其他什么。当涉及到编译C++代码时,你不能只是掷硬币,然后选择一个构造函数。
错误消息的字面意思是这样的。这是一个非常明显的编译错误:
重载"MyVector(unsigned int)"的调用不明确
您有一个重载的构造函数。这是模棱两可的。