Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Object-Pascal / Delphi-Language (https://www.delphipraxis.net/32-object-pascal-delphi-language/)
-   -   Delphi Kein Zugriff auf privates Symbol (https://www.delphipraxis.net/210346-kein-zugriff-auf-privates-symbol.html)

Delbor 8. Apr 2022 22:46

Delphi-Version: 11 Alexandria

Kein Zugriff auf privates Symbol
 
Hi zusammen

Die Deklaration:

Delphi-Quellcode:
  private { Private-Deklarationen }
    FInsertPdfDocument : TInsertPdfDocument;
    FReportList: TStringList;
    FAppDataPath: string;
    FProjectPath: string;
    FOwnFolderList: TStringList;  //<==
    FTextSelection: string;
    procedure ShowCategoryPanel(Sender: TObject);
    procedure WriteBookmarkMemo;
    procedure DoTextSelectionEvent(Sender: TObject; const ATextSelection: String);
    function projectfolder : String;


    { Public-Deklarationen }
    property OwnFolderList : TStringlist read FOwnFolderList write FOwnFolderList;  //<===
    property Appdatapath: String read FAppDataPath write FAppDataPath;
  end;
Der Zurgriff:
Delphi-Quellcode:
    if OfficerAlexMain.OwnFolderList <> nil then     //<== Fehler
    begin
      if OfficerAlexMain.OwnFolderList.IndexOf(aRealName) <> -1 then
      begin
        Node.ImageIndex := 3;
        Node.SelectedIndex := 3;
      end
    end;
Die Fehlermeldung:
Zitat:

[dcc32 Fehler] AlexOpenfileFrameUnit.pas(199): E2361 Auf private-Symbol TOfficerAlexMain.OwnFolderList kann nicht zugegriffen werden
Das hat funktioniert, bis ich heute abend einen TDateTimePicker und ein DateTimeEdit auf ein leeres Tabsheet zog, um sie optisch zu vergleichen.


Gruss
Delbor

haentschman 9. Apr 2022 06:42

AW: Kein Zugriff auf privates Symbol
 
Moin...8-)

Frage:

1. Breakpoint: if OfficerAlexMain.OwnFolderList.IndexOf(aRealName) <> -1 then -> kommt er da an?
2. Wo ist die OwnFolderList erzeugt?
3. Ist die OwnFolderList übergeben?
4. Gibt es keinen constructor der Klasse? -> zeigen. :wink:
5. Welchen Pointer Wert hat: OfficerAlexMain.OwnFolderList hier if OfficerAlexMain.OwnFolderList <> nil then
// besser Assigned(OfficerAlexMain.OwnFolderList) :wink:

Mein Gefühl sagt:
OwnFolderList ist nicht "initialisiert". Da steht ein ungültiger Pointer.
Lösung:
Im constructor FOwnFolderList := nil setzen.
PS:
Zitat:

Das hat funktioniert, bis ich heute abend
...das riecht auch danach. :wink:

hotrs02 9. Apr 2022 07:36

AW: Kein Zugriff auf privates Symbol
 
Das ist ein Fehler bei der Übersetzung, nicht zur Laufzeit. Mit einem Breakpoint wird er da nicht weit kommen. Des weiteren werden Felder einer Instanz automatisch initialisiert, eine Zuweisung von FOwnFolderList := NIL im Konstruktor ist also unnötig.

Was mir direkt auffällt: da steht im Kommentar vor der Eigenschaft OwnFolderList „Puplic-Declarationen“, aber es fehlt der Bezeichner public. Das kann so nicht funktionieren - zumindest nicht ausserhalb der Unit.

Gruß

completestranger 9. Apr 2022 08:08

AW: Kein Zugriff auf privates Symbol
 
Also wenn dein Code ein 1:1 copy & pizza pasta ist, dann fehlt da eindeutig "public".

https://i.imgur.com/tswjTS3.png

Delbor 9. Apr 2022 08:28

AW: Kein Zugriff auf privates Symbol
 
Hi zusammen

@completestranger und hotrs02
Zitat:

Was mir direkt auffällt: da steht im Kommentar vor der Eigenschaft OwnFolderList „Puplic-Declarationen“, aber es fehlt der Bezeichner public.
Ich hatte auskommentierten älteren Code gelöscht, aber das habe ich doch gestern abend tatsächlich übersehen:

Delphi-Quellcode:
    { Public-Deklarationen }
    property OwnFolderList : TStringlist read FOwnFolderList write FOwnFolderList;
Kein Wunder, war das Property privat! Danke, completestranger!!

Gruss
Delbor


Alle Zeitangaben in WEZ +1. Es ist jetzt 15:45 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz