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 ответов

6 просмотров
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 Автор вопроса

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

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

лучше скажите, причём тут паскаль?
Alexey Kulakov
36
Это может быть все-таки не флудвейт? у меня ботфазер принимает изменения и отображает даже что они изменились, на видео видно что он прислал якобы уже измененное описание, н...
OVERLINK
13
День добрый, подскажите пожалуйста, есть ли какой-то способ сказать ребару не компилировать определённое приложение? Всю доку их перечиатл ничего подобного не нашёл
Кирилл
14
Здравствуйте, хочу сделать HelloWorld в консоли Дельфи, но функция API ничего не выводит, что я делаю не так? program Hello; {$APPTYPE CONSOLE} uses System.SysUtils, WinAPI.Wi...
Sergey Vinogradov
20
Вопрос на перед, на следующую пятницу. Сколько строк кода можно вешать на одного программиста, понятно что если проект хорошо написан то можно и миллион. Но есть же где то пре...
AlekseyK Kluchnikov
31
Немного оффтопа: а кто на чем сидит для осдева в плане ide/редактора? Последнее время сидел на vscode, но я его прям не могу нормально воспринимать, перешел на сlion, но меня...
Evg Resh
29
#include <stdio.h> #include <stdlib.h> #include <time.h> int** generate_table(int size_matrix) { int** matrix = (int**)malloc(size_matrix * sizeof(int*)); for (int i ...
Чувак
1
Куда проще? Пример можно? У Perl - C-подобный синтаксис, характерный для тонны других языков. На нём я именно "сел и начала писать за вечер" когда-то давно. У другого языка, к...
Oleg Volkov
2
Может и не нужны смышленые программисты? Промпт-инженеры всё сделают. Гугл говорит (впрочем все могут говорить), что у них уже больше 50% код пишет ИИ. Может мы требуем от во...
Slava
4
How to reverse string in go? package main import "fmt" func main() { input := "The quick brown 狐 jumped over the lazy 犬" // Get Unicode code points. ...
Oleg Volkov
2
Карта сайта