Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/155.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ C+;中重载运算符函数对构造函数的调用不明确+;_C++_Pointers_Operator Overloading_Ambiguous - Fatal编程技术网

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

C++ C+;中重载运算符函数对构造函数的调用不明确+;,c++,pointers,operator-overloading,ambiguous,C++,Pointers,Operator Overloading,Ambiguous,我尝试对具有以下成员和函数的类使用重载运算符: 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&

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

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运算符*(常量int&lhs、MyVector&rhs){
无符号整数大小=rhs.vector_大小;
//创建新的向量。
MyVector*v=新的MyVector(静态_转换(大小));
for(无符号整数i=0;idata[i]=lhs*rhs.data[i];
}
返回*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\u fxns.cpp:在函数'MyVector operator*(const int&,MyVector&')中:
MyVector_fxns.cpp:42:60:错误:重载“MyVector(unsigned int)”的调用不明确
MyVector*v=新的MyVector(静态_转换(大小));
在您将此标记为副本之前,我已经检查过,没有任何解决方案对我有效

在三个可能的构造函数中,这里只应调用1。尽管我在构造函数参数中传递了正确的类型,但是什么导致了错误

   MyVector(unsigned int n);
   MyVector(unsigned int size, int *in_array=NULL);
这是不明确的。鉴于上述施工人员:

MyVector v(10);
这可以使用这两个构造函数中的任意一个,第二个构造函数的第二个参数为默认值。这就是编译器所抱怨的。编译器不知道使用哪个构造函数。它可以使用任何一个。它不能自己决定,也不能掷硬币或其他东西。当编译C++代码时,你不能只翻转一个硬币,而是选择一个构造函数。 错误消息逐字说明了这一点。这是一个非常明显的编译错误:

重载“MyVector(unsigned int)”的调用不明确


您有一个重载构造函数。而且它是不明确的。

如果只有一个参数,为什么还要麻烦第二个构造函数呢?我猜想,删除<代码>默认值的iNoxAlxy/Cux>变量将修复它,但我假设它会自动考虑第一个构造函数,因为只有一个参数。@ ObjjultJ,为什么在第二个构造函数中允许第二个参数可选,如果没有第二个参数,它是否应该使用第一个构造函数?因为第二个构造函数也可以用一个参数调用。如果您声明了一个默认参数,但没有提供它,那么您仍然可以在没有它的情况下调用函数或构造函数。C++就是这样工作的。如果希望所有带一个参数的构造函数调用都调用第一个构造函数,而所有带两个参数的构造函数调用都调用第二个构造函数,则必须去掉“=null”默认值。@Objective-J错误消息有重要作用。如果您想让第二个参数成为默认值,那么您在仅用一个参数定义构造函数时犯了一个错误。拥有这两个构造函数是没有意义的,所以这是不允许的。这段代码会泄漏内存。您分配了一个新对象,无法对返回给您的指针值调用
delete
。您的
操作符*
应该在本地创建
MyVector
对象,并按值返回它。摆脱对
new
的调用,只需
myvectorv(static_cast(size));。。。返回v是您所需要的全部。