![]() |
|
|
Регистрация Восстановить пароль |
Регистрация | Задать вопрос |
Заплачу за решение |
Новые сообщения |
Сообщения за день |
Расширенный поиск |
Правила |
Всё прочитано |
![]() |
|
Опции темы | Поиск в этой теме |
![]() |
#1 |
Регистрация: 28.12.2010
Сообщений: 7
|
![]()
У меня VC++ Express 2008
делаю упражнение на тему "Наследование" суть программы: сделать класс-наследник сделанного ранее класса Sterling (фунты шиллинги пенсы) и класса fraction (дроби) - класс фунтов стерлингов пенсов + фартинги (1/4 пенса) в программе пока куча ошибок. разбираюсь.интересует ошибка: error C2248: fraction::numerator: невозможно обратиться к private член, объявленному в классе "fraction" см. объявление 'fraction::numerator' см. объявление 'fraction'не могу понять, почему "невозможно обратиться к private член", когда он объявлен как protected и должен быть виден классу-наследнику. вот, часть листинга: class fraction { protected: int numerator, denominator; public: ..................... }; class sterling { protected: long pounds; int shillings,pences; public: ............... }; class sterfrac: private sterling, private fraction { private: fraction farting; public: sterfrac():sterling(),farting() {} sterfrac(long f, int s, int p):sterling(f,s,p),farting(0,0) {} sterfrac(long f, int s, int p,fraction fr):sterling(f,s,p),farting(fr) {} sterfrac(sterling s, fraction f):sterling(s),fraction(f) {}тут сначала пробовала фунты стерлинги и пенсы инициализировать отдельно, но из-за этой же ошибки пришлось переделать, компилятор, вроде, "съел" sterfrac(double decPounds) //вот он, тот злосчастный метод { //оставляем 2 знака после запятой (вычисляем сколько сотых) double afterPoint = (decPounds-static_cast<int>(decPounds))*1000; int iAfterPoint = afterPoint; if (iAfterPoint%10>5) //округляем в большую или меньшую сторону { iAfterPoint -= iAfterPoint%10; iAfterPoint +=10; } else iAfterPoint -= iAfterPoint%10; iAfterPoint /= 10; //убираем лишний ноль. теперь и iAfterpoint - это число сотых farting.numerator = afterPoint/10*192; //вот она, эта злосчастная строка! farting.denominator = 8; pences = farting.Part(farting.numerator,fart ing.denominator); farting.lowTerms(); shillings = pences/12; pences %= 12; pounds = decPounds; } |
![]() |
![]() |
![]() |
#2 |
Старожил
Регистрация: 12.01.2011
Сообщений: 19,500
|
![]()
Потому что private наследование, а не public.
Ушел с форума, https://www.programmersforum.rocks, alex.pantec@gmail.com, https://github.com/AlexP11223
ЛС отключены Аларом. |
![]() |
![]() |
![]() |
#3 |
Регистрация: 28.12.2010
Сообщений: 7
|
![]() |
![]() |
![]() |
![]() |
#4 | |
Старожил
Регистрация: 15.02.2010
Сообщений: 15,822
|
![]() Цитата:
|
|
![]() |
![]() |
![]() |
#5 |
Регистрация: 28.12.2010
Сообщений: 7
|
![]()
давно уже было. но я разобралась. заявляю, дело было не в том, что наследование не public
а в том, что farting- объект другого класса, хоть и родителя. а protected делает видными методы для объектов класса-потомка. так что, видимо, в книжку надо заглянуть вам тоже. |
![]() |
![]() |
![]() |
![]() |
||||
Тема | Автор | Раздел | Ответов | Последнее сообщение |
Ошибка "Член группы не найден" в Webbrowser | Bright-rider | Работа с сетью в Delphi | 3 | 11.04.2011 19:43 |
Как обойти "преобразование типа из "string" в "float" невозможно" | lexluter1988 | Помощь студентам | 1 | 07.08.2010 12:23 |
обратиться к функции через " switch case " | B@R@B@$HK@ | Общие вопросы C/C++ | 4 | 09.06.2009 19:15 |
Выводит ошибку "Unclarified identifier", хотя недавно запускалась в другой программе | Alex Cones | Общие вопросы Delphi | 2 | 20.04.2009 21:31 |
Webbrowser и "Невозможно отобразить страницу" | celovec | Работа с сетью в Delphi | 1 | 06.07.2007 13:45 |