Variablen eigener Klasse nicht erkannt

Für Fragen von Einsteigern und Programmieranfängern...
Antworten
springcore
Beiträge: 5
Registriert: Do 18. Okt 2012, 13:09

Variablen eigener Klasse nicht erkannt

Beitrag von springcore »

Hallo,
Ich habe ein gaaaaaaaaaaanz kleines problem....
Mein Programm erkennt die von mir angelegten Klassen-Variablen nicht.
Ich bin schon etwas länger aus der Pascal bzw. Delphi/Lazarus Programmierung raus und wollte nun "schnell" mal wieder was schreiben.
Habe mich nach gewohnter manier an der OOP probiert um die Datenmenge besser Handeln zu können, die ich erwarte, Allerdings werden meine Klassenvariablen nicht erkannt.
Hier die Unit inklusive der Klasse und Co.

Code: Alles auswählen

unit Unit8; 
 
{$mode objfpc}{$H+}
 
interface
 
uses
  Classes, SysUtils; 
 
type
 TMitglied = class
            private
             FmtgNr : integer;
             Fname : String;
             FvName : String;
             Faddress : String;
             Fplz : integer;
             Fort : String;
            public
            function getMtgNr():integer;
             function getName():String;
             function getVorName():String;
             function getAddress():String;
             function getOrt():String;
             function getPLZ():integer;
             procedure setMtgNr(newMtgnr:integer);
             procedure setName (newName:String);
             procedure setVName (newVName:String);
             procedure setAdressse (newAddress:String);
             procedure setOrt (newOrt:String);
             procedure setPlz (newPlz:integer);
             constructor Create();
end;
 
implementation
 
function getMtgNr():integer;
begin
 Result := FmtgNr;
end;
 
function getName():String;
begin
 Result := Fname;
end;
 
function getVorName():String;
begin
 Result := FvName;
end;
 
function getAddress():String;
begin
 Result := Faddress;
end;
 
function getOrt():String;
begin
 Result := Fort;
end;
 
function getPLZ():integer;
begin
 Result := Fplz;
end;
procedure setMtgNr(newMtgnr:integer);
begin
 FmtgNr:= newMtgnr;
end;
 
procedure setName (newName:String);
begin
 Fname:=newName;
end;
 
procedure setVName (newVName:String);
begin
 FvName:=newVName;
end;
 
procedure setAdressse (newAddress:String);
begin
 Faddress:=newAddress;
end;
 
procedure setOrt (newOrt:String);
begin
 Fort:=newOrt;
end;
 
procedure setPlz (newPlz:integer);
begin
 Fplz:=newPlz;
end;
end.
 
Die Fehlermeldung lautet:

Code: Alles auswählen

unit8.pas(39,18) Error: Identifier not found "FmtgNr"
unit8.pas(44,17) Error: Identifier not found "Fname"
unit8.pas(49,18) Error: Identifier not found "FvName"
unit8.pas(54,20) Error: Identifier not found "Faddress"
unit8.pas(59,16) Error: Identifier not found "Fort"
unit8.pas(64,16) Error: Identifier not found "Fplz"
unit8.pas(68,8) Error: Identifier not found "FmtgNr"
unit8.pas(73,7) Error: Identifier not found "Fname"
unit8.pas(78,8) Error: Identifier not found "FvName"
unit8.pas(83,10) Error: Identifier not found "Faddress"
unit8.pas(88,6) Error: Identifier not found "Fort"
unit8.pas(93,6) Error: Identifier not found "Fplz"
unit8.pas(98) Fatal: There were 12 errors compiling module, stopping
 
Was muss ich tun, damit meine Variablen erkannt werden?
Möchte keine manuelle Datenhandling-Methode sachreiben, will bei OOP bleiben.
Bins inzwischen von Java gewohnt^^

Danke schonmal im Vorraus für die Hilfe.

mse
Beiträge: 2013
Registriert: Do 16. Okt 2008, 10:22
OS, Lazarus, FPC: Linux,Windows,FreeBSD,(MSEide+MSEgui 4.6,git master FPC 3.0.4,fixes_3_0)
CPU-Target: x86,x64,ARM

Re: Variablen eigener Klasse nicht erkannt

Beitrag von mse »

z.B.

Code: Alles auswählen

function TMitglied.getMtgNr():integer;
Edit:
Es geht auch einfacher:

Code: Alles auswählen

 
TMitglied = class
            private
             FmtgNr : integer;
             Fname : String;
             FvName : String;
             Faddress : String;
             Fplz : integer;
             Fort : String;
            public
             property MtgNr: integer read fmtgnr write fmtgnr;
 

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2826
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Variablen eigener Klasse nicht erkannt

Beitrag von m.fuchs »

Ändere mal deine Implementationen von

Code: Alles auswählen

function getVorName():String;
zu

Code: Alles auswählen

function TMitglied.getVorName():String;
Dann klappt es auch.

Und dann noch ein Hinweis: das händische Schreiben von Getter- und Setter-Methoden ist aber auch übertrieben. Mein Tipp, schreib in Lazarus einmal folgendes:

Code: Alles auswählen

TMitglied = class(TObject)
  public
    property Mitgliedsnummer: Integer;
    property Name: String;
    property Vorname: String;
    property Addresse: String;
    property Plz: String;
    property Ort: String;
