/ 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
Ambigiuous overloaded call to ...
Fra : René Jensen


Dato : 06-01-06 01:43

Nogen som kan knække nedenstående compiler-fejl?
Jeg har kigget mig blind i koden og hjælpe-filen til Delphi. Bruger
Delphi 7 Enterprise.

Compiler-fejlen er: "Ambigiuous overloaded call to IsInArray"
.... men opstår kun når man ønsker at kalde funktionen fra sin
kildetekst, og compiler brokker sig ikke, hvis man kun har kildeteksten
til de to overloaded funktioner.

Nedenstående viser de to funktionsdefinitioner:

function IsInArray(Value : Cardinal; SearchArray : array of Cardinal) :
Boolean; overload;

function IsInArray(Value : string; SearchArray : array of string) :
Boolean; overload;

Kommenterer man den ene funktion og udelader overload, og kalder så
funktionen fra sin kildetekst, så compiler programmet uden problemer.

Med venlig hilsen,
René Jensen

 
 
Brian Andersen \(www~ (06-01-2006)
Kommentar
Fra : Brian Andersen \(www~


Dato : 06-01-06 08:45

Hej Rene,

nedenstående kode fungerer helt fint i min Delphi 7. Hvis du ikke kan få din
kode til at virke ved at Build'e dit projekt, så post noget mere kode...

/Brian



unit Unit1;

interface

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

type
TForm1 = class(TForm)
private
{ Private declarations }
public
{ Public declarations }
end;

var
Form1: TForm1;

function IsInArray(Value: Cardinal; SearchArray: array of Cardinal):
Boolean; overload;
function IsInArray(Value: string; SearchArray: array of string): Boolean;
overload;

implementation

{$R *.dfm}

function IsInArray(Value: Cardinal; SearchArray: array of Cardinal):
Boolean; overload;
begin
end;

function IsInArray(Value: string; SearchArray: array of string): Boolean;
overload;
begin
end;

end.



René Jensen (06-01-2006)
Kommentar
Fra : René Jensen


Dato : 06-01-06 19:28

Brian Andersen (www.europeansoftwarehouse.com) wrote:
> nedenstående kode fungerer helt fint i min Delphi 7. Hvis du ikke kan få din
> kode til at virke ved at Build'e dit projekt, så post noget mere kode...

Hvis du var lidt mere opmærksom på det jeg skrev i mit oprindelig
indlæg, så ville du også vide at nedenstående stump kode også compiler
fint hos mig. Problemer kommer når jeg prøver at kalde en af de to
overloadede funktioner fra min kildetekst - det fornurlige i det hele er
at hvis jeg kommenterer en af funktionerne ud, og kalder funktionen
(eksempelvis den med Cardinal) med en Cardinal værdi og et array af
Cardinal værdier, så compiler kildeteksten fint nok.

Med venlig hilsen,
René Jensen

Christian Iversen (07-01-2006)
Kommentar
Fra : Christian Iversen


Dato : 07-01-06 00:04

René Jensen wrote:

> Brian Andersen (www.europeansoftwarehouse.com) wrote:
>> nedenstående kode fungerer helt fint i min Delphi 7. Hvis du ikke kan få
>> din kode til at virke ved at Build'e dit projekt, så post noget mere
>> kode...
>
> Hvis du var lidt mere opmærksom på det jeg skrev i mit oprindelig
> indlæg, så ville du også vide at nedenstående stump kode også compiler
> fint hos mig. Problemer kommer når jeg prøver at kalde en af de to
> overloadede funktioner fra min kildetekst - det fornurlige i det hele er
> at hvis jeg kommenterer en af funktionerne ud, og kalder funktionen
> (eksempelvis den med Cardinal) med en Cardinal værdi og et array af
> Cardinal værdier, så compiler kildeteksten fint nok.

Det ville hjælpe hvis vi kunne se hele kildeteksten.

Det kan fx være dine kaldparametre der er problemet (bruger du variant,
eller lign.?)

--
| Christian Iversen | WASABI!! |
| chrivers@iversen-net.dk | |


René Jensen (07-01-2006)
Kommentar
Fra : René Jensen


Dato : 07-01-06 02:39

Christian Iversen wrote:
> Det ville hjælpe hvis vi kunne se hele kildeteksten.

De to funktionserklæringer:

function IsInArray(Value : Cardinal; SearchArray : array of Cardinal) :
Boolean; overload;

function IsInArray(Value : string; SearchArray : array of string) :
Boolean; overload;

.... med samme kildetekst:

var
i : Integer;
begin
Result := FALSE;
i := Low(SearchArray);
while i < High(SearchArray) do
begin
if Value = SearchArray[i] then
Result := TRUE;
i := i + 1;
end;
end;

> Det kan fx være dine kaldparametre der er problemet (bruger du variant,
> eller lign.?)

Nope - henholdsvis Cardinal og string.

Med venlig hilsen,
René Jensen

Christian Iversen (07-01-2006)
Kommentar
Fra : Christian Iversen


Dato : 07-01-06 12:26

René Jensen wrote:

> Christian Iversen wrote:
>> Det ville hjælpe hvis vi kunne se hele kildeteksten.
>
> De to funktionserklæringer:
>
> function IsInArray(Value : Cardinal; SearchArray : array of Cardinal) :
> Boolean; overload;
>
> function IsInArray(Value : string; SearchArray : array of string) :
> Boolean; overload;
>
> ... med samme kildetekst:
>
> var
> i : Integer;
> begin
> Result := FALSE;
> i := Low(SearchArray);
> while i < High(SearchArray) do
> begin
> if Value = SearchArray[i] then
> Result := TRUE;
> i := i + 1;
> end;
> end;
>
>> Det kan fx være dine kaldparametre der er problemet (bruger du variant,
>> eller lign.?)
>
> Nope - henholdsvis Cardinal og string.

Det er ikke hele kildeteksten! Du har fx ikke koden der kalder funktionen.

Prøv igen.

--
| Christian Iversen | Agememnon, he had an agememnon neck! If |
| chrivers@iversen-net.dk | you caught him with an axe just there, his |
| | head would roll off |


René Jensen (13-01-2006)
Kommentar
Fra : René Jensen


Dato : 13-01-06 18:46

Christian Iversen wrote:
>>De to funktionserklæringer:
>>
>>function IsInArray(Value : Cardinal; SearchArray : array of Cardinal) :
>>Boolean; overload;
>>
>>function IsInArray(Value : string; SearchArray : array of string) :
>>Boolean; overload;
>>
>>... med samme kildetekst:
>>
>>var
>> i : Integer;
>>begin
>> Result := FALSE;
>> i := Low(SearchArray);
>> while i < High(SearchArray) do
>> begin
>> if Value = SearchArray[i] then
>> Result := TRUE;
>> i := i + 1;
>> end;
>>end;

begin
if IsInArray(PARAM_OPTION, [PARAM_RECURSIVE, PARAM_MULTIPLEFILES]) then
{ Gør noget }
else
{ Udskriv fejlmeddelse }
end.

PARAM_OPTION, PARAM_RECURSIVE og PARAM_MULTIPLEFILES er selvdefinerede
konstanter af type Cardinal, de har selvf. hver deres værdi.

Med venlig hilsen,
René Jensen

Poul S. (07-01-2006)
Kommentar
Fra : Poul S.


Dato : 07-01-06 20:07

"René Jensen" <not4u2know@privacy.org> skrev i en meddelelse
news:dpkef0$d9k$1@news.net.uni-c.dk...
>
> Nedenstående viser de to funktionsdefinitioner:
>
> function IsInArray(Value : Cardinal; SearchArray : array of Cardinal) :
> Boolean; overload;
>
> function IsInArray(Value : string; SearchArray : array of string) :
> Boolean; overload;
>
> Kommenterer man den ene funktion og udelader overload, og kalder så
> funktionen fra sin kildetekst, så compiler programmet uden problemer.
>
> Med venlig hilsen,
> René Jensen


Hej Rene

Jeg vidste ikke hvordan du har testet kald til disse funktioner, så jeg
lavede min egen program og det køres helt uden fejl, kompileret med Delphi
7:

// definitioner:

function IsInArray(Value : Cardinal; SearchArray : array of Cardinal) :
Boolean; overload;

function IsInArray(Value : string; SearchArray : array of string) :
Boolean; overload;

implementation

function IsInArray(Value : Cardinal; SearchArray : array of Cardinal) :
Boolean; overload;
var
i : Integer;
begin
Result := FALSE;
i := Low(SearchArray);
while i < High(SearchArray) do
begin
if Value = SearchArray[i] then
Result := TRUE;
i := i + 1;
end;
end;


function IsInArray(Value : string; SearchArray : array of string) :
Boolean; overload;
var
i : Integer;
begin
Result := FALSE;
i := Low(SearchArray);
while i < High(SearchArray) do
begin
if Value = SearchArray[i] then
Result := TRUE;
i := i + 1;
end;
end;

function TestStringArray:boolean;
var a : array of string;
begin
SetLength(a,5);
a[1] := 'test';
Result := IsInArray('test', a);
end;

function TestCardinalArray : boolean;
var a : array of cardinal;
begin
SetLength(a,5);
a[1] := 5;
Result := IsInArray(5, a);
end;

procedure TForm1.Button1Click(Sender: TObject);
begin
// tester:
if TestStringArray then Showmessage('testet positive :) ');
if TestCardinalArray then Showmessage('testet positive :) ');
end;

_____________

Mvh. Poul



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

Månedens bedste
Årets bedste
Sidste års bedste