PDA

Visualizza la versione completa : [DELPHI] Errore durante assegnazione (Invalid floating point)


Ippo343
13-06-2008, 12:48
Ciao a tutti...

Quando mando in esecuzione questa procedura, ottengo un errore di "Invalid Floating Point Operation".



constructor THumusRep.Create(territory: TPoint);
var i, c: integer;
begin
inherited Create;
location:= territory;
c:= trim(300000, 20);
for i:= 1 to c do self.Push(THumus.Create(territory));
end;


questo perchè quando provo ad assegnare un valore a i ottengo l'errore Invalid Floating Point Operation.

Ho provato anche a sostituire il ciclo con



i:=0;
repeat
inc(i);
until i>= c;


scoprendo così che l'errore arrivava su i:=0;

Perchè non posso assegnare un valore ad i? Grazie.

123delphi321
13-06-2008, 14:15
ciao

credo che il problema sia 'c' non capisco questo tipo di assegnazione

c:= trim(300000, 20);

so che la funzione trim accetta come parametro una stringa....

prova a fare una verifica

Ippo343
13-06-2008, 18:29
No, trim è una funzione che ho dichiarato io, con una scelta poco felice di nome a quanto pare (non mi ricordavo che ce ne fosse una per le stringhe). Tu le dai un valore e una percentuale. Lei restituisce un valore casuale compreso in valore +- la percentuale. Esempio: trim(100, 20), restituisce un valore casuale tra 80 e 120. Comunque non è quello il problema, nello stesso programma l'ho usata decine e decine di volte con successo (e non ho proprio voglia di cambiarle nome ^^).

P.S: notare che lo stesso codice, perfettamente identico, funziona quando si riferisce ad altri elementi. In pratica devo creare 5 strutture che mi servono a contenere oggetti, di cui 2 sono identiche in tutti i dettagli (a parte nome e tipo contenuto). L'altra struttura, TSeedsRep, ha questo constructor:



constructor TSeedsRep.Create(territory: TPoint);
var i, c: integer;
begin
inherited Create;
location:= territory;
c:= trim(300000, 20);
for i:= 1 to c do push(TSeed.Create(territory));
end;


è lo stesso codice del THumusRep, a parte il tipo di oggetto che viene creato al suo interno. Questo funziona. L'altro no. Bah...

Ippo343
13-06-2008, 18:58
Ho risolto. Non so bene come, però ho risolto xD

Ho creato la classe TRep, da cui poi TSeedsRep e THumusRep derivano. Il codice è praticamente invariato, perchè alla fine rimane quasi identico. Però stavolta funziona ^^

Le magie dell'informatica :P

Ippo343
13-06-2008, 19:31
Niente, invece non va bene. Questa soluzione non funziona, perchè poi con questa soluzione non riesco più a scrivere 9/10 delle procedure che devono eseguire... Praticamente le classi THumusRep e TSeedsRep contengono degli array che sono rispettivamente array di THumus e di TSeed. Quando devo scrivere procedure come una UpDate, ho bisogno di accedere alle proprietà e alle funzioni tipiche di THumus e TSeed, che sono diverse tra di loro. Quindi riesco a crearli, ma non a gestirli. Se ritorno alla soluzione di prima, riesco a gestirli ma non a crearli. Aiuto... :cry:

Ippo343
13-06-2008, 19:38
:cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry: :cry:

Perchè adesso fuzionaaaaa!?!? :cry:

Io me lo tengo così... non so cosa sia successo e non lo voglio più sapere, l'importante è che ora, dopo aver giochicchiato un po' con le proprietà delle due classi, funziona... :cry:

Grazie e scusate il disturbo... :cry:

alka
25-06-2008, 00:24
Originariamente inviato da Ippo343
Ho creato la classe TRep, da cui poi TSeedsRep e THumusRep derivano. Il codice è praticamente invariato, perchè alla fine rimane quasi identico. Però stavolta funziona ^^
Probabilmente, non è come dici. :)

Ad ogni modo, non ci è dato sapere il codice delle classi che usi, dove si trova con buona probabilità l'errore, quindi non è possibile di fatto fornirti un aiuto significativo. :fagiano:

Ippo343
25-06-2008, 16:37
Ma l'errore non partiva a causa di codice svolto dalle classi, perchè partiva su i:=0; sia che nel ciclo mettessi del codice sia che non lo facessi...

Loading