![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нет перегруженной функции с такими параметрами
бегинер © (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 зафигачить