1

私は最近、オペレーターのオーバーロードを試みました。オペレーターのオーバーロードに関するこのスタックオーバーフロー ページ (http://stackoverflow.com/questions/4421706/operator-overloading) を見ました。

* 演算子をオーバーロードして、次のようなコードを実行できます

Vector2 a(2, 3);
Vector2 b(5, 8);
Vector2 c = a*b;

しかし、コンパイル時エラーが発生しますerror: invalid operands to binary expression ('basic_ostream<char, std::char_traits<char> >' and 'Vector2')

次のようなコードを実行すると、

std::cout << a*b;

ここに Vector2.cpp があります

#include "Vector2.h"

Vector2::Vector2(const float x, const float y) {
    this->x = x;
    this->y = y;
}

Vector2 &Vector2::operator*=(const Vector2 &rhs) {
    this->x *= rhs.x;
    this->y *= rhs.y;
    return *this;
}

std::ostream &operator<< (std::ostream &out, Vector2 &vector) {
    return out << "(" << vector.x << ", " << vector.y << ")";
}

ここに Vector2.h があります

#include <iostream>

class Vector2 {
    public:
        float x;
        float y;

        Vector2(const float x, const float y);
        Vector2 &operator*=(const Vector2 &rhs);
};

inline Vector2 operator*(Vector2 lhs, const Vector2 &rhs) {
    lhs *= rhs;
    return lhs;
}

std::ostream &operator<<(std::ostream &out, Vector2 &vector);

ここからどこへ行けばいいのかわからない。

4

2 に答える 2

6

問題はそれです

a*b

一時的なものを返すので、次が必要です。

std::ostream &operator<<(std::ostream &out, const Vector2 &vector);
//                                            |
//                                      notice const                                                  

一時的に非 const 参照にバインドできないためです。

于 2012-05-25T19:46:35.457 に答える
0

以下が機能するはずです。

Vector2 c = a*b;
std::cout << c;
于 2012-05-25T19:46:51.617 に答える