| Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате |
| Форум программистов > Delphi: Для новичков > Процедура имеющая параметр разного типа |
| Автор: Vetos 21.3.2008, 18:58 | ||||
Допустим есть процедура Add, но мне нужно чтобы в нее можно было передать разные переменные, к примеру
У меня почемуто в таком коде ошибка
[Error] GLInclude.pas(81): Overloaded procedure 'Add' must be marked with the 'overload' directive Ничего не получается, помогите!!!!! |
| Автор: MetalFan 21.3.2008, 19:05 |
| ну так тебеж написали... а третью процедуру кто оверложивать будет? |
| Автор: bems 21.3.2008, 19:05 |
| 1) перед overload нужна точка с запятой 2) ты уверен что по этим типам аргументов можно определить нужную процедуру? |
| Автор: MetalFan 21.3.2008, 19:06 |
| и в догонку - "оверложеные" фуникции принято писать подряд... для наглядности. хотя конечно кому как |
| Автор: Vetos 21.3.2008, 19:10 | ||
| Спасибо) Добавлено через 6 минут и 22 секунды Ага, вот уже и ошибочка вылезает.
Чото не определяет, это никак нельзя исправить? |
| Автор: 4d5a 23.3.2008, 11:33 |
| можно сделать одну процедуру, передавать ей аргумент типа класса базавого для всех (GLObject, GLPoint, GLLine), или просто поинтер. Разбираться к какому именно классу принадлежит аргумент уже внутри процедуры, или явно еще флаг, сообщающий о непосредственном типе передовать в процедуру. если я правильно предполагаю 1) PGLObject=^GLObject 2) GLLine и GLPoint наследники GLObject, то можно типа : //Obj передается как PGLObject if (Obj^.ClassName='GLLine') then Add_glLine(Obj) ; |
| Автор: bems 24.3.2008, 16:16 |
| для начала откажись от указателей. Но эффект это даст только в тех случаях когда компилятор точно знает какой класс передается в функцию. |
| Автор: Vetos 24.3.2008, 23:38 | ||
| Я нашел решение проблемы))) Мне нужны были указатели, но так как указатели в перераспределении(overload) не распознаются, хотел распознать внутри процедуры. Но как оказалось такой фишки нету( Теперь я понял как еще можно получить указатель Теперь я просто создаю процедуры overload, с параметром переменной и уже внутри нее получаю указатель:
Таким способом все работает на ура Спасибо большое всем кто участвовал) |
| Автор: Beltar 25.3.2008, 08:53 |
| Тем не менее лучше использовать классы, их во-первых легко различать по свойству ClassName, не надо писать var в описании подпрограмм. Кроме того все создание их экземпляров Create и Free, а со структурами будет запара со всеми этими New. |
| Автор: Alix 25.3.2008, 10:00 |
| Ребят, да какие классы для OGL??? Зачем такой геморрой и неоптимизированность с точки зрения производительности. Vetos нашел нормальный способ. |
| Автор: Beltar 25.3.2008, 11:17 |
| Ой не знаю, PLine:=@Line; вроде как избыточно, указатель передается в ф-ию, а потом вычисляется еще раз. Чем экземпляр класса отличается от структуры, кроме того, что структура передается по значению, а класс всегда по ссылке? |