Top.Mail.Ru
Мастера DELPHI, Delphi programming community Титульная страница Поиск, карта сайта Написать письмо 
| Новости | Поиск | FAQ | Статьи | Книги | Новости VCL |
| Форумы ЧАТ | Орешник | KOL и MCK |
Форумы -» Основная («Начинающим»)/ Базы / WinAPI / Компоненты / Сети / Media / Игры / Corba и COM / KOL / FreePascal / .Net / Прочее / RSDN.ORG

« предыдущая ветвь | форум | следующая ветвь »

Нет перегруженной функции с такими параметрами


бегинер ©   (2010-02-02 13:56:00) 

Не пойму в чем проблема. Мастера, просветите пожалуйста, чего я не понимаю?
D2010, Win7 (Поскольку нет таких крыжиков)

function AnsiSetNextChar(var S: AnsiString; var StrPos: SizeInt; Ch: UCS4): Boolean; overload;
function AnsiSetNextChar(var S: AnsiString; CodePage: Word; var StrPos: SizeInt; Ch: UCS4): Boolean; overload;


...

function StringSetNextChar(var S: string; var StrPos: SizeInt; Ch: UCS4): Boolean;
begin
 {$IFDEF SUPPORTS_UNICODE}
 Result := UTF16SetNextChar(S, StrPos, Ch);
 {$ELSE ~SUPPORTS_UNICODE}
  Result := AnsiSetNextChar(S, StrPos, Ch);
 {$ENDIF ~SUPPORTS_UNICODE}
end;


Получаю (на выделенной строке)
E2250 There is no overloaded version of 'AnsiSetNextChar' that can be called with these arguments


бегинер   (2010-02-02 23:03:00) [1]


> sniknik ©   (02.02.10 21:47) [11]

Хм... Интересно. Завтра обязательно попробую. Спасибо.


sniknik   (2010-02-02 21:47:00) [2]

тогда так,  не могу проверить... т.к. D7, там оно конечно работает но и AnsiString с string не различаются.

function StringSetNextChar(var S: string; var StrPos: SizeInt; Ch: UCS4): Boolean;
var
 Str: AnsiString absolute S;
begin
 ...
 Result:= AnsiSetNextChar(Str, StrPos, Ch);
 ...
end;


бегинер   (2010-02-02 21:22:00) [3]


> sniknik ©   (02.02.10 21:17) [9]
> можно проще...
> Result := AnsiSetNextChar(AnsiString(Str), StrPos, Ch);
> ...тоже должно работать.

Видимо s вместо str ;)
Конечно же я так пробовал, о чем честно и сообщил в [3], однако поскольку параметр var, я все-таки решил передать через доп. переменную и вот так уж получилось.


sniknik   (2010-02-02 21:17:00) [4]

> Вообще-то я думал, что он бы должен был бы справится с приведением типов.
вообще то с overload по типам определяется какую именно функцию вызывать... и какое при этом приведение?

> Вот так съел
можно проще
...
Result := AnsiSetNextChar(AnsiString(Str), StrPos, Ch);
...
тоже должно работать.

> Delphi так не умеет :(.
и правильно, если так, нафига же извращения?


icWasya   (2010-02-02 16:54:00) [5]

Поскольку у параметра Sстоит квалификатор var, то будьте любезны подавать параметр правильного типа. Присваивание в S делается внутри процедуры, а она не знает, как делать присваивание в Unikode-строку. То, о чём Вы подумали, должно бы реализовываться так:
1) создать временную невидимую переменную @Temp1:UnicodeString;
2) сделать присвоение @Temp1 := S;
3) подать в процедуру AnsiSetNextChar адрес переменной @Temp1
4) после завершения AnsiSetNextChar сделать присваивание S:=@Temp1;

Delphi так не умеет :(.
Такой трюк вроде бы можно на C++, ну а на C++ можно и не такое.


бегинер   (2010-02-02 14:19:00) [6]

Вообще-то я думал, что он бы должен был бы справится с приведением типов.


бегинер   (2010-02-02 14:16:00) [7]


> Ega23 ©   (02.02.10 14:03) [1]

Хотя, извиняюсь. Посыпаю голову.
Вот так съел
function StringSetNextChar(var S: string; var StrPos: SizeInt; Ch: UCS4): Boolean;
var
 str: AnsiString;
begin
 {$IFDEF SUPPORTS_UNICODE}
 Result := UTF16SetNextChar(S, StrPos, Ch);
 {$ELSE ~SUPPORTS_UNICODE}
 str := s;
 Result := AnsiSetNextChar(Str, StrPos, Ch);
 s := str;
 {$ENDIF ~SUPPORTS_UNICODE}
end;


Медвежонок Пятачок   (2010-02-02 14:14:00) [8]

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


бегинер   (2010-02-02 14:08:00) [9]


> Anatoly Podgoretsky ©   (02.02.10 14:06) [2]

UCS4 = Cardinal;
Это?


Anatoly Podgoretsky   (2010-02-02 14:06:00) [10]

> бегинер  (02.02.2010 13:56:00)  [0]

Вот об аргументах и подробнее.


бегинер   (2010-02-02 14:06:00) [11]


> Ega23 ©   (02.02.10 14:03) [1]

Олег, ну уж с этим бы я справился ;) Нет не то.


Ega23   (2010-02-02 14:03:00) [12]

Result := AnsiSetNextChar(S, StrPos, Ch);

S объявлена как AnsiString, а ты пытаешься туда string зафигачить


Наверх

Титульная страница Поиск, карта сайта Написать письмо