[Закрыть]
 
popoff.donetsk.ua
Сказки вводят детей в заблуждение. Они учат, что если ты хочешь, чтобы с тобой случилось что-то хорошее, нужно сперва заслужить это, побывав в роли достаточно серьёзной жертвы. /Эрик Берн/
Начало | Новости | Статьи | Форум | Опросы | Карта сайта | Обо мне
popoff.donetsk.ua - Форум - Основы программирования и алгоритмические языки - ООП

ООП

форумы popoff.donetsk.ua
Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Автор Сообщение
Гость Samoilov_Dmitrii url://forum.message:2818
ООП
Samoilov_Dmitrii

Возникла проблема в лр№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.
popoff
Yuri
Июл, 2004
Сообщений: 923
popoff url://forum.message:2819

Samoilov_Dmitrii

Samoilov_Dmitriiфорумы popoff.donetsk.ua

Дружественные операторы и операторы - члены класса отличаются не только тем, как они прописываются в протоколе класса, но и способом доступа к полям класса. Вам нужно изучить эти отличия и тогда Вы сможете исправить ошибку.

________________________________
Если не будет деревьев — нам нечем будет дышать, если вода загрязнится — нам нечего будет пить.

Внимание! Этот топик устарел. Пожалуйста, создайте новый топик, чтобы задать интересующий Вас вопрос.

Страницы: [1]
<< Новый  |  Старый >>  |  Ответ не возможен
Вход
Поиск[?]:
Personal Photo.сайт:
www.denisey.com.ua