Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value. / 9 сообщений из 9, страница 1 из 1
31.08.2018, 14:57
    #39696272
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
Добрый день!
Есть record
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
  TActionParameter=record
    DrIRangeMin,
    DrIRangeMax,
    FDSettings,
    TCMin,
    TCMax:Double;

    OIParamOperation,
    TCToolNo:string;

    class function Empty:TActionParameter; static;
    function IsFilled:Boolean;
  end;

  TPointActionParameters=array of TActionParameter;

.....
{ TActionParameter }

class function TActionParameter.Empty: TActionParameter;
begin
  Result:=default(TActionParameter);
end;


Данный массив записей находится в классе:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
  TCPPoint=class
  private
    FIDCPPoint,
    FIDImage,
    FIDModel:Integer;

    PointActionParameters:TPointActionParameters;

    function GetItemsCount: Integer;
    procedure SetItemsCount(const Value: Integer);
  public
    property ItemsCount:Integer read GetItemsCount write SetItemsCount;
    property Items[Index: Integer]:TActionParameter read GetItem write SetItem;
  end;

function TCPPoint.GetItemsCount: Integer;
begin
  Result:=Length(PointActionParameters);
end;

procedure TCPPoint.SetItemsCount(const Value: Integer);
var
  i:Integer;
begin
  SetLength(PointActionParameters,Value);
  for I := Low(PointActionParameters) to High(PointActionParameters) do
    begin
      PointActionParameters[i]:=PointActionParameters[i].Empty;
    end;
end;



После создания класса происходит указание размера массива:
CPPoint.ItemsCount:=SpinEdit1.Value;

Далее,
хочу обратиться к значениям record'a класса:
Код: pascal
1.
2.
3.
4.
5.
6.
var
  a:TActionParameter;
begin
  a:=CPPoint.Items[AIndex];
  leToolSettingsFact.Text:=FloatToStr(a.FDSettings); //навожу мышью - значение=0, жму F7 -EConvertError '' is not a valid floating value
  leToolID.Text:=IntToStr(a.FDidTool); // аналогично :(



Причём, если нажать Continue и повторно выполнить эту же процедуру - всё ОК.

Что я сделал не так?

Спасибо.
...
Рейтинг: 0 / 0
31.08.2018, 15:05
    #39696278
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
PointActionParameters[i]:=PointActionParameters[i].Empty;

заменить на

PointActionParameters[i]:=TActionParameter.Empty;
...
Рейтинг: 0 / 0
31.08.2018, 15:06
    #39696280
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
JaDi,

Спасибо за подсказку, не заметил.
Но не помогло.
...
Рейтинг: 0 / 0
31.08.2018, 15:09
    #39696281
_Vasilisk_
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
JaDiзаменить наА смысл?
Kast2KЧто я сделал не так?Этот код
Kast2K
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
  TCPPoint=class
  private
    FIDCPPoint,
    FIDImage,
    FIDModel:Integer;

    PointActionParameters:TPointActionParameters;

    function GetItemsCount: Integer;
    procedure SetItemsCount(const Value: Integer);
  public
    property ItemsCount:Integer read GetItemsCount write SetItemsCount;
    property Items[Index: Integer]:TActionParameter read GetItem write SetItem;
  end;

компилироваться не будет. Методы GetItem и SetItem не определены
...
Рейтинг: 0 / 0
31.08.2018, 15:11
    #39696283
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
Тогда смотреть на код создания CPPoint -- возможно, там неыерное количество объектов или вовсе не создано, поэтому при обращении по индексу происходит порча памяти и левая ошибка (a:=CPPoint.Items[AIndex];).

Проверку можно включить в настройках проекта -- см опцию range checking (project options -- compiling).
...
Рейтинг: 0 / 0
31.08.2018, 15:14
    #39696285
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
_Vasilisk_,

Компилируется, просто забыл удалить в примере для форума.
JaDi,
Но ведь в дебагере при наведении мыши или выставлении Watch на интересующий элемент я вижу всю структуру - нули на Double и '' на string
...
Рейтинг: 0 / 0
31.08.2018, 15:17
    #39696287
JayDi
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
Kast2K,

когда память испорчена, то даже стандартные функции могут левые ошибки выдавать (причем это может быть даже в совершенно другом месте кода, как повезет). Собственно, "левые ошибки" -- это первый признак того, что где-то есть обращение по левому индексу, к несозданному объекту или повторное уничтожение.
...
Рейтинг: 0 / 0
31.08.2018, 15:19
    #39696288
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
JaDi,

Спасибо, пойду рыть дальше
...
Рейтинг: 0 / 0
31.08.2018, 15:30
    #39696293
Kast2K
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value.
Ларчик открывался просто и глупо (мой косяк):
на leToolSettingsFact (TlabeledEdit) было прописано событие OnChange в котором выполнялась функция StrToFloat(leToolSettingsFact.Text) и запись значения в элемент записи.
А дебагер показывал ошибку в другой точке (следующем шаге).


Пятница :) Пора домой...

Всем спасибо за участие!
...
Рейтинг: 0 / 0
Форумы / Delphi [игнор отключен] [закрыт для гостей] / ToString и FloatToStr. Ошибка EConvertError '' is not a valid floating value. / 9 сообщений из 9, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]