2012-02-29 3 views
0

Почему это не работает? Я пытаюсь определить оператор + для int + Date и сделать его возвратом int. Поэтому я определяю оператор + как член для определения Date + int, и я определяю оператор-член, не являющийся членом + (int, Date), но при его использовании в основном он, похоже, не использует эту функцию и генерирует ошибкуКак определить асимметричный + оператор

class Date 
{ int D; 
    int M; 
    int Y; 
public: 
    Date(); 
    Date(int, int, int); 
    ~Date(void); 
    int getDay() const; 
    Date operator+(Date) const; 
    Date operator+(int) const; 
}; 

Date::Date() 
{ 
    D = 15; 
    Y = 2012; 
    M = 2; 
} 
Date::Date(int d, int m, int y) 
{ 
    D = d; 
    Y = y; 
    M = m; 
} 
Date::~Date(void) 
{ 
}  
int Date::getDay() const 
{ 
    return D; 
} 
Date Date::operator+(Date d) const 
{ 
    return Date(d.D+D,d.M+M,d.Y+Y); 
} 
Date Date::operator+(int d) const 
{ 
    return Date(d+D,M,Y); 
} 

int operator+(int i,Date d) // This is what is wrong apparently. 
{ 
    return i + d.getDay(); 
} 

int main() 
{ 
Date d = Date(); 
int i = 7 + d; // This is what generates the error at compile time. 
cout << i; 
return 0; 
} 
+2

, что ошибка ..? – Anycorn

+2

Он компилируется и работает нормально для меня: http://ideone.com/8Jbt8. –

+0

OK Я очень глуп, по-моему, плохой. В моем коде класс Date был в отдельном файле, и я забыл включить оператор + в файл заголовка ... Здесь не было проблемы, потому что он был определен в том же коде ... Спасибо за реакции ребята! –

ответ