|
|
Регистрация | << Правила форума >> | FAQ | Пользователи | Календарь | Поиск | Сообщения за сегодня | Все разделы прочитаны |
|
Опции темы | Поиск в этой теме | Опции просмотра |
#1
|
|||
|
|||
Ошибка при компиляции проекта. Ambiguous overloaded call to ...
Доброго времени суток. Помогите кто чем может. Ситуация такая. Поставил самописные компоненты на Delphi 6. Настроил пути к библиотекам, тоже самописные.
На этих компонентах и библиотеках написано около 5ти проектов. И только один из этих проектов не получается откомпилировать из-за возникновения ошибки: Ambiguous overloaded call to ... "iif" Описание "iif": Код:
Function iif(cond:Boolean;vt,vf:String):String;overload; Function iif(cond:Boolean;vt,vf:Integer):Integer;overload; Function iif(cond:Boolean;vt,vf:String):String;overload; Begin if cond then Result := vt else Result := vf; End; //--------------------------------------------------------------------------- Function iif(cond:Boolean;vt,vf:Integer):Integer;overload; Begin if cond then Result := vt else Result := vf; End; Здесь возник какой то не понятный глюк. который не хочет воспринимать перегрузку методов. Может там какие то специфические настройки надо сделать, подскажите пожалуйста Последний раз редактировалось lmikle, 06.03.2013 в 05:10. |
#2
|
|||
|
|||
Попробуй убрать 'overload' в реализации.
|
#3
|
|||
|
|||
Цитата:
Previous declaration of "iif" was not marked with the overload directive |
#4
|
||||
|
||||
Обычно вызов из библиотеки идёт с директивой stdcall;
Я не понял Вашего вопроса, но всё же Вам на него отвечу! |
#5
|
|||
|
|||
Цитата:
Братан, у меня с Делфи проблемы! Спасибо за попытку |
#6
|
||||
|
||||
Тебе принципиально оверлоад нужен?
Опять блин не указали версию дельфи, в ХЕ и выше то что ты реализовать пытаешься - уже р5ализовано. Модуль math, ф-я ifthen. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию Последний раз редактировалось M.A.D.M.A.N., 05.03.2013 в 22:54. |
#7
|
||||
|
||||
А вызывается как?
jmp $ ; Happy End! The Cake Is A Lie. |
#8
|
|||
|
|||
У меня Делфи 6 установлен, в начале темы писал.
Overload нужен, т.к. в проекте куча таких перегружаемых процедур и функций. Пробовал порядок параметров менять. Исправляю одну. Начинает ругаться на следующую перегружаемую проц/функц: Код:
Procedure Wait(msg:String);overload; Procedure Wait;overload; procedure Err(Const Msg:String;Const Cap:String='');overload; procedure Err(Const cond:boolean;Const msg:String;Const cap:String = '');overload; procedure Err(Const cond:boolean;Const Obj:TWinControl;Const msg:String;Const cap:String = '');overload; procedure Err(Const obj:TWinControl;Const msg:String;Const cap:String = '');overload; Интересно то, что другие проекты, которые исп. эту самописную библиотеку нормально компилируются. А именно этот проект не хочет её воспринимать какой она есть. Может это какой-то глюк? Или у проекта какие-то настройки заточены под др.ОС или компьютер? Один из вызовов: Код:
procedure TFormSicReg.bOkClick(Sender: TObject); Var vBrId,vLN,vFN,vMN,vIIN:String; vTrans,vReb,vIno,vDub,vNameNull:Integer; begin // Проверки Err((Not cbSex1.Checked) and (Not cbSex0.Checked), cbSex1, 'Выберите пол муж/жен' ); eBP.Ok; eAddr.Ok; Err((Not cbArea1.Checked) and (Not cbArea0.Checked), cbArea1, 'Выберите местность город/село' ); ePhone.Ok; // if eBrId.Visible and eBrId.CanFocus then vBrId := eBrId.AsString else vBrId := prg.BrId; vLN := U2K(e_RLN.Text); vFN := U2K(e_RFN.Text); vMN := U2K(e_RMN.Text); Trace( 'LN = "' +ReplKZChar2(vLN)+'"' ); Trace( 'FN = "' +ReplKZChar2(vFN)+'"' ); Trace( 'MN = "' +ReplKZChar2(vMN)+'"' ); vIIN := ''; vDub := iif(cbDub.Visible and cbDub.Enabled and cbDub.Checked,1,0); vNameNull := iif(cbNameNull.Visible and cbNameNull.Enabled and cbNameNull.Checked,1,0); vTrans := 0; // транзитный СИК vReb := 0; // несовершеннолетний vIno := 0; // иностранец case FRegim of cARegTra: vTrans := 1; // транзитный с cARegReb: vReb := 1; // Несовершенолетн cARegIno: vIno := 1; // Иностр end; try if Not FIsEdit then begin // регистрация FSicId := StrToInt(App.FunA('sik.Pers.Ins_Sic',[vTrans,vReb,vIno,vDub,vNameNull,vBrId,vLN,vFN,vMN,e_RBD.AsDate,iif(cbSex1.Checked,1,0), {cbDoc.Field('rfdt_id').AsString}'', eDocDate.AsDate, eDocSer.AsString, eDocNum.AsString, eDocPlace.AsString, eBP.AsString,eAddr.AsString,iif(cbArea1.Checked,1,0),ePhone.AsString,vIIN, '',''])); Mes('Регистрация выполнена'#13#10+IntToStr(FSicId)); end else begin IfRaise(FSicId=0,'Не определен идентификатор'); App.PrcA('sik.Pers.Upd_Sic',[vTrans,vReb,vIno,vDub,vNameNull, FSicId,{vBrId,}iif(cbSex1.Checked,1,0),'',eDocDate.AsDate,eDocSer.AsString,eDocNum.AsString,eDocPlace.AsString, eBP.AsString,eAddr.AsString,iif(cbArea1.Checked,1,0),ePhone.AsString,vIIN,'','']); Mes('Редактирование выполнено'#13#10+IntToStr(FSicId)); end; finally end; // Close; // закрываем окно // end; MAD: учимся пользоваться тегами! Последний раз редактировалось M.A.D.M.A.N., 06.03.2013 в 09:16. |
#9
|
||||
|
||||
Мой пост видел?
Такой функционал уже реализован в дельфи, ф-я ifthen. — Как тебя понимать? — Понимать меня не обязательно. Обязательно меня любить и кормить вовремя. На Delphi, увы, больше не программирую. Рекомендуемая литература по программированию |
#10
|
|||
|
|||
Цитата:
Да я понимаю что функционал реализован. Но у меня проблема в другом. Почему он не хочет воспринимать перегружаемые методы? Просто помимо "iif" есть и другие процедуры и функции, на которые он ругается. Пробовал менять местами параметры, там он успокаивался...но потом на другие перегрузки переключался. |
#11
|
|||
|
|||
Проблема может быть в том, что такая функция описана в разных модулях.
В одном она без overload. Или в разных модулях с одинаковой сигнатурой. А этот код Код:
Procedure Wait(msg:String);overload; Procedure Wait;overload; |
Этот пользователь сказал Спасибо icWasya за это полезное сообщение: | ||
MaessstRo (07.03.2013)
|
#12
|
||||
|
||||
все честно:
Код:
unit Unit1; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs; type TForm1 = class(TForm) private { Private declarations } public { Public declarations } end; var Form1: TForm1; Function iif(cond:Boolean;vt,vf:String):String; overload; Function iif(cond:Boolean;vt,vf:Integer):Integer; overload; implementation {$R *.dfm} Function iif(cond:Boolean;vt,vf:String):String; Begin if cond then Result := vt else Result := vf; End; Function iif(cond:Boolean;vt,vf:Integer):Integer; Begin if cond then Result := vt else Result := vf; End; end. Пишу программы за еду. __________________ |
#13
|
|||
|
|||
Цитата:
Всё как полагается, как в американском фильме )) |
#14
|
|||
|
|||
Спасибо господа за соучастие. Причину ошибки я нашел. Оказалось что один модуль использовал две библиотеки в которых есть проц/функц - близнецы так сказать... Решил проблему таким образом, так как происходит "Неоднозначное обращение", то я перед каждой ошибочной строкой указывал библиотеку к которой компилятору надо обращаться.
Код:
try if Not FIsEdit then begin // регистрация FSicId := StrToInt(App.FunA('sik.Pers.Ins_Sic',[vTrans,vReb,vIno,vDub,vNameNull,vBrId,vLN,vFN,vMN,e_RBD.AsDate,TTls.iif(cbSex1.Checked,1,0), {cbDoc.Field('rfdt_id').AsString}'', eDocDate.AsDate, eDocSer.AsString, eDocNum.AsString, eDocPlace.AsString, eBP.AsString,eAddr.AsString,TTls.iif(cbArea1.Checked,1,0),ePhone.AsString,vIIN, '',''])); Mes('Регистрация выполнена'#13#10+IntToStr(FSicId)); end else begin IfRaise(FSicId=0,'Не определен идентификатор'); App.PrcA('sik.Pers.Upd_Sic',[vTrans,vReb,vIno,vDub,vNameNull, FSicId,{vBrId,}iif(cbSex1.Checked,1,0),'',eDocDate.AsDate,eDocSer.AsString,eDocNum.AsString,eDocPlace.AsString, eBP.AsString,eAddr.AsString,iif(cbArea1.Checked,1,0),ePhone.AsString,vIIN,'','']); Mes('Редактирование выполнено'#13#10+IntToStr(FSicId)); end; |
#15
|
|||
|
|||
Цитата:
Благодарю за наводящий вопрос. |