Форум по Delphi программированию

Delphi Sources



Вернуться   Форум по Delphi программированию > Все о Delphi > [ "Начинающим" ]
Ник
Пароль
Регистрация <<         Правила форума         >> FAQ Пользователи Календарь Поиск Сообщения за сегодня Все разделы прочитаны

Ответ
 
Опции темы Поиск в этой теме Опции просмотра
  #1  
Старый 05.03.2013, 18:13
MaessstRo MaessstRo вне форума
Прохожий
 
Регистрация: 05.03.2013
Сообщения: 8
Репутация: 10
Восклицание Ошибка при компиляции проекта. 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  
Старый 05.03.2013, 20:29
lmikle lmikle вне форума
Модератор
 
Регистрация: 17.04.2008
Сообщения: 8,036
Версия Delphi: 7, XE3, 10.2
Репутация: 49089
По умолчанию

Попробуй убрать 'overload' в реализации.
Ответить с цитированием
  #3  
Старый 05.03.2013, 20:35
MaessstRo MaessstRo вне форума
Прохожий
 
Регистрация: 05.03.2013
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от lmikle
Попробуй убрать 'overload' в реализации.
Не помогло ((( Пишет:
Previous declaration of "iif" was not marked with the overload directive
Ответить с цитированием
  #4  
Старый 05.03.2013, 22:29
Аватар для Alegun
Alegun Alegun вне форума
LMD-DML
 
Регистрация: 12.07.2009
Адрес: Богородское
Сообщения: 3,025
Версия Delphi: D7E
Репутация: 1834
По умолчанию

Обычно вызов из библиотеки идёт с директивой stdcall;
Ответить с цитированием
  #5  
Старый 05.03.2013, 22:31
MaessstRo MaessstRo вне форума
Прохожий
 
Регистрация: 05.03.2013
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от Alegun
Обычно вызов из библиотеки идёт с директивой stdcall;

Братан, у меня с Делфи проблемы! Спасибо за попытку
Ответить с цитированием
  #6  
Старый 05.03.2013, 22:51
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Тебе принципиально оверлоад нужен?

Опять блин не указали версию дельфи, в ХЕ и выше то что ты реализовать пытаешься - уже р5ализовано. Модуль math, ф-я ifthen.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию

Последний раз редактировалось M.A.D.M.A.N., 05.03.2013 в 22:54.
Ответить с цитированием
  #7  
Старый 05.03.2013, 22:54
Аватар для Bargest
Bargest Bargest вне форума
Профессионал
 
Регистрация: 19.10.2010
Адрес: Москва
Сообщения: 2,390
Версия Delphi: XE3/VS12/FASM
Репутация: 14665
По умолчанию

А вызывается как?
__________________
jmp $ ; Happy End!
The Cake Is A Lie.
Ответить с цитированием
  #8  
Старый 06.03.2013, 06:46
MaessstRo MaessstRo вне форума
Прохожий
 
Регистрация: 05.03.2013
Сообщения: 8
Репутация: 10
По умолчанию

У меня Делфи 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  
Старый 06.03.2013, 09:15
Аватар для M.A.D.M.A.N.
M.A.D.M.A.N. M.A.D.M.A.N. вне форума
Sir Richard Abramson
 
Регистрация: 05.04.2008
Сообщения: 5,505
Версия Delphi: XE10
Репутация: выкл
По умолчанию

Мой пост видел?
Такой функционал уже реализован в дельфи, ф-я ifthen.
__________________
— Как тебя понимать?
— Понимать меня не обязательно. Обязательно меня любить и кормить вовремя.


На Delphi, увы, больше не программирую.
Рекомендуемая литература по программированию
Ответить с цитированием
  #10  
Старый 06.03.2013, 09:28
MaessstRo MaessstRo вне форума
Прохожий
 
Регистрация: 05.03.2013
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от M.A.D.M.A.N.
Мой пост видел?
Такой функционал уже реализован в дельфи, ф-я ifthen.

Да я понимаю что функционал реализован. Но у меня проблема в другом. Почему он не хочет воспринимать перегружаемые методы? Просто помимо "iif" есть и другие процедуры и функции, на которые он ругается. Пробовал менять местами параметры, там он успокаивался...но потом на другие перегрузки переключался.
Ответить с цитированием
  #11  
Старый 06.03.2013, 09:55
icWasya icWasya вне форума
Местный
 
Регистрация: 09.11.2010
Сообщения: 499
Репутация: 10
По умолчанию

Проблема может быть в том, что такая функция описана в разных модулях.
В одном она без overload. Или в разных модулях с одинаковой сигнатурой.

А этот код
Код:
Procedure Wait(msg:String);overload; 
Procedure Wait;overload; 
в каком месте - в Interface или в Implementation ?
Ответить с цитированием
Этот пользователь сказал Спасибо icWasya за это полезное сообщение:
MaessstRo (07.03.2013)
  #12  
Старый 06.03.2013, 10:35
Аватар для NumLock
NumLock NumLock вне форума
Let Me Show You
 
Регистрация: 30.04.2010
Адрес: Северодвинск
Сообщения: 5,426
Версия Delphi: 7, XE5
Репутация: 59586
По умолчанию

все честно:
Код:
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  
Старый 06.03.2013, 10:40
MaessstRo MaessstRo вне форума
Прохожий
 
Регистрация: 05.03.2013
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
Проблема может быть в том, что такая функция описана в разных модулях.
В одном она без overload. Или в разных модулях с одинаковой сигнатурой.

А этот код
Код:
Procedure Wait(msg:String);overload; 
Procedure Wait;overload; 
в каком месте - в Interface или в Implementation ?
В Interface. А реализация в Implementation
Всё как полагается, как в американском фильме ))
Ответить с цитированием
  #14  
Старый 07.03.2013, 10:04
MaessstRo MaessstRo вне форума
Прохожий
 
Регистрация: 05.03.2013
Сообщения: 8
Репутация: 10
По умолчанию

Спасибо господа за соучастие. Причину ошибки я нашел. Оказалось что один модуль использовал две библиотеки в которых есть проц/функц - близнецы так сказать... Решил проблему таким образом, так как происходит "Неоднозначное обращение", то я перед каждой ошибочной строкой указывал библиотеку к которой компилятору надо обращаться.

Код:
 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  
Старый 07.03.2013, 10:05
MaessstRo MaessstRo вне форума
Прохожий
 
Регистрация: 05.03.2013
Сообщения: 8
Репутация: 10
По умолчанию

Цитата:
Сообщение от icWasya
Проблема может быть в том, что такая функция описана в разных модулях.
В одном она без overload. Или в разных модулях с одинаковой сигнатурой

Благодарю за наводящий вопрос.
Ответить с цитированием
Ответ


Delphi Sources

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск
Опции просмотра

Ваши права в разделе
Вы не можете создавать темы
Вы не можете отвечать на сообщения
Вы не можете прикреплять файлы
Вы не можете редактировать сообщения

BB-коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.
Быстрый переход


Часовой пояс GMT +3, время: 07:00.


 

Сайт

Форум

FAQ

RSS лента

Прочее

 

Copyright © Форум "Delphi Sources" by BrokenByte Software, 2004-2023

ВКонтакте   Facebook   Twitter