функцией, которая возвращает строку. Делаю так:
interface
...
TGetOutPath = function : String of object;
...
protected
FGetOutPath : TGetOutPath;
...
strict private
function GetOutPathAuto: String;
function GetOutPath: String;
...
public
property OutPath : String read GetOutPath write SetOutPath;
...
implementation
...
function CTilesDownloader.GetOutPath: String;
begin
Result := FGetOutPath;
end;
FGetOutPath устанавливаю в Create:
FGetOutPath := @GetOutPathAuto;
При компиляции выдаёт такую ошибку:
TilesDownload.Classes.pas(307,13) Error: Incompatible types: got "<procedure variable type of function:AnsiString(0) of object;Register>" expected "AnsiString"
Как поправить?
Нейросеть ответила 😄 Ошибка, которую вы видите, связана с тем, что FGetOutPath является переменной-процедурой (или функцией), а не строкой. Ваша функция GetOutPath ожидает вернуть строку (String), но вместо этого вы пытаетесь вернуть переменную, которая на самом деле является указателем на процедуру или функцию. Чтобы исправить эту ошибку, вам нужно убедиться, что FGetOutPath действительно возвращает значение типа String. Если FGetOutPath — это переменная типа функции, вам нужно вызвать её как функцию. Например: function CTilesDownloader.GetOutPath: String; begin Result := FGetOutPath(); // Добавлены круглые скобки для вызова функции end; Если FGetOutPath — это просто переменная, которая должна содержать строку, то убедитесь, что она инициализирована правильно. Например: var FGetOutPath: AnsiString; // или String в зависимости от ваших нужд function CTilesDownloader.GetOutPath: String; begin Result := FGetOutPath; // Здесь FGetOutPath должен быть строкой end; Если FGetOutPath является указателем на функцию и вы хотите использовать её как функцию, то вам нужно использовать её с круглыми скобками, чтобы вызвать и получить результат. Убедитесь также, что возвращаемый тип функции соответствует ожидаемому типу.
Ты ж фпц мучаешь?
Да, забыл указать указал
Вот наблюдаю за вопросами в чатиках. Как только свяжется человек с фпц, так сразу разные странные хотелки в его голове поселяются 😂
А чо б странные. Очень удобно и шустро работает
Человек думает и разбирается как оно устроено. Fpc к этому располагает
Ничо что переменная у тебя TGetOutPath а свойство string?
FPC конкретно бустит 👍
Причем как язык иногда сильнее чем начинка RTL)
Я не видел в обсуждении, но вкратце, ты возвращаешь адрес функции т.к. режим objfpc, а от тебя ждут её результат, поэтому там скобки нужны function CTilesDownloader.GetOutPath: String; begin Result := FGetOutPath(); end;
К этому решению и пришли. Нейросеть подсказала
Обсуждают сегодня