|
| 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
| |
|
|