AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren

Private Variable "verweigert Zutritt"

Ein Thema von VinzRitt · begonnen am 21. Sep 2011 · letzter Beitrag vom 22. Sep 2011
Antwort Antwort
Seite 1 von 2  1 2   
VinzRitt

Registriert seit: 21. Sep 2011
5 Beiträge
 
#1

Private Variable "verweigert Zutritt"

  Alt 21. Sep 2011, 23:52
Hallö,
Ich bin noch ein ziemlicher Neuling, was Klassen in Delphi betrifft. In meinem Informatikkurs haben wird es heute erst begonnen. Das System der OOP ist mir aber von C++ bereits geläufig, da habe ich mir gedacht: Mach es Mal fertig, aber kaum eine Stunde programmiert, sind meine Grundfeste erschüttert. Hier der problematische Ausschnitt
Delphi-Quellcode:
unit main;

interface

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

type
  TWuerfel = class (TObject)
  private
    // Membervariablen
    m_Augen: integer;
  public
    // Memberfunktionen
    function getAugen (): integer;
    procedure setAugen (worth: integer);

    procedure werfen (TBBActual: TBitBtn);
  end;

var
  Wuerfel: array[1..3] of TWuerfel;

implementation

{$R *.dfm}

//TWuerfel
//Memberfunktionen
// getAugen
function TWuerfel.getAugen (): integer;
begin
  getAugen:= m_Augen;
end; //getAugen

// setAugen
procedure TWuerfel.setAugen (worth: integer);
begin
  m_Augen:= worth; // Hier wird Zugriffsverletzung angezeigt
end; //setAugen

//Beliebige Funktionen
// werfen
// Aufgabe: Zufallszahl bestimmen und auf Würfel ausgeben
procedure TWuerfel.werfen (TBBActual: TBitBtn);
begin
  // Zufallszahl würfeln
  randomize;

  setAugen (random (6)+1);

  // Ergebnis anzeigen
  TBBActual.Glyph.LoadFromFile (intToStr (getAugen) + '.bmp');
end; //werfen

end.
Tja, setAugen tritt mein Problem auf, eine Zugriffsverletzung. Fehlermeldung im Anhang.

Meine Frage ... Hat das überhaupt etwas mit der Variable an sich zu tun? Denn diese habe ich lustig hin und her geschoben und der Fehlercode bleibt immer der gleiche. Wie sähen Mögliche Lösungen aus? Ich hoffe man kann mir helfen!!!


Danke im Voraus
Vinzent Rittel
Miniaturansicht angehängter Grafiken
debugging-error.jpeg  
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#2

AW: Private Variable "verweigert Zutritt"

  Alt 21. Sep 2011, 23:56
Hast du auch irgendwo die Klasse erzeugt?
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
VinzRitt

Registriert seit: 21. Sep 2011
5 Beiträge
 
#3

AW: Private Variable "verweigert Zutritt"

  Alt 22. Sep 2011, 00:36
wie meinen?

Edit: Die Klasse wird ja aufgerufen, per Debugger bin ich auch einige Schritte in Prozeduren der Klasse navigiert. Auch setAuge () lässt sich aufrufen, aber m_Auge will einfach keinen Wert annehmen (lässt sich übrigens auch nicht über Debugger als Ausdruck überwachen)

Geändert von VinzRitt (22. Sep 2011 um 00:39 Uhr)
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#4

AW: Private Variable "verweigert Zutritt"

  Alt 22. Sep 2011, 00:45
Die Klasse wird ja aufgerufen,
Dann zeig mal wie.
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
VinzRitt

Registriert seit: 21. Sep 2011
5 Beiträge
 
#5

AW: Private Variable "verweigert Zutritt"

  Alt 22. Sep 2011, 00:54
Hier der Abgespeckte Quelltext:

Delphi-Quellcode:
unit main;

interface

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

type
  TForm1 = class(TForm)
    LPunktzahl: TLabel;
    BBWuerfel1: TBitBtn;
    BBWuerfel2: TBitBtn;
    BBWuerfel3: TBitBtn;
    procedure BBWuerfel1Click(Sender: TObject);
  private
    { Private-Deklarationen }
  public
    { Public-Deklarationen }
  end;

type
  TWuerfel = class (TObject)
  private
    // Membervariablen
    Augen: integer;
  public
    // Memberfunktionen
    function getAugen (): integer;
    procedure setAugen (worth: integer);

    procedure werfen (TBBActual: TBitBtn);
  end;

var
  Form1: TForm1;
  Wuerfel: array[1..3] of TWuerfel;

implementation

{$R *.dfm}

//TWuerfel
//Memberfunktionen
// getAugen
function TWuerfel.getAugen (): integer;
begin
  getAugen:= Augen;
end; //getAugen

// setAugen
procedure TWuerfel.setAugen (worth: integer);
begin
  Augen:= worth; // Hier wird Zugriffsverletzung angezeigt
end; //setAugen

//Beliebige Funktionen
// werfen
// Aufgabe: Zufallszahl bestimmen und auf Würfel ausgeben
procedure TWuerfel.werfen (TBBActual: TBitBtn);
begin
  // Zufallszahl würfeln
  randomize;

  setAugen (random (6)+1);

  // Ergebnis anzeigen
  TBBActual.Glyph.LoadFromFile (intToStr (getAugen) + '.bmp');
end; //werfen


//TForm1
// BBWuerfel1Click
procedure TForm1.BBWuerfel1Click(Sender: TObject);
begin
  Wuerfel[1].werfen (BBWuerfel1);
end; //BBWuerfelClick

end.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#6

AW: Private Variable "verweigert Zutritt"

  Alt 22. Sep 2011, 01:01
Und wo wird eine Instanz der Klasse erzeugt? Du solltest dich noch mal mit den Grundlagen auseinandersetzen: http://www.michael-puff.de/Programmi...phi/Tutorials/
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
VinzRitt

Registriert seit: 21. Sep 2011
5 Beiträge
 
#7

AW: Private Variable "verweigert Zutritt"

  Alt 22. Sep 2011, 01:05
nochmal ist gut, ich habe das in delphi noch NIE gemacht!!!

Aber danke!!! Bei google, hab ich dazu nämlich WENIG hilfreiches bekommen...
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#8

AW: Private Variable "verweigert Zutritt"

  Alt 22. Sep 2011, 01:13
Delphi-Quellcode:
type
  TWuerfel = class (TObject)
  private
    FAugen: integer;
    function GetAugen: Integer;
    procedure SetAugen(Value: Integer);
  public
    property Augen: Integer read GetAugen write SetAugen;
    procedure Werfen (TBBActual: TBitBtn);
  end;

var
  Form1: TForm1;
  Wuerfel: array[1..3] of TWuerfel; // Warum global und nicht ein Feld der TForm Klasse??
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
Benutzerbild von Luckie
Luckie

Registriert seit: 29. Mai 2002
37.621 Beiträge
 
Delphi 2006 Professional
 
#9

AW: Private Variable "verweigert Zutritt"

  Alt 22. Sep 2011, 01:27
Delphi-Quellcode:
type
  TWuerfel = class (TObject)
  private
    FAugen: integer;
    function GetAugen: Integer;
    procedure SetAugen(Value: Integer);
  public
    property Augen: Integer read GetAugen write SetAugen;
    Constructor Create;
    procedure Werfen;
  end;

type
  TForm1 = class(TForm)
    Button1: TButton;
    procedure FormCreate(Sender: TObject);
    procedure Button1Click(Sender: TObject);
  private
    { Private declarations }
    FWuerfel: TWuerfel;
  public
    { Public declarations }
  end;

var
  Form1: TForm1;

implementation

{$R *.dfm}

{ TWuerfel }

constructor TWuerfel.Create;
begin
  Randomize;
end;

function TWuerfel.GetAugen: Integer;
begin
  Result := FAugen;
end;

procedure TWuerfel.SetAugen(Value: Integer);
begin
  FAugen := Value;
end;

procedure TWuerfel.Werfen;
var
  Augen: Integer;
begin
  Augen := Random(6) + 1;
  SetAugen(Augen);
end;

procedure TForm1.FormCreate(Sender: TObject);
begin
  FWuerfel := TWuerfel.Create;
end;

procedure TForm1.Button1Click(Sender: TObject);
var
  Augen: Integer;
begin
  FWuerfel.Werfen;
  Augen := FWuerfel.Augen;
  ShowMessage(IntToStr(Augen));
end;
Michael
Ein Teil meines Codes würde euch verunsichern.
  Mit Zitat antworten Zitat
VinzRitt

Registriert seit: 21. Sep 2011
5 Beiträge
 
#10

AW: Private Variable "verweigert Zutritt"

  Alt 22. Sep 2011, 01:38
Darauf wär ich wohl nicht gekommen. Ich denke ich arbeite es stück für Stück auf. Mein Lehrer erklärts eh erst nächste Woche, also hab ich noch das WE um es vorher zu können. Die Lösung ist nachvollziehbar.

Wielen Dank also

P.S In C++ ist das irgendwie doch nicht unwesentlich einfacher Konstruiert.




-CLOSED-
  Mit Zitat antworten Zitat
Themen-Optionen Thema durchsuchen
Thema durchsuchen:

Erweiterte Suche
Ansicht

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 10:52 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