Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];
ВнизНет перегруженной функции с такими параметрами Найти похожие ветки
← →
бегинер (2010-02-02 13:56) [0]Не пойму в чем проблема. Мастера, просветите пожалуйста, чего я не понимаю?
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
← →
Ega23 © (2010-02-02 14:03) [1]
Result := AnsiSetNextChar(S, StrPos, Ch);
S объявлена как AnsiString, а ты пытаешься туда string зафигачить
← →
Anatoly Podgoretsky © (2010-02-02 14:06) [2]> бегинер (02.02.2010 13:56:00) [0]
Вот об аргументах и подробнее.
← →
бегинер (2010-02-02 14:06) [3]
> Ega23 © (02.02.10 14:03) [1]
Олег, ну уж с этим бы я справился ;) Нет не то.
← →
бегинер (2010-02-02 14:08) [4]
> Anatoly Podgoretsky © (02.02.10 14:06) [2]
UCS4 = Cardinal;
Это?
← →
Медвежонок Пятачок © (2010-02-02 14:14) [5]если такая функция все же есть, то дело скорее всего в разных, но одноименных типах аргументов.
например в зоне видимости есть несколько модулей, в которых есть тип UCS4 или другой тип из перечня аргументов.
← →
бегинер (2010-02-02 14:16) [6]
> 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:19) [7]Вообще-то я думал, что он бы должен был бы справится с приведением типов.
← →
icWasya © (2010-02-02 16:54) [8]Поскольку у параметра S стоит квалификатор var, то будьте любезны подавать параметр правильного типа. Присваивание в S делается внутри процедуры, а она не знает, как делать присваивание в Unikode-строку. То, о чём Вы подумали, должно бы реализовываться так:
1) создать временную невидимую переменную @Temp1:UnicodeString;
2) сделать присвоение @Temp1 := S;
3) подать в процедуру AnsiSetNextChar адрес переменной @Temp1
4) после завершения AnsiSetNextChar сделать присваивание S:=@Temp1;
Delphi так не умеет :(.
Такой трюк вроде бы можно на C++, ну а на C++ можно и не такое.
← →
sniknik © (2010-02-02 21:17) [9]> Вообще-то я думал, что он бы должен был бы справится с приведением типов.
вообще то с overload по типам определяется какую именно функцию вызывать... и какое при этом приведение?
> Вот так съел
можно проще
...
Result := AnsiSetNextChar(AnsiString(Str), StrPos, Ch);
...
тоже должно работать.
> Delphi так не умеет :(.
и правильно, если так, нафига же извращения?
← →
бегинер (2010-02-02 21:22) [10]
> sniknik © (02.02.10 21:17) [9]
> можно проще...
> Result := AnsiSetNextChar(AnsiString(Str), StrPos, Ch);
> ...тоже должно работать.
Видимо s вместо str ;)
Конечно же я так пробовал, о чем честно и сообщил в [3], однако поскольку параметр var, я все-таки решил передать через доп. переменную и вот так уж получилось.
← →
sniknik © (2010-02-02 21:47) [11]тогда так, не могу проверить... т.к. 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 23:03) [12]
> sniknik © (02.02.10 21:47) [11]
Хм... Интересно. Завтра обязательно попробую. Спасибо.
Страницы: 1 вся ветка
Форум: "Начинающим";
Текущий архив: 2010.04.04;
Скачать: [xml.tar.bz2];
Память: 0.47 MB
Время: 0.004 c