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? ).