Проблема с использованием статических полей напрямую

Вопросы программирования на Free Pascal, использования компилятора и утилит.

Модератор: Модераторы

Проблема с использованием статических полей напрямую

Сообщение Brainenjii » 31.08.2011 12:28:15

Обращение к статическому полю через свойство напрямую происходит некорректно:
Код: Выделить всё
program Project1;

{$mode objfpc}{$H+}
{$static on}

uses
  {$IFDEF UNIX}{$IFDEF UseCThreads}
  cthreads,
  {$ENDIF}{$ENDIF}
  Classes
  { you can add units after this };

{$R *.res}

Type

{ TMyClass }

TMyClass = Class
  Private
    fMyInteger: Integer;  Static;
    fMyString: ShortString; Static;
    Function GetInternalInteger: Integer;
    Function GetInternalString: String;
  Public
    Property MyString: ShortString Read fMyString;
    Property MyInteger: Integer Read fMyInteger;

    Property InternalString: String Read GetInternalString;
    Property InternalInteger: Integer Read GetInternalInteger;
    Constructor Create;
End;

{ TMyClass }

Function TMyClass.GetInternalInteger: Integer;
Begin
  Result := fMyInteger;
end;

Function TMyClass.GetInternalString: String;
Begin
  Result := fMyString;
end;

Constructor TMyClass.Create;
Begin
  fMyInteger := 100;
  fMyString := 'hello world';
End;

begin
  With TMyClass.Create Do
    Begin
      WriteLn(MyInteger); // <- Мусор
      WriteLn(MyString); // <- Пустая строка

      WriteLn(InternalInteger); // <- 100
      WriteLn(InternalString); // <- Hello world
      Free;
    End;
end.
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Проблема с использованием статических полей напрямую

Сообщение MageSlayer » 31.08.2011 22:25:35

И из каких соображений вы запостили это тут, а не на баг-трекер?
MageSlayer
постоялец
 
Сообщения: 216
Зарегистрирован: 07.09.2006 12:30:44

Re: Проблема с использованием статических полей напрямую

Сообщение Brainenjii » 01.09.2011 00:27:48

Я сначала думал, что это я неправильно обращаюсь к статическим полям (пост много раз корректировался). После полутора часов экспериментов свёл к этому варианту
Аватара пользователя
Brainenjii
энтузиаст
 
Сообщения: 1351
Зарегистрирован: 10.05.2007 00:04:46

Re: Проблема с использованием статических полей напрямую

Сообщение Kitayets » 01.09.2011 18:37:37

А вы разве не знали что свойства (property) нельзя передавать как аргумент в функции и процедуры?

сделайте поля публичными и передавайте их в процедуру, либо введите временные переменные и передайте им значения свойств, после чего передавайте в процедуру.

ИМХО ошибка тут одна - компилятор должен был выдать ошибку при попытки передать свойство в процедуру.
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24

Re: Проблема с использованием статических полей напрямую

Сообщение Ask » 01.09.2011 19:45:29

Kitayets писал(а):свойства (property) нельзя передавать как аргумент в функции и процедуры?

Надеюсь, это была шутка.

Brainenjii: Я считаю, что баг-репорт закрыли зря. Как минимум, компилятор должен выдавать ошибку,
а ещё лучше просто работать -- не вижу, почему нормальное свойство не может обращаться к статической переменной.
ИМХО это максимум тянет на warning. Попробую побороться.
Ask
постоялец
 
Сообщения: 163
Зарегистрирован: 25.12.2008 03:51:37

Re: Проблема с использованием статических полей напрямую

Сообщение Mr.Smart » 01.09.2011 19:46:59

Kitayets, что-то я не вижу в коде криминала. Плохо смотрю?
Mr.Smart
долгожитель
 
Сообщения: 1796
Зарегистрирован: 29.03.2008 01:01:11
Откуда: из леса!

Re: Проблема с использованием статических полей напрямую

Сообщение Kitayets » 02.09.2011 00:37:13

прошу извинить, попутал. свойство нельзя передавать по ссылке (через var параметр), а в обычном случае, при передаче по значению, видимо должна создаться автоматическая переменная.
Kitayets
постоялец
 
Сообщения: 171
Зарегистрирован: 05.05.2010 21:15:24


Вернуться в Free Pascal Compiler

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1

Рейтинг@Mail.ru