C++中重载运算符函数对构造函数的调用不明确



我正试图为具有以下成员和函数的类使用重载运算符:

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)"的调用不明确

您有一个重载的构造函数。这是模棱两可的。

相关内容

  • 没有找到相关文章

最新更新