Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 17.01.2011, 17:24   #1
Gundos
Новичок
Джуниор
 
Регистрация: 17.01.2011
Сообщений: 3
По умолчанию Перезагрузка оператора и приватные члены класса.

В архиве 3 файла: класс, реализация функций класса и main. Почему в перезагрузке оператора >> компилятор ругается так:

'std::string Phone::areaCode' is private
within this context (строка 17, т.е "input >> setw(3) >> number.areaCode;")

И так же к строкам 19 и 21. Если убрать константу из объявления в перезагрузке <<, то начнет так же ругаться на строку 9.

Учу С++ по книжке "Х. М. Дейтел, П. Дж. Дейтел - Как программировать на C++". Собственно и код с этой книжке. Пересмотрел его много раз, медитировал над ним, но так ничего и не понял. Делал обычную дружественную функцию, все нормально, можно было менять значения приватных членов, но в перезагрузке хоть бы хны. Единственный вывод, который я сделал - нельзя менять в перезагрузке значения приватных членов. Но в книжке зачем-то так написали, значит можно. Книга, вроде, по последнему стандарту С++ написана. Может это gcc что-то по своему понимает? В общем помогите.
Вложения
Тип файла: rar Teach.rar (653 байт, 7 просмотров)
Gundos вне форума Ответить с цитированием
Старый 17.01.2011, 18:14   #2
S1av0k
Пользователь
 
Регистрация: 26.11.2009
Сообщений: 87
По умолчанию

Gundos, никто не будет читать ваше вложение. Пожалуйста, представьте код, который не работает(так, чтобы можно было понять, что это и откуда). Воспользуйтесь также
Код:
выделением кода
Помог - жми весы
S1av0k вне форума Ответить с цитированием
Старый 17.01.2011, 18:29   #3
Gundos
Новичок
Джуниор
 
Регистрация: 17.01.2011
Сообщений: 3
По умолчанию

Хорошо, вот:

Класс:
Код:
class Phone
{
    friend ostream &operator<<(ostream &, const Phone &);
    friend istream &operator>>(istream &, const Phone &);

private:
    string areaCode;
    string exchenge;
    string line;
};
Реализация:
Код:
istream &operator>>(istream &input, Phone &number)
{
    input.ignore();
    input >> setw(3) >> number.areaCode;
    input.ignore(2);
    input >> setw(3) >> number.exchenge;
    input.ignore();
    input >> setw(4) >> number.line;

    return input;
}
Жирным выделил строки, в которых компилятор видит ошибки.
Gundos вне форума Ответить с цитированием
Старый 17.01.2011, 18:35   #4
Gundos
Новичок
Джуниор
 
Регистрация: 17.01.2011
Сообщений: 3
По умолчанию

Господи, что я за идиот такой. Все, нашел ошибку. Зачем-то в прототипе сделал объект константным и не заметил. Спасибо форуму и тебе S1av0k. Если бы не написал сюда, наверное еще бы пару дней сидел, аки идиот.
Gundos вне форума Ответить с цитированием
Старый 17.01.2011, 18:47   #5
S1av0k
Пользователь
 
Регистрация: 26.11.2009
Сообщений: 87
По умолчанию

Ничего страшного, бывает=)
Помог - жми весы
S1av0k вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Непонятки с переопределением оператора << для своего класса DKOI Общие вопросы C/C++ 1 16.11.2010 00:40
Изменять приватные свойства одного класса внутри другого TwiX Общие вопросы Delphi 15 10.11.2010 20:40
Перезагрузка оператора присваивания Tanya881103 Общие вопросы C/C++ 4 10.06.2010 15:47
Переопределение оператора умножения для класса. Умножение числа на класс. capta1n Общие вопросы C/C++ 2 06.03.2010 16:50
Скрыть члены класса от 'CodeGuide' в MVS 2005-08 Руслантус Общие вопросы C/C++ 2 26.12.2009 16:13