AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Sprachen und Entwicklungsumgebungen Object-Pascal / Delphi-Language Delphi Rätsel über Rätsel... AV, wo es keine geben *kann*
Thema durchsuchen
Ansicht
Themen-Optionen

Rätsel über Rätsel... AV, wo es keine geben *kann*

Ein Thema von Meflin · begonnen am 31. Jul 2005 · letzter Beitrag vom 1. Aug 2005
Antwort Antwort
Seite 1 von 2  1 2      
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#1

Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 31. Jul 2005, 13:09
Aloha!

Ich habe ein Problem, das sich eigentlich niemand den ich bis jetzt fragte erklären kann: im constructor meiner Komponente erstelle ich u.a. eine TStringList, aber diese wird nicht erzeugt, der Debugger sagt mir dass sie nil ist.

Delphi-Quellcode:
  
private
  fPasswords: TStringList;
...
public
  constructor Create(AOwner: TComponent); reintroduce;
...
constructor TPasswordList.Create(AOwner: TComponent);
begin
  inherited Create(AOwner);
  fPasswords := TStringList.Create;
  fCount := fPasswords.Count;
  fCS := TCriticalSection.Create;
end;
wenn ich dann versuche z.b. die addmethode meiner kompo aufzurufen, die so aussieht:
Delphi-Quellcode:
function TPasswordList.Add(const s: string): Integer;
begin
  if ThreadSave then CS.Enter;
  Result := fPasswords.Add(s);
  if ThreadSave then CS.Leave;
  fCount := fPasswords.Count;
end;
und ich da einen Breakpoint setze, zeigt der Debugger an dass fPasswords nil ist und folglich endet das ganze in einer AV.

Aber wieso?

  Mit Zitat antworten Zitat
Benutzerbild von fkerber
fkerber
(CodeLib-Manager)

Registriert seit: 9. Jul 2003
Ort: Ensdorf
6.723 Beiträge
 
Delphi XE Professional
 
#2

Re: Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 31. Jul 2005, 13:11
Hi!

Und Zeile 11 des ersten Blocks gibt keine AV?


Ciao Frederic
Frederic Kerber
  Mit Zitat antworten Zitat
Benutzerbild von Jens Schumann
Jens Schumann

Registriert seit: 27. Apr 2003
Ort: Bad Honnef
1.644 Beiträge
 
Delphi 2009 Professional
 
#3

Re: Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 31. Jul 2005, 13:12
Hallo,
die Sourceausschnitt sieht natürlich Ok aus. Schieb doch mal den kompletten Quelltext rüber.
I come from outer space to save the human race
  Mit Zitat antworten Zitat
Keldorn

Registriert seit: 6. Mär 2003
Ort: Meißen
876 Beiträge
 
Delphi 10.1 Berlin Professional
 
#4

Re: Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 31. Jul 2005, 13:17
ist die Stringliste eine property? wenn ja, dann brauchst du dort eine Set-methode, wo du assign verwendest, eine einfache Zuweisung reicht hier nicht.
Delphi-Quellcode:
procedure Set...
  fpasswords.assign(value);
Mfg Frank

Lükes Grundlage der Programmierung:
Es wird nicht funktionieren
(Murphy)
  Mit Zitat antworten Zitat
xaromz

Registriert seit: 18. Mär 2005
1.682 Beiträge
 
Delphi 2006 Enterprise
 
#5

Re: Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 31. Jul 2005, 13:31
Hallo,

Zitat von Meflin:
Delphi-Quellcode:
constructor Create(AOwner: TComponent); reintroduce;
...
was für einen Vorfahrtyp hat denn dein Objekt? normalerweise braucht man kein reintroduce für den Konstruktor. Wird dieser denn überhaupt aufgerufen?

Gruß
xaromz
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#6

Re: Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 31. Jul 2005, 13:49
wenn ich mir das so anschaue sieht es aus als ob der constructor die gleichen parameter hat wie der vorgänger. Dementsprechend solltest du anstelle von reintroduce lieber override nehmen und schon sollte das ganze funktionieren. Allerdings würde ich dann auch vermuten das der constructor bisher nie aufgerufen wurde sondern immer der des vorfahren
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Benutzerbild von Meflin
Meflin

Registriert seit: 21. Aug 2003
4.856 Beiträge
 
#7

Re: Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 31. Jul 2005, 15:27
Merci, mit override funktioniert das ganze wunderbarst

  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: München
11.412 Beiträge
 
Delphi 11 Alexandria
 
#8

Re: Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 31. Jul 2005, 16:31
Zitat von Keldorn:
ist die Stringliste eine property? wenn ja, dann brauchst du dort eine Set-methode, wo du assign verwendest, eine einfache Zuweisung reicht hier nicht.
Der von Dir vorgeschlagene Weg ist zwar der korrekte, aber der andere ist auch eine theoretische Möglichkeit, auch wenn einen OOP-Freak das Grausen bei solch einem Anblick bekommt

......
Daniel W.
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
Benutzerbild von SirThornberry
SirThornberry
(Moderator)

Registriert seit: 23. Sep 2003
Ort: Bockwen
12.235 Beiträge
 
Delphi 2006 Professional
 
#9

Re: Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 1. Aug 2005, 15:19
falls man doch mal den Constructor von einer Componente neu definieren will dann geht das so (in dem Beispiel soll dem Constructor noch ein String übergeben bekommen)
Delphi-Quellcode:
  TTestcomp = class(TComponent)
  private
    fCaption: String;
  public
    constructor Create(AOwner: TComponent); overload; override;
    constructor Create(AOwner: TComponent; ACaption: String); overload;
  end;

constructor TTestcomp.Create(AOwner: TComponent);
begin
  Create(AOwner, 'StandardString');
end;

constructor TTestcomp.Create(AOwner: TComponent; ACaption: String);
begin
  fCaption := ACaption;
  inherited Create(AOwner);
end;
Wird also der ursprungsconstructor aufgerufen (zum Beispiel weil auf TComponent gecastet wurde so wie delphi es beim automatischen creieren macht, so ruft der überschriebene Constructor den neuen Constructor mit einem Standardwert auf welcher dann die eignetliche Aufgaben erledigt.
Jens
Mit Source ist es wie mit Kunst - Hauptsache der Künstler versteht's
  Mit Zitat antworten Zitat
Sidorion

Registriert seit: 23. Jun 2005
403 Beiträge
 
#10

Re: Rätsel über Rätsel... AV, wo es keine geben *kann*

  Alt 1. Aug 2005, 15:37
Ich will nicht pedantisch erscheinen, aber es muss heissen:
Delphi-Quellcode:
    constructor Create(AOwner: TComponent); overload; override;
    constructor Create(AOwner: TComponent; ACaption: String); reintroduce; overload;
Fragt mich bitte nicht warum die Reihenfolge bei den direktiven andersrum ist, aber da steckt man nicht drin
Wenn du das reintroduce weglasst meckert wegen der Überschreiberei rum
Manchmal sehen Dinge, die wie Dinge aussehen wollen mehr wie Dinge aus, als Dinge
<Esmerelda Wetterwachs>
  Mit Zitat antworten Zitat
Antwort Antwort
Seite 1 von 2  1 2      


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 15:09 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