/ Forside / Teknologi / Udvikling / Delphi/Pascal / Nyhedsindlæg
Login
Glemt dit kodeord?
Brugernavn

Kodeord


Reklame
Top 10 brugere
Delphi/Pascal
#NavnPoint
oldwiking 603
jrossing 525
rpje 520
EXTERMINA.. 500
gandalf 460
gubi 270
DJ_Puden 250
PARKENSS 230
technet 210
10  jdjespers.. 200
Types of actual and formal var parameters ~
Fra : Lasse M


Dato : 28-01-01 20:28

Hej

Jeg sidder og roder med et program, hvor jeg har omkring 10 procedure
der stort set gør det samme. Den eneste forskel er det objekt der bliver
created/free'd. Ojektet nedstammer, i alle procedurene, fra den samme
klasse, som hedder TlmReport. Da koden er identisk ville jeg flytte den
over i sin egen procedure, for at spare lidt plads, som jeg erklærede
sådan her:

procedure AddReports(var Report: TlmReport; var Lst: TList);

Den kalder jeg ved at sige AddReports(Report, Lst); hvor Report er af
typen TlmReportXXX, men det giver den her fejl [Error]
MainForm.pas(2057): Types of actual and formal var parameters must be
identical. Hvorfor kan man ikke gøre det på den måde? Og hvordan kan jeg
gøre det uden at skulle lave en procedure for hver enkelt klasse?

--
Regards
Lasse M

 
 
Niels (niLLer) (28-01-2001)
Kommentar
Fra : Niels (niLLer)


Dato : 28-01-01 21:24

Just as I expected, Lasse M <postmandper@postman.dk> came up with
this:

>Jeg sidder og roder med et program, hvor jeg har omkring 10 procedure
>der stort set gør det samme. Den eneste forskel er det objekt der bliver
>created/free'd. Ojektet nedstammer, i alle procedurene, fra den samme
>klasse, som hedder TlmReport. Da koden er identisk ville jeg flytte den
>over i sin egen procedure, for at spare lidt plads, som jeg erklærede
>sådan her:
>
>procedure AddReports(var Report: TlmReport; var Lst: TList);

Der skal stå *præcis* det samme i både interface og implementation
delen af din unit. Altså: Sørg for at alle parametre er af de samme
typer og at alle "var", "out", "const" osv. ting foran parametrene er
der både i interface og implementation.

>Den kalder jeg ved at sige AddReports(Report, Lst); hvor Report er af
>typen TlmReportXXX, men det giver den her fejl [Error]
>MainForm.pas(2057): Types of actual and formal var parameters must be
>identical. Hvorfor kan man ikke gøre det på den måde? Og hvordan kan jeg
>gøre det uden at skulle lave en procedure for hver enkelt klasse?

Måske ville det være smartere at deklarere proceduren som en metode i
(T)TimeReport objektet (husk nu, objekt-typer skal altid starte med
T!), så er Report parametren automatisk kommet med (Self), og hvis du
ikke ligefrem skal create/destroy'e den liste som Lst parametren peger
på (en variabel der indeholder et objekt er faktisk bare en pointer),
så er der ingen grund til at sende Lst parametren som en "var"
parameter, den kunne lige så godt være en "const" parameter.

Niels (aka. niLLer)
--
e-mail: nmartin at iname dot com ICQ UIN: 50187323
http://www.niller.f2s.com/ - niLLer's pages (My programs, in English)
http://whitehat.dk/g4s/ - The G4S Page (Personlig side, på dansk)
-- No longer Windozed!

Stig Johansen (29-01-2001)
Kommentar
Fra : Stig Johansen


Dato : 29-01-01 16:19

Hej.
"Lasse M" <postmandper@postman.dk> wrote in message
news:3A7472D8.99A9A9B0@postman.dk...
> Hej
>
> Jeg sidder og roder med et program, hvor jeg har omkring 10 procedure
> der stort set gør det samme. Den eneste forskel er det objekt der bliver
> created/free'd. Ojektet nedstammer, i alle procedurene, fra den samme
> klasse, som hedder TlmReport. Da koden er identisk ville jeg flytte den
> over i sin egen procedure, for at spare lidt plads, som jeg erklærede
> sådan her:
>
> procedure AddReports(var Report: TlmReport; var Lst: TList);
>
> Den kalder jeg ved at sige AddReports(Report, Lst); hvor Report er af
> typen TlmReportXXX, men det giver den her fejl [Error]
> MainForm.pas(2057): Types of actual and formal var parameters must be
> identical. Hvorfor kan man ikke gøre det på den måde? Og hvordan kan jeg
> gøre det uden at skulle lave en procedure for hver enkelt klasse?


Du må selvfølgelig ikke benytte andre properties/methods end der er fælles
for din TlmReport.

Benyt AddReports(Report AS TlmReport, Lst) i dit kald.

mvh
Stig Johansen.



Søg
Reklame
Statistik
Spørgsmål : 177558
Tips : 31968
Nyheder : 719565
Indlæg : 6408927
Brugere : 218888

Månedens bedste
Årets bedste
Sidste års bedste