powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Private symbol declared but never used
25 сообщений из 41, страница 1 из 2
Private symbol declared but never used
    #39773807
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
type
  TListener = record
    FName: string;
    FStatus: string;
    FGroupName: string;
  end;

  TListeners = class(TObject)
  private
    FCount: Integer;
    FListeners: array of TListener;
    procedure Add(NewListener: TListener);
    function Get(Index:Integer): TListener;
    procedure Put(Index:Integer; NewListener: TListener); // Пока не используется
    property Listener[Index: Integer]: TListener read Get write Put; default;
  public
    constructor Create;
    Destructor Destroy; override;
  end;


При компилляции выдает предупреждение
автор[dcc32 Hint] Unit1.pas(23): H2219 Private symbol 'Listener' declared but never used
Хотя использование (хотя и неявное, ну для этого и стоит default в описании свойства) в программе есть:
Код: pascal
1.
2.
3.
...
showmessage(Listeners[95000].FName);
...


Как так? Как избавиться от сообщения компиллятора? Или неправильно что-то в классе?
Спасибо :)
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773811
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afordХотя использование (хотя и неявное, ну для этого и стоит default в описании свойства) в
программе есть

Почувствуй разницу между Listener и Listeners.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773822
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Dimitry Sibiryakov, я могу заменить Listener на qqq - результат будет тем же.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773830
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
У вас Listener в PRIVATE секции и к нему из кода самого TListeners обращений нет.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773873
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
DimaBr, ну как же это нет, а вот это?
Код: pascal
1.
showmessage(Listeners[95000].FName);



Это равнозначно записи вида (т.к. прописано default, см. векторные свойства)
Код: pascal
1.
showmessage(Listeners.Listener[95000].FName);


Так что все используется...
Вот подробнее:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TForm1.Btn1Click(Sender: TObject);
var
  Listener: TListener;
  i: Integer;
begin
  Listeners:= TListeners.Create;
  for i:= 0 to 100000 do
  begin
    Listener.FName:= 'ФИО ' + IntToStr(i);
    Listener.FStatus:= 'Статус ' + IntToStr(i);
    Listener.FGroupName:= 'Группа ' + IntToStr(i);
    Listeners.Add(Listener);
  end;
  showmessage(Listeners[95000].FName);
  Listeners.Destroy;
end;
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773874
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Кстати, с записью авторListeners.Listener[95000].FName проблем нет, а если уберу Listener - все работает, но компиллятор выдает предупреждение...
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773876
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Переместил определение свойства в public - предупреждение пропало. Но все равно не понятно почему так...
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773881
asutp2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aford,

ты вообще читаешь, что тебе народ пишет?))))))))))
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773886
Dimitry Sibiryakov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afordЭто равнозначно

Нет, совсем не равнозначно. Listeners у тебя массив, а не свойство.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773890
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afordDimaBr, ну как же это нет, а вот это?
Код: pascal
1.
showmessage(Listeners[95000].FName);



Это равнозначно записи вида (т.к. прописано default, см. векторные свойства)
Код: pascal
1.
showmessage(Listeners.Listener[95000].FName);


Так что все используется...
Вот подробнее:
Код: pascal
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
procedure TForm1.Btn1Click(Sender: TObject);
var
  Listener: TListener;
  i: Integer;
begin
  Listeners:= TListeners.Create;
  for i:= 0 to 100000 do
  begin
    Listener.FName:= 'ФИО ' + IntToStr(i);
    Listener.FStatus:= 'Статус ' + IntToStr(i);
    Listener.FGroupName:= 'Группа ' + IntToStr(i);
    Listeners.Add(Listener);
  end;
  showmessage(Listeners[95000].FName);
  Listeners.Destroy;
end;


свойство Listeners не используется в теле TListeners и находится в ПРИВАТ секции.
То что вы используете его ХАКЕРСКИМ способом в том же модуле в другом классе, не говорит о том что делаете правильно.
Перенесите TListener в другой модуль и попробуйте достучаться к Listeners из метода формы
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773892
RWolf
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Dimitry SibiryakovafordЭто равнозначно

Нет, совсем не равнозначно. Listeners у тебя массив, а не свойство.


Таки свойство.
Код: pascal
1.
2.
3.
4.
5.
6.
7.
Unit1.pas.49: showmessage(Listeners[95000].FName);
004AEB60 8D4DF4           lea ecx,[ebp-$0c]
004AEB63 BA18730100       mov edx,$00017318
004AEB68 A134B84B00       mov eax,[Listeners]
004AEB6D E87A000000       call TListeners.Get
004AEB72 8B45F4           mov eax,[ebp-$0c]
004AEB75 E8B64FFDFF       call ShowMessage
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773897
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Listeners - это вообще-то переменная объекта TListeners или объект (как правильно, или переменная на объект, суть ясна в общем).
Listener - это свойство, которое пишет и читает поле FListener, которое в свою очередь является массивов записей TListener типа record
Запутал вас и себя)))
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773898
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
aford,

это явный баг Delphi. Private член класса не должен быть доступен.
Если же private свойство объявлено default, компилятор должен либо выдать error, либо не выдавать такого warning.

Ну а конкретно тебе - перенеси свойство из private в public, вот и всё решение "проблемы".
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773900
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrТо что вы используете его ХАКЕРСКИМ способом в том же модуле в другом классе, не говорит о том что делаете правильно.
Перенесите TListener в другой модуль и попробуйте достучаться к Listeners из метода формы
Все равно доступен. Это баг.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773901
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Фэйтл Эра, я так уже сделал еще после 2-го сообщения в ветке)
авторэто явный баг Delphi. Private член класса не должен быть доступен.

Почему, в этом же модуле должен быть доступен, или я не дочитался принципов ООП, но спорить тут не стану.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773903
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
14.02.2019 15:16, Фэйтл Эра пишет:
> это явный баг Delphi. Private член класса не должен быть доступен.

иди азбуку учи.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773905
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afordПочему, в этом же модуле должен быть доступен, или я не дочитался принципов ООП, но спорить тут не стану.
В рамках модуля все доступно. В нарушение всех принципов ООП. Дельфийская тупость, но позволяющая обойти другую топость с запретом циклических ссылок модулей друг на друга.
---
Но тут явный баг Delphi: private свойство доступно, если оно default. Как минимум, в D2007.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773909
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
14.02.2019 15:27, Фэйтл Эра пишет:
> Дельфийская тупость, но позволяющая обойти другую топость

аклинизмы проникли в мозг...
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773910
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраВсе равно доступен. Это баг.

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

If a class has a default property, you can access that property with the abbreviation object[index], which is equivalent to object.property[index]. For example, given the declaration above, StringArray.Strings[7] can be abbreviated to StringArray[7]. A class can have only one default property with a given signature (array parameter list), but it is possible to overload the default property. Changing or hiding the default property in descendent classes may lead to unexpected behavior, since the compiler always binds to properties statically.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773911
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBr,

не согласен. А если ты и прав, то, значит, баг в том, что ворнинг генерируется.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773913
Мимопроходящий
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
14.02.2019 15:33, Фэйтл Эра пишет:
> не согласен.

в спортлото пиши, кловун.
Posted via ActualForum NNTP Server 1.5
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773915
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл Эразначит, баг в том, что ворнинг генерируется
Это действительно баг, тут ворнинга быть не должно. А вот видимость приватных членов в рамках модуля не баг. Если хочешь строгой приватности используй strict private.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773918
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Даже объявление в другом модуле даёт доступ к privat-default свойству
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773920
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrДаже объявление в другом модуле даёт доступ к privat-default свойству
Ох какой лютый жучара
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773924
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
топикстартеру, либо избавляться от дефолтного свойства, либо его декларацию заключить между дируктивами {$hints off}property...{$hints on} (если не напрягает вылезшая неожиданность)
...
Рейтинг: 0 / 0
25 сообщений из 41, страница 1 из 2
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Private symbol declared but never used
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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