169 похожих чатов

Добрый вечер. Хочу чтобы у меня в классе поле было

функцией, которая возвращает строку. Делаю так:
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"
Как поправить?

12 ответов

21 просмотр
Kirill-Filippenok Автор вопроса

Нейросеть ответила 😄 Ошибка, которую вы видите, связана с тем, что 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 является указателем на функцию и вы хотите использовать её как функцию, то вам нужно использовать её с круглыми скобками, чтобы вызвать и получить результат. Убедитесь также, что возвращаемый тип функции соответствует ожидаемому типу.

Kirill-Filippenok Автор вопроса
Nik
Ты ж фпц мучаешь?

Да, забыл указать указал

Kirill Filippenok
Да, забыл указать указал

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

Kirill-Filippenok Автор вопроса
Nik
Вот наблюдаю за вопросами в чатиках. Как только св...

А чо б странные. Очень удобно и шустро работает

Nik
Вот наблюдаю за вопросами в чатиках. Как только св...

Человек думает и разбирается как оно устроено. Fpc к этому располагает

Ничо что переменная у тебя TGetOutPath а свойство string?

notme
FPC конкретно бустит 👍

Причем как язык иногда сильнее чем начинка RTL)

Kirill Filippenok
Та уже разобрались

Я не видел в обсуждении, но вкратце, ты возвращаешь адрес функции т.к. режим objfpc, а от тебя ждут её результат, поэтому там скобки нужны function CTilesDownloader.GetOutPath: String; begin Result := FGetOutPath(); end;

Kirill-Filippenok Автор вопроса

Похожие вопросы

Обсуждают сегодня

Господа, а что сейчас вообще с рынком труда на делфи происходит? Какова ситуация?
Rꙮman Yankꙮvsky
29
А вообще, что может смущать в самой Julia - бы сказал, что нет единого стандартного подхода по многим моментам, поэтому многое выглядит как "хаки" и произвол. Короче говоря, с...
Viktor G.
2
30500 за редактор? )
Владимир
47
а через ESC-код ?
Alexey Kulakov
29
Чёт не понял, я ж правильной функцией воспользовался чтобы вывести отладочную информацию? но что-то она не ловится
notme
18
У меня есть функция где происходит это: write_bit(buffer, 1); write_bit(buffer, 0); write_bit(buffer, 1); write_bit(buffer, 1); write_bit(buffer, 1); w...
~
14
Добрый день! Скажите пожалуйста, а какие программы вы бы рекомендовали написать для того, чтобы научиться управлять памятью? Можно написать динамический массив, можно связный ...
Филипп
7
Недавно Google Project Zero нашёл багу в SQLite с помощью LLM, о чём достаточно было шумно в определённых интернетах, которые сопровождались рассказами, что скоро всех "ибешни...
Alex Sherbakov
5
Ребят в СИ можно реализовать ООП?
Николай
33
https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_h_common.erl#L174 https://github.com/erlang/otp/blob/OTP-27.1/lib/kernel/src/logger_olp.erl#L76 15 лет назад...
Maksim Lapshin
20
Карта сайта