end;                  
Drücke dann Strg + Shift + C während dein Cursor innerhalb der Klassendefinition blinkt. Schon baut dir Lazarus folgendes (und dazu auch gleich die Implementationen):

Code: Alles auswählen

 TMitglied = class(TObject)
  private
    FAddresse: String;
    FMitgliedsnummer: Integer;
    FName: String;
    FOrt: String;
    FPlz: String;
    FVorname: String;
    procedure SetAddresse(AValue: String);
    procedure SetMitgliedsnummer(AValue: Integer);
    procedure SetName(AValue: String);
    procedure SetOrt(AValue: String);
    procedure SetPlz(AValue: String);
    procedure SetVorname(AValue: String);
  public
    property Mitgliedsnummer: Integer read FMitgliedsnummer write SetMitgliedsnummer;
    property Name: String read FName write SetName;
    property Vorname: String read FVorname write SetVorname;
    property Addresse: String read FAddresse write SetAddresse;
    property Plz: String read FPlz write SetPlz;
    property Ort: String read FOrt write SetOrt;
end;
Meines Erachtens kannst du auf die Setter-Methoden auch noch verzichten, da du dort ja keinerlei Prüfungen machst:

Code: Alles auswählen

property Mitgliedsnummer: Integer read FMitgliedsnummer write FMitgliedsnummer;
Und ein letzter Tipp: Postleitzahlen nicht als Integer sondern als String speichern. Es gibt ja auch welche mit führenden Nullen.
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

springcore
Beiträge: 5
Registriert: Do 18. Okt 2012, 13:09

Re: Variablen eigener Klasse nicht erkannt

Beitrag von springcore »

Super, danke euch.

Ich bin wirklich schon lange raus wie ich merke....in der FOS war cih noch der Hilfslehrer, heute bekomm ich nichtmal mehr eine eigene Klasse zustande^^

Wegen den PLZ hast du ganz recht, das muss ihc noch abändern.
Die Eingabeüberprüfung mach ich während des einlesen.

Danke nochmals.

springcore
Beiträge: 5
Registriert: Do 18. Okt 2012, 13:09

Re: Variablen eigener Klasse nicht erkannt

Beitrag von springcore »

Neues Problem, gleiches Programm.

Erzeuge ein neues parser-Objekt der Klasse Parser.... ganz normal mit

Code: Alles auswählen

parser.Create();
kommt eine Fehlermeldung:

Code: Alles auswählen

unit1.pas(89,21) Error: Wrong number of parameters specified for call to "Create"
 
Weis nich weiter, hab auch shcon einen eigenen Konstruktor gebaut, aber ohne großen erfolg... im Endeffekt brauch ich da auch keinen eigenen, der von TObject reicht mir^^

Benutzeravatar
m.fuchs
Lazarusforum e. V.
Beiträge: 2826
Registriert: Fr 22. Sep 2006, 19:32
OS, Lazarus, FPC: Winux (Lazarus 2.0.10, FPC 3.2.0)
CPU-Target: x86, x64, arm
Wohnort: Berlin
Kontaktdaten:

Re: Variablen eigener Klasse nicht erkannt

Beitrag von m.fuchs »

  • Eigentlich ist es sinnvoller für neue Probleme ein neues Thema aufzumachen.
  • Offensichtlich benötigt der Constructor von parser einen Paramter. Oder aber einer der Vorfahren dieser Klasse. Ohne die Klassendefinition wird das aber schwierig zu ermitteln. Poste doch mal das Ding.
  • Es hilft übrigens, sich an den Codingstyles für ObjectPascal zu orientieren. Das bedeutet:
    • Groß-/Kleinschreibung nach dem PascalCase-Prinzip
    • Klassen mit einem vorangestellten T zu Kennzeichnen
    also besser TParser an Stelle von parser
Software, Bibliotheken, Vorträge und mehr: https://www.ypa-software.de

Benutzeravatar
theo
Beiträge: 10938
Registriert: Mo 11. Sep 2006, 19:01

Re: Variablen eigener Klasse nicht erkannt

Beitrag von theo »

springcore hat geschrieben: Erzeuge ein neues parser-Objekt der Klasse Parser.... ganz normal mit

Code: Alles auswählen

parser.Create();
Also ganz normal sieht das schon mal nicht aus. Normal aussehen würde:

Code: Alles auswählen

MyParser := TParser.Create;
Das erklärt nat. nicht den fehlenden Parameter. Hast du Parser (bzw. TParser) von TComponent abgeleitet?

springcore
Beiträge: 5
Registriert: Do 18. Okt 2012, 13:09

Re: Variablen eigener Klasse nicht erkannt

Beitrag von springcore »

hey,
danke euch.
sorry, war im wochenende^^
hab den fehler gefunden.... euere kommentare haben mcih darauf gebracht, dass ich die Klassen T***** genannt habe er aber F**** auch gefunden hatte^^
jetzt gehts, hab die Creates umgebaut und bin jetzt mal am weiterknoddeln^^

wenn ich gewusst hätte, dass ich mich so schwer tue wieder in Pascal reinzukommen, hätte ich dem kumpel doch nich ausgeholfen^^

Sollte nochmal probleme auftauchen werd ich nen neuen thread aufmachen^^

Antworten