adding of objects

0

Czesc,

wie ktosc skad rozbieznosc w danym przykladzie, gdzie mam zdefiniowany operator + orac operatory << i >> jako friend

result = object1 + object2;
std::cout << result;

dziala ok, ale ponizszy przyklad daje error:

std::cout << object1 + object2;

kod:

ostream &operator<<(ostream &out, Object &test) throw(){
    out << test.x;
    return out;
}

istream &operator>>(istream &in, Object &test) throw(int){
    int tmpInt;
    in >> tmpInt;
    x.set_x(tmpInt);
}

Modulo Modulo::operator+(const Object &test) throw(){
    Object result(x + test.x);
    return result;
}

error:

error: cannot bind non-const lvalue reference of type ‘Object&’ to an rvalue of type ‘Object’

0

Może kolejność wykonywania działań? Spróbuj:

std::cout << (object1 + object2);

Lub

std::cout << object1 << object2;
5

Twoja metoda operator<< oczekuje referencji, a Ty jej nie przekazujesz w ten sposób. Najprostszy sposób, żeby zadziałało to zmiana definicji na:

ostream &operator<<(ostream &out, const Object& test)
4
sabek napisał(a):

+error:

error: cannot bind non-const lvalue reference of type ‘Object&’ to an rvalue of type ‘Object’

Kompilator dobrze prawi. Wynikiem dodawania będzię obiekt typu Modulo (domyślam się, że dziedziczy po Object, chociaż to wygląda strasznie podejrzanie), de facto tymczasowy, bo nie przypisany do niczego. Powstałego obiektu nie da się przekazać do twojego operator >>, ponieważ zdefiniowałeś go tak, że oczekuje referencji. Obiekty tymczasowy nie może być przekazany przez referencję, która nie jest stała albo nie jest rvalue (prawostronna? r-wartość? jak to się tłumaczy?).

1 użytkowników online, w tym zalogowanych: 0, gości: 1