Ich versuche, einen überladenen Operator für eine Klasse mit den folgenden Mitgliedern und Funktionen zu verwenden:Mehrdeutige Aufruf Konstruktor von überladener Operator-Funktion in 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);
Innerhalb einem meiner Bedienfunktionen Überlastung, ist es das, was ich versuche zu tun:
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;
}
ich die folgende Fehlermeldung erhalten:
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));
Bevor Sie dies als Duplikat markieren, habe ich this link überprüft und keine der Lösungen funktionierte für mich.
Von den drei möglichen Konstruktoren sollte nur 1 hier aufgerufen werden. Was verursacht den Fehler, obwohl ich den korrekten Typ im Konstruktorargument übergebe?
Dieser Code verliert Speicher. Sie haben ein neues Objekt zugewiesen, und Sie haben keine Möglichkeit, 'delete' für den zurückgegebenen Zeigerwert aufzurufen. Ihr 'operator *' sollte lokal ein 'MyVector'-Objekt erstellen und es nach Wert zurückgeben. Entfernen Sie den Aufruf von 'new', nur' MyVector v (static_cast (size)); ... return v; 'ist alles was Sie brauchen. –
PaulMcKenzie