powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Private symbol declared but never used
41 сообщений из 41, показаны все 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
Private symbol declared but never used
    #39773927
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev Alexeyтут ворнинга быть не должно
Его и нет, есть хинт, да :)
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773928
DimaBr
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Либо обратиться к свойству в методе свойства
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773941
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
автортопикстартеру, либо избавляться от дефолтного свойства, либо его декларацию заключить между дируктивами {$hints off}property...{$hints on} (если не напрягает вылезшая неожиданность)

Kazantsev Alexey, так я уже, это, в паблик переместил и варнинга нет)
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773992
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyKazantsev Alexeyтут ворнинга быть не должно
Его и нет, есть хинт, да :)
Текст его не соответствует действительности, в любом случае.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39773997
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
DimaBrДаже объявление в другом модуле даёт доступ к privat-default свойству


Ну, я ж это и писал: 21809560
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774006
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyЕсли хочешь строгой приватности используй strict private.
Deafaul свойство и доступно, даже когда strict... :)
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774007
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраТекст его не соответствует действительности, в любом случае.
Ну да, этот хинт баг.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774010
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Фэйтл ЭраKazantsev AlexeyЕсли хочешь строгой приватности используй strict private.
Deafaul свойство и доступно, даже когда strict... :)
Да я тоже проверил. Межмодульная доступность это баг, что для strict private, что для обычного private.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774149
Vlad F
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Kazantsev AlexeyDimaBrДаже объявление в другом модуле даёт доступ к privat-default свойству
Ох какой лютый жучара
У меня совсем простой вопрос, - зарегистрировал таки хоть кто-нибудь ужо?
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774155
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad FKazantsev Alexeyпропущено...

Ох какой лютый жучара

У меня совсем простой вопрос, - зарегистрировал таки хоть кто-нибудь ужо?
Давай ты.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774265
Василий 2
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Не вижу тут бага. Само свойство не видно, значит, все верно.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774694
Фотография _Vasilisk_
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Vlad F- зарегистрировал таки хоть кто-нибудь ужо?Если, что, то в Rio подтверждается. С хинтом и доступом через strict private
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774737
aford
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Так что в итоге, я прав был или нет? 1-е ответы до сих пор понять не могу.
Listeners - объект классаTListeners
Listener - свойство класса TListeners, которое пишет и читает поле FListener, которое является массивом записей TListener типа record.
Если в методе есть директива default - это умолчание свойства перечисляемого типа и может быть использовано только 1 раз, не путать с default для полей.
Методы и поля, которые объявлены в секции private могут быть использованы только в текущем модуле, где объявлен класс. Если нужно использовать в других - объявляем их в public.
Все правильно?
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774754
Kazantsev Alexey
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afordЕсли в методе есть директива default - это умолчание свойства перечисляемого типа и может быть использовано только 1 раз, не путать с default для полей.
https://stackoverflow.com/questions/10796417/how-to-implement-indexed-default-property

В остальном всё верно.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774759
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
afordМетоды и поля, которые объявлены в секции private могут быть использованы только в текущем модуле, где объявлен класс. Если нужно использовать в других - объявляем их в public.
Все правильно?
Да, все правильно. Ну, можно понудить.

1. Как показали эксперименты, всегда доступно default - свойство. :)

2. И в рамках модуля private тоже недоступны, если они strict private .

3. И есть protected . Это тоже доступны всем в том же модуле. А за пределами модуля тоже видны, но лишь в классах - наследниках.
Но если strict protected - то и в модуле доступны лишь в наследниках.
...
Рейтинг: 0 / 0
Private symbol declared but never used
    #39774762
Фэйтл Эра
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
_Vasilisk_Vlad F- зарегистрировал таки хоть кто-нибудь ужо?Если, что, то в Rio подтверждается. С хинтом и доступом через strict private
Любопытства ради проверил в Lazarus 2.0 x64 (от 3 февраля 2019) - все то же самое.
...
Рейтинг: 0 / 0
41 сообщений из 41, показаны все 2 страниц
Форумы / Delphi [игнор отключен] [закрыт для гостей] / Private symbol declared but never used
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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