AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Was mache ich falsch?

Ein Thema von [TP]Hawk274 · begonnen am 10. Apr 2003 · letzter Beitrag vom 11. Apr 2003
Antwort Antwort
[TP]Hawk274
(Gast)

n/a Beiträge
 
#1

Was mache ich falsch?

  Alt 10. Apr 2003, 12:47
Delphi-Quellcode:
unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, StdCtrls;

type
  ptrEmployment = ^TEmployment;
  TEmployment = record
    FWorkInstruction : String; //ausgeführte Tätigkeit
    FDuration : Double; //Dauer
    FDepartment : String; //Abteilung pro Tätigkeit
  end;

  TTest = class
  private
    FEmployment: Array[0..4] of TEmployment;
    function GetWorkInstruction(nIndex: Integer): String;
  public
    property Taetigkeit[nIndex: Integer]: String read GetWorkInstruction;
    constructor Create;
  end;

  TForm1 = class(TForm)
    Button1: TButton;
    Button2: TButton;
    Label1: TLabel;
    procedure Button1Click(Sender: TObject);
    procedure Button2Click(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
    Montag: TTest;
  end;

  var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TTest }

constructor TTest.Create;
var
  i: Integer;
begin
  for i := 0 to 4 do
  begin
    FEmployment[ i ].FWorkInstruction := '';
    FEmployment[ i ].FDuration := 0;
    FEmployment[ i ].FDepartment := '';
  end;
  FEmployment[ 0 ].FWorkInstruction := 'Test';
end;

function TTest.GetWorkInstruction(nIndex: Integer): String;
begin
  Result := FEmployment[ nIndex ].FWorkInstruction;
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
  Montag.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Label1.Caption := Montag.Taetigkeit[ 0 ];
end;

end.
Wenn ich nun ein Objekt der Klasse TTest erzeuge und anschließend den Konstruktur aufrufe, dann kommt dauernt eine Access Violation. Aber warum? Ich versteh es nicht? Muss ich vielleicht vorher noch Speicher reservieren? Kann mir das vielleicht jemand mal erklären, steige nicht hinter den Fehler!
thx
  Mit Zitat antworten Zitat
Tom

Registriert seit: 8. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#2
  Alt 10. Apr 2003, 13:00
Zitat von [TP:
Hawk274]
Delphi-Quellcode:
constructor TTest.Create;
var
  i: Integer;
begin
  for i := 0 to 4 do
Du hast nach dem Begin ein Inherited vergessen. Ist aber nicht die Ursache für den Fehler:

Zitat:
Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
begin
  Montag.Create;
end;

procedure TForm1.Button2Click(Sender: TObject);
begin
  Label1.Caption := Montag.Taetigkeit[ 0 ];
end;
1) Ich hoffe mal, dass Du nur zu Testzwecken den Anwender nötigst erst auf Button1 und dann auf Button2 zu klicken.
2) Montag musst Du erst einmal erstellen: Montag.Create; Montag gibt es nicht, also kannst Du auch nicht auf eine Methode von Montag zugreifen. Also: Montag := TTest.Create;
  Mit Zitat antworten Zitat
Benutzerbild von sakura
sakura

Registriert seit: 10. Jun 2002
Ort: Unterhaching
11.412 Beiträge
 
Delphi 12 Athens
 
#3
  Alt 10. Apr 2003, 13:02
Zwei Änderungen:

Code:
constructor TTest.Create;
var
  i: Integer;
begin
  [color=#1100ff]// einfügen
  inherited;[/color]
  for i := 0 to 4 do
  begin
    FEmployment[ i ].FWorkInstruction := '';
    FEmployment[ i ].FDuration := 0;
    FEmployment[ i ].FDepartment := '';
  end;
  FEmployment[ 0 ].FWorkInstruction := 'Test';
end;


// und
// anstatt
Monatg.Create
// musst Du folgendes schreiben:
[color=#1100ff]Montag := TTest.Create;[/color]
......
Daniel Lizbeth
Ich bin nicht zurück, ich tue nur so
  Mit Zitat antworten Zitat
[TP]Hawk274
(Gast)

n/a Beiträge
 
#4
  Alt 10. Apr 2003, 17:11
Zitat:
1) Ich hoffe mal, dass Du nur zu Testzwecken den Anwender nötigst erst auf Button1 und dann auf Button2 zu klicken.
2) Montag musst Du erst einmal erstellen:
Das ist nur ein Programm zu Testzwecken. Dieses Programm werde nur ich bedienen. Ich werde immer erst auf Button1 und dann auf Button2 drücken. Soviel zum Ablauf.
Zitat:
Montag gibt es nicht, also kannst Du auch nicht auf eine Methode von Montag zugreifen.
Stimmt ... *KopfAufDieTastaturSchlag* ...
Zitat:
Du hast nach dem Begin ein Inherited vergessen.
Warum denn das? Ich leite doch meine Klasse von keiner ab?
Ist es eigentlich ratsam eine Klasse immer von TObject abzuleiten?
  Mit Zitat antworten Zitat
Tom

Registriert seit: 8. Jan 2003
318 Beiträge
 
RAD-Studio 2009 Pro
 
#5
  Alt 11. Apr 2003, 00:02
Zitat von [TP:
Hawk274]Warum denn das? Ich leite doch meine Klasse von keiner ab?
Nicht? Woher kommen dann schon Methoden wie Free etc? Aus der Delphi-Hilfe
Zitat:
Wird keine Vorfahrklasse angegeben, erbt die neue Klasse direkt vom vordefinierten Basistyp TObject.
Simsalabim ..., da ist ein Vorfahre ...

Zitat:
Ist es eigentlich ratsam eine Klasse immer von TObject abzuleiten?
Mindestens werden diese immer von TObject abgeleitet. Nachfolge-Klassen von TObjekt sind natürlich auch sinnvoll:
TObject > ... > TEdit > TMyEdit
  Mit Zitat antworten Zitat
Antwort Antwort


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 23:31 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