![]() |
|
Модераторы: Daevaorn |
![]()
|
|
| Mayene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 8.8.2005 Репутация: нет Всего: нет |
В документации структуры данных описана функция
virtual bool Struct_Base::GetCellInfo (int cID, int *& pID, cmdreal *& coor, cmdreal *& changes) [pure virtual] Параметры: cID [IN], pID [INOUT] - указатель типа int coor [INOUT], charges [INOUT] - указатель типа cmdreal Эта функция привызове дает cID, pID, coor, charges. Вопрос: как корректно вызвать эту функцию в программе. (Не сильна в синтаксисе..) Это сообщение отредактировал(а) Mayene - 8.8.2005, 12:53 |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Это чисто виртуальная функция, ее можно вызывать только в том случае если у нее есть тело,
и только в производных от Struct_Base классах и только статически. Вот так Struct_Base::GetCellInfo(/*...*/); (ИМХО) --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| comcon1 |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
Ну вот так:
Главное, нельзя писать так:
указатели должны быть переменными, раз передается ссылка на них Добавлено @ 12:58 Только в производных - согласен. Хотя это, в принципе, не обязательно. Функция ведь абстрактной не объявлена. Но почему только статически?? Это сообщение отредактировал(а) comcon1 - 8.8.2005, 14:09 |
||||
|
|||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
2comcon1 Там написано [pure virtual]. У чисто виртуальных функций может быть тело (а может и не быть), если есть то вызывать можно только через квалификатор Struct_Base:: если не ошибаюсь. Статически - потому что для чисто виртуальных функций виртуальный механизм не работает.
--------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| Mayene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 8.8.2005 Репутация: нет Всего: нет |
comcon1
Т.е. я этот Object_name тоже должна сначала объявить? Что-то вроде:
Поправьте, пожалуйста, где не права... P.S. Я на Delphi больше 3 лет работала, в C++ только осваиваюсь... Простите, если что не так... |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Mayene,
ты лучше по-подробнее расскажи: что за функция, откуда надо вызывать и зачем, и приведи код где у тебя выдается ошибка... --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
2 LPBOY. Спасибо буду знать.
2 автор. Да, ты дала слишком мало инфо. |
|||
|
||||
| Mayene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 8.8.2005 Репутация: нет Всего: нет |
LPBOY
У меня физико-математический проект. В настоящий момент все, что наработано, нужно запрограммировать. К моему сожалению... на С++. У проекта уже есть готовое описание структуры данных. Т.е. мне нужно плавно влиться в то, что есть. А именно.... К описанию выше обозначенной функции
приделано следующее описание: Вызывая эту функцию, ID, координаты и заряды всех частиц внутри клетки (молекулярная динамика) возвращаются. В параллельном варианте это работает только для клеток, которые существуют на данном процессе. (Параллельное мне пока не нужно Ну коротко и все. Теперь мне эту функцию нужно корректно вызвать. Т.е. вызвать таким образом, чтобы у меня сформировался массив данных, каждый элемент массива - т.н. клетка с номером, координатами и зарядами... |
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
А особенно вот это: для чисто виртуальных функций виртуальный механизм не работает -- БРЕД. Извини, но это, действительно, редкостный бред. Mayene
object_name в том примере должен быть указателем на Struct_Base (или на производный он класс). -------------------- Да. Именно так. |
||||
|
|||||
| Mayene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 8.8.2005 Репутация: нет Всего: нет |
Файл, в котором лежит эта функция, выглядит так:
|
|||
|
||||
| Дрон |
|
||||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Итак. Чтобы её вызвать тебе во-первых нужен объект класса, производного от Struct_Base. В примере comcon1 на этот объект указывает указатель object_name, который должен быть объявлен примерно так: Struct_Base *object_name; Теперь пишем так (как и сказал comcon1):
Вместо object_name будет тот указатель на объект, который у тебя есть. Добавлено @ 13:47 Mayene
Реально там нет этой функции. Ведь там написано = 0, а это значит, что GetCellInfo -- это чисто виртуальная функция, которая должна быть переопределена в производных классах. Это сообщение отредактировал(а) Дрон - 8.8.2005, 13:50 -------------------- Да. Именно так. |
||||||
|
|||||||
| Mayene |
|
|||
![]() Новичок Профиль Группа: Участник Сообщений: 6 Регистрация: 8.8.2005 Репутация: нет Всего: нет |
Дрон
Спасибо огромное за доходчивое объяснение! Очень признательна! |
|||
|
||||
| LPBOY |
|
|||
![]() Бывалый ![]() Профиль Группа: Участник Сообщений: 228 Регистрация: 12.7.2005 Репутация: 20 Всего: 20 |
Ты уверена что у этой функции есть тело?? Если "да", тогда:
Очень важный момент: откуда ты ее хочешь вызвать??? Если из main то не получиться, по крайней мере напрямую, а если из функции-члена производного класса, то через квалификатор :: базового. А может это чисто вирт. функция без тела? Тогда тебе надо ее вызывать через объекты производных классов. Короче нужна еще информация... Сейчас я еще напишу несколько примерчиков, подожди... 2Дрон, ты не прав, тебе отвечу позже... --------------------
Каждый человек по-своему прав, а по-моему нет... |
|||
|
||||
| comcon1 |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 838 Регистрация: 11.6.2005 Где: Москва ДАС-МГУ Репутация: 12 Всего: 17 |
2 дрон. быстро исправил! тока хотел написать про ошибку.
|
|||
|
||||
| Дрон |
|
||||
![]() Java-ненавистник :) ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 3179 Регистрация: 29.12.2002 Где: Санкт-Петербург Репутация: 10 Всего: 93 |
Да, я не заметил сначала, что 2-й параметр тоже по ссылке передаётся Добавлено @ 13:58 LPBOY Чисто виртуальная функция для того и придумана, чтобы определить некий интерфейс к объекту. Если у нас есть
-------------------- Да. Именно так. |
||||
|
|||||
![]()
|
| Правила форума "С++:Общие вопросы" | |
|
|
Добро пожаловать!
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Earnest Daevaorn |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | C/C++: Общие вопросы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |