![]() |
Модераторы: Daevaorn |
![]() ![]() ![]() |
|
Podarochek |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
подскажите ошибку?
![]()
|
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
|
|||
|
||||
Podarochek |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
что значит эта ошибка:
Error 1 error C2440: 'initializing' : cannot convert from 'void (__thiscall A::* )(void)' to 'void (__cdecl *)(void)' Добавлено через 3 минуты и 30 секунд тут же все пом ок:
Это сообщение отредактировал(а) Podarochek - 23.5.2008, 03:25 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
компилятор не может преобразовать указатель_на_метод в указатель_на_статическую_функцию void (**ftable)(); -> void (**A::ftable)() Это сообщение отредактировал(а) mes - 23.5.2008, 03:33 |
|||
|
||||
Podarochek |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
||||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
сорри что ввел в заблуждение синтаксисом подразумевалось что вместо void (**ftable)(); должна быть примерно void (A::**ftable)() а вобше имхо что подобный способ реализации виртуальных функций выбран не совсем правильно P.S еше и звездочки перепутал..помойму засиделся я слишком Это сообщение отредактировал(а) mes - 23.5.2008, 04:02 |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот набросал еше один вариант реализации механизма виртуальных функций.
P.S Podarochek, ты этой темой занялся из собственного любопытства или это задание? |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
В этом примере каждый объект хранит таблицу виртуальных методов. В связи с этим возможна ситуация что у двух объектов одного класса будут вызываться разные методы - что не соответствует реальным виртуальным функциям. Будет свободное время - переделаю. |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
вот со статической vtable для каждого класса..
|
|||
|
||||
xvr |
|
||||
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 7046 Регистрация: 28.8.2007 Где: Дублин, Ирландия Репутация: 60 Всего: 223 |
Ошибка в том, что это именно иллюстрация и не надо рассматривать это как программу на С++. Если надо сделать по этой иллюстрации реальную программу, то ее надо делать на С (ибо в С++ это все и так есть) из этого исходника, предварительно 'обработав его напильником' до состояния правильного С сорца. |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
блин как я читаю... ![]() а как же тогда классы ?? ![]() ![]() |
|||
|
||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
подумав, все таки пришел к выводу, что иллюстрацию надо делать на С++, без использования встроенных виртуальных функций
для демонстрации процесса "обратного"(callback) вызова нужной реализации потомка из базового класса. |
|||
|
||||
Podarochek |
|
|||
Шустрый ![]() Профиль Группа: Участник Сообщений: 94 Регистрация: 2.11.2007 Репутация: нет Всего: нет |
оператор поставил в protected всеравно отстался вопрос:
его реально решить в этой "иллюстрации"???? стоит задача продемонстрировать механизм, никакой практической задачи. Как С++ никто не рассматривает об этом говорит постановка задачи . Добавлено через 5 минут и 43 секунды кстати..ссори что не по теме..подскажите что за ошибка: Error 3 error LNK2001: unresolved external symbol "public: virtual double __thiscall Employee::earning(void)const " (?earning@Employee@@UBENXZ) 123.obj |
|||
|
||||
mes |
|
||||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а при чем тут ограничение доступа (protected) ? ты пытаешься привести метод к указателю на функцию решений два : 1. заменить массив указателей на функции массивом указателей на нужный тип метода или 2. запихивать в массив не методы, а статические функции (но они не смогут работать с членам класса) Добавлено через 5 минут и 45 секунд
такой механизм можно продемонстрировать только в OOП (там где есть наследие) - так что классический Си отпадает
линкер не нашел тела функции Добавлено через 14 минут и 43 секунды а чем тебя не устраивают примеры приведенные мной? (хочу заметить что твой пример далеко не Сишний) Это сообщение отредактировал(а) mes - 23.5.2008, 15:35 |
||||
|
|||||
mes |
|
|||
любитель ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 7954 Регистрация: 14.1.2006 Репутация: 144 Всего: 250 |
а если реализовывать на Си то надо реализовывать классы и наследственность
|
|||
|
||||
![]() ![]() ![]() |
Правила форума "С++:Общие вопросы" | |
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |