i have a little problem and i cant figure it out.
here is a piece of code:
Code:
...
struct razlomak {
int brojnik, nazivnik;
razlomak( int br = 0, int naz = 1 ) { brojnik = br; nazivnik = naz; skratiMe(); }
...
razlomak operator+( const razlomak& b ){
razlomak vrati( brojnik*b.nazivnik + nazivnik*b.brojnik, nazivnik*b.nazivnik );
return vrati;
}
razlomak operator-( const razlomak& b ){
razlomak vrati( brojnik*b.nazivnik - nazivnik*b.brojnik, nazivnik*b.nazivnik );
return vrati;
}
razlomak operator-(){
razlomak vrati( -brojnik, nazivnik );
return vrati;
}
friend ostream& operator<<( ostream& , const razlomak& );
friend razlomak operator+( const razlomak&, const razlomak& );
friend razlomak operator-( int, const razlomak& );
bool operator==( const razlomak& b ){
if( brojnik == b.brojnik && nazivnik == b.nazivnik ) return true;
return false;
}
bool operator<=( const razlomak& b ){
if( brojnik*b.nazivnik <= nazivnik*b.brojnik ) return true;
return false;
}
bool operator<( const razlomak& b ){
if( brojnik*b.nazivnik < nazivnik*b.brojnik ) return true;
return false;
}
bool operator>=( const razlomak& b ){
if( brojnik*b.nazivnik >= nazivnik*b.brojnik ) return true;
return false;
}
bool operator>( const razlomak& b ){
if( brojnik*b.nazivnik > nazivnik*b.brojnik ) return true;
return false;
}
bool operator!=( const razlomak& b ){
if( brojnik*b.nazivnik != nazivnik*b.brojnik ) return true;
return false;
}
operator bool(){
if( brojnik != 0 ) return true;
return false;
}
bool operator!(){
if( brojnik == 0 ) return true;
return false;
}
friend bool operator==( int, const razlomak& );
friend bool operator<=( int, const razlomak& );
friend bool operator<( int, const razlomak& );
friend bool operator>=( int, const razlomak& );
friend bool operator>( int, const razlomak& );
friend bool operator!=( int, const razlomak& );
};
ostream& operator<<( ostream& r, const razlomak& x ){
r << x.brojnik << " / " << x.nazivnik;
return r;
}
razlomak operator-( int a, const razlomak& b ){
return razlomak( a*b.nazivnik - b.brojnik, b.nazivnik );
}
razlomak operator+( int, const razlomak& b ){
return razlomak( a*b.nazivnik + b.brojnik, b.nazivnik );
}
bool operator==( int a, const razlomak& b ){
if( a == b.brojnik && b.nazivnik == 1 ) return true;
return false;
}
bool operator<=( int a, const razlomak& b ){
if( a*b.nazivnik <= b.brojnik ) return true;
return false;
}
bool operator<( int a, const razlomak& b ){
if( a*b.nazivnik < b.brojnik ) return true;
return false;
}
bool operator>=( int a, const razlomak& b ){
if( a*b.nazivnik >= b.brojnik ) return true;
return false;
}
bool operator>( int a, const razlomak& b ){
if( a*b.nazivnik > b.brojnik ) return true;
return false;
}
bool operator!=( int a, const razlomak& b ){
if( a != b.brojnik || 1 != b.nazivnik ) return true;
return false;
}
int main(){
razlomak A( 3, 9 );
razlomak B( 4, 16 );
cout << A+B << endl;
cout << A+1 << endl;
cout << 1+A << endl;
cout << 1-A << endl;
cin.get();
return 0;
}
compiler is throwing me an error for ambiguous overload of operator + in
line:
Code:
cout << A+1 << endl;
but i dont know where is the problem?
compiler says that candidates are:
operator+( int, int ) ??? why ?
operator+( const razlomak& ) -> this should be ok ( after implicit conversion of 1 )
operator+( int, const razlomak& ) ???
and the strange thing in problem is that if i dont have all this operators of comparisons everthing works just fine ( so the problem is not in the code? ).