![]() |
Модераторы: Snowy, MetalFan, bems, Poseidon |
![]() ![]() ![]() |
|
Vetos |
|
||||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 1 Всего: 4 |
Допустим есть процедура Add, но мне нужно чтобы в нее можно было передать разные переменные, к примеру
У меня почемуто в таком коде ошибка
[Error] GLInclude.pas(81): Overloaded procedure 'Add' must be marked with the 'overload' directive Ничего не получается, помогите!!!!! Это сообщение отредактировал(а) Vetos - 21.3.2008, 18:58 -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
||||
|
|||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
ну так тебеж написали... а третью процедуру кто оверложивать будет?
-------------------- There are always someone smarter than you... |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
1) перед overload нужна точка с запятой
2) ты уверен что по этим типам аргументов можно определить нужную процедуру? -------------------- Обижено школьников: 8 |
|||
|
||||
MetalFan |
|
|||
![]() Аццкий Сотона ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3815 Регистрация: 2.10.2006 Где: Moscow Репутация: 22 Всего: 128 |
и в догонку - "оверложеные" фуникции принято писать подряд... для наглядности. хотя конечно кому как
-------------------- There are always someone smarter than you... |
|||
|
||||
Vetos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 1 Всего: 4 |
Спасибо)
Добавлено через 6 минут и 22 секунды Ага, вот уже и ошибочка вылезает.
Чото не определяет, это никак нельзя исправить? -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
4d5a |
|
|||
Новичок Профиль Группа: Участник Сообщений: 29 Регистрация: 10.6.2007 Репутация: нет Всего: 1 |
можно сделать одну процедуру, передавать ей аргумент типа класса базавого для всех (GLObject, GLPoint, GLLine), или просто поинтер. Разбираться к какому именно классу принадлежит аргумент уже внутри процедуры, или явно еще флаг, сообщающий о непосредственном типе передовать в процедуру.
если я правильно предполагаю 1) PGLObject=^GLObject 2) GLLine и GLPoint наследники GLObject, то можно типа : //Obj передается как PGLObject if (Obj^.ClassName='GLLine') then Add_glLine(Obj) ; Это сообщение отредактировал(а) 4d5a - 23.3.2008, 11:42 |
|||
|
||||
bems |
|
|||
![]() Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Комодератор Сообщений: 3400 Регистрация: 5.1.2006 Репутация: 18 Всего: 88 |
для начала откажись от указателей. Но эффект это даст только в тех случаях когда компилятор точно знает какой класс передается в функцию.
-------------------- Обижено школьников: 8 |
|||
|
||||
Vetos |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 312 Регистрация: 4.4.2005 Репутация: 1 Всего: 4 |
Я нашел решение проблемы)))
Мне нужны были указатели, но так как указатели в перераспределении(overload) не распознаются, хотел распознать внутри процедуры. Но как оказалось такой фишки нету( Теперь я понял как еще можно получить указатель ![]() Теперь я просто создаю процедуры overload, с параметром переменной и уже внутри нее получаю указатель:
Таким способом все работает на ура ![]() Спасибо большое всем кто участвовал) -------------------- Строить нужно так, чтоб никто не сломал! А ломать, чтоб никто не знал 8) :ne_huliganit |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 0 Всего: 7 |
Тем не менее лучше использовать классы, их во-первых легко различать по свойству ClassName, не надо писать var в описании подпрограмм. Кроме того все создание их экземпляров Create и Free, а со структурами будет запара со всеми этими New.
-------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
Alix |
|
|||
![]() L45 ![]() ![]() Профиль Группа: Участник Сообщений: 581 Регистрация: 4.5.2005 Где: Pskov/Spb Репутация: 8 Всего: 23 |
Ребят, да какие классы для OGL??? Зачем такой геморрой и неоптимизированность с точки зрения производительности. Vetos нашел нормальный способ.
-------------------- Знание только тогда знание, когда оно приобретено усилиями своей мысли, а не памятью (с) Л. Толстой High tech. Low live. (с) Gardner Dozois |
|||
|
||||
Beltar |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 627 Регистрация: 11.1.2006 Репутация: 0 Всего: 7 |
Ой не знаю, PLine:=@Line; вроде как избыточно, указатель передается в ф-ию, а потом вычисляется еще раз.
Чем экземпляр класса отличается от структуры, кроме того, что структура передается по значению, а класс всегда по ссылке? -------------------- Опытный программист на C++ легко решает любые не существующие в Паскале проблемы. ![]() Пищущий на C++ мужик. Даже если это мужик сидит в написанном на Delphi и жрущем паскалевскую библиотеку билдере. |
|||
|
||||
![]() ![]() ![]() |
Правила форума "Delphi: Для новичков" | |
|
Запрещается! 1. Публиковать ссылки на вскрытые компоненты 2. Обсуждать взлом компонентов и делиться вскрытыми компонентами
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, Snowy, MetalFan, bems, Poseidon, Rrader. |
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
0 Пользователей: | |
« Предыдущая тема | Delphi: Для новичков | Следующая тема » |
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |