0

クラス Vector2D の * 演算子をオーバーロードして、次のことができるようにしようとしています。

Vector2D の左側の型、または double の左側の型などを取る演算子がないことに関するエラー メッセージが表示されます。さまざまな * オーバーロードを実装しようとして、何が間違っているのかわかりません。 . 自動型変換用のコンストラクターも追加しました。

#include <iostream>
using namespace std;

struct Vector2D 
{
public:
    // constructors
    Vector2D(double X=0, double Y=0);
    Vector2D(double number);

    // mutators
    void setX(double X);
    void setY(double Y);
    //accessors
    double getX() const;
    double getY() const;

    // overloads * operator for Vector2D * double
    const Vector2D operator *(const Vector2D& vector2) const;
    // overloads * operator for Vector2D * Vector2D -- returns dot product
    double operator *(const Vector2D& vector2);

private:
    // vector components
    double x;
    double y;
};

// overloads * operator for double * Vector2D
const Vector2D operator *(const Vector2D& vector1, const Vector2D& vector2);

int main()
{
    int x, y;
    Vector2D vecA, vecB, vecC;

    cout << "Enter x and y components (separated by a space) for vector A: ";
    cin >> x >> y;
    vecA.setX(x);
    vecA.setY(y);

    vecB = vecA * 25.0;
    cout << vecB.getX() << endl << vecB.getY() << endl;


vecC = 25.0 * vecA;
cout << vecC.getX() << endl << vecC.getY() << endl;

    return 0;
}

Vector2D::Vector2D(double X, double Y) {
    x = X;
    y = Y;
}

Vector2D::Vector2D(double number) {
    x = y = number;
}


void Vector2D::setX(double X) {
    x = X;
}

void Vector2D::setY(double Y) {
    y = Y;
}

double Vector2D::getX() const {
    return x;
}

double Vector2D::getY() const {
    return y;
}


const Vector2D Vector2D::operator *(const Vector2D& vector2) const {
    double newX = x*vector2.x;
    double newY = y*vector2.y;
    return Vector2D(newX, newY);
}

// Vector2D * Vector2D (returns dot product)
double Vector2D::operator *(const Vector2D& vector2) {
    double dotProd = (x*vector2.x) + (y*vector2.y);

    return dotProd;
}

// double * Vector2D
const Vector2D operator *(const Vector2D& vector1, const Vector2D& vector2) {
    double newX = vector1.getX()*vector2.getX();
    double newY = vector2.getX()*vector2.getY();
    return Vector2D(newX, newY);
}
4

1 に答える 1

2
const Vector2D operator *(const Vector2D& vector1, const Vector2D& vector2);

double* ベクトルの場合、これは次のようになります

const Vector2D operator *(double d, const Vector2D& vector2);

vector * double の場合は、

// overloads * operator for Vector2D * double
    const Vector2D operator *(double d) const;
于 2013-02-07T07:33:11.833 に答える