Kann mir jemand erklären, warum sich im folgenden Progrämmchen
Plus und PlusV kompilieren lassen, PlusC aber nicht?<br>
(Fehlermeldung bei Implementation von PlusC:
Deklaration von 'PlusC' unterscheidet sich von vorheriger Deklaration)<br>
Ich hab eigentlich gedacht, dass die const-Übergabe vom Compiler je nach Größe der
übergebenen Parameter im wesentlichen wie in eine Wert- oder eine var-Übergabe
behandelt wird, plus eben zusätzliche (Compilezeit-)Überprüfung der Konstantheit. Dann sollte es aber doch hier kein Problem geben.<br>
Irgendwie liegt das Problem wohl daran, dass mein Objekttyp bei der Deklaration der Methoden
noch nicht vollständig definiert ist, bei deren Implementation hingegen schon.
Aber das trifft ja wieder für alle drei Methoden zu...
<p>Danke im voraus, Uli.
<pre>
program Project2;
{$APPTYPE CONSOLE}
uses sysutils;
type
TGPoint = object
x, y: Double;
function Plus(p, q: TGPoint): TGPoint;
function PlusC(const p, q: TGPoint): TGPoint;
function PlusV(var p, q: TGPoint): TGPoint;
end;
{ TGPoint }
function TGPoint.Plus(p, q: TGPoint): TGPoint;
begin
Result.x := p.x + q.x;
Result.y := p.y + q.y;
end;
function TGPoint.PlusC(const p, q: TGPoint): TGPoint;
begin
Result.x := p.x + q.x;
Result.y := p.y + q.y;
end;
function TGPoint.PlusV(var p, q: TGPoint): TGPoint;
begin
Result.x := p.x + q.x;
Result.y := p.y + q.y;
end;
begin
// Hier Anwender-Code
end.
</pre>
Plus und PlusV kompilieren lassen, PlusC aber nicht?<br>
(Fehlermeldung bei Implementation von PlusC:
Deklaration von 'PlusC' unterscheidet sich von vorheriger Deklaration)<br>
Ich hab eigentlich gedacht, dass die const-Übergabe vom Compiler je nach Größe der
übergebenen Parameter im wesentlichen wie in eine Wert- oder eine var-Übergabe
behandelt wird, plus eben zusätzliche (Compilezeit-)Überprüfung der Konstantheit. Dann sollte es aber doch hier kein Problem geben.<br>
Irgendwie liegt das Problem wohl daran, dass mein Objekttyp bei der Deklaration der Methoden
noch nicht vollständig definiert ist, bei deren Implementation hingegen schon.
Aber das trifft ja wieder für alle drei Methoden zu...
<p>Danke im voraus, Uli.
<pre>
program Project2;
{$APPTYPE CONSOLE}
uses sysutils;
type
TGPoint = object
x, y: Double;
function Plus(p, q: TGPoint): TGPoint;
function PlusC(const p, q: TGPoint): TGPoint;
function PlusV(var p, q: TGPoint): TGPoint;
end;
{ TGPoint }
function TGPoint.Plus(p, q: TGPoint): TGPoint;
begin
Result.x := p.x + q.x;
Result.y := p.y + q.y;
end;
function TGPoint.PlusC(const p, q: TGPoint): TGPoint;
begin
Result.x := p.x + q.x;
Result.y := p.y + q.y;
end;
function TGPoint.PlusV(var p, q: TGPoint): TGPoint;
begin
Result.x := p.x + q.x;
Result.y := p.y + q.y;
end;
begin
// Hier Anwender-Code
end.
</pre>