Возникла проблема в лр№4, в которой нужно перезагрузить два оператора: оператор класса ++ и дружественный оператор += для увеличения даты.
Вот описание класса и перегружаемые операторы:
<?code class CDateAddDays
{
private:
int m_day,m_month,m_year;
int m_month_days[12];
int SetDay(int);
int SetMonth(int);
int SetYear(int);
public:
CDateAddDays();
~CDateAddDays();
void GetDateString(char *buf);
int GetDay();
int GetMonth();
int GetYear();
int SetDateString(int AYera,int AMonth,int ADay);
int SetDateString(char *buf);
void AddDays();
void operator ++();
friend void operator +=(CDateAddDays,int);
};
void operator +=(CDateAddDays,int n_days);
{
m_day+=n_days;
while(m_day>m_month_days[m_montm-1])
{
m_day-=m_month_days[m_month-1];
if(m_month<12)
m_month++;
else
{
m_month=1;
SetYear(m_year+1);
}
}
return;
}
void CDateAddDays::operator ++()
{
if(m_day<m_month_days[m_month-1])
{
m_day++;
}
else
{
m_day=1;
if(m_month<12)
m_month++;
else
{
m_month=1;
SetYear(m_year+1);
}
}
return;
}
void main()
{
CDateAddDays date1;
char buf[32];
int n_days;
while(1)
{
//Ввод даты, числа дней на которые нужно увеличить дату
//Проверка правильности ввелденных данных
if(n_day==1)
date1++;
else
date1+=n_days;
date1.GetDateString(buf);
printf("This date: %s\n",buf);
}
}
?>
Проблема состоит в том, что компилятор не распознает поля и методы, описанные в операторе +=:
ERROR: undefined symbol 'm_day'
ERROR: undefined symbol 'm_month_days'
ERROR: undefined symbol 'm_month'
ERROR: function 'SetYear' should have a prototype
ERROR: undefined symbol 'm_year'
Интересует вопрос: почему компилятор не распознает эти поля и методы, ведь, как дружественный оператор, += должен иметь доступ ко всем полям и методам класса CDateAddDays?
Если оператор += описать, как оператор класса, то программа работает
Это сообщение было отредактировано popoff 26.05.09 10:31.