- 227
- 20
- CPU
- AMD Athlon - X86_64
- Scheda Madre
- Acer RS780HVF
- HDD
- SSD PLUS da 240GB (ospita 3 S.O Linux), WDC WD10EFRX-68F da 1000GB (ospita solo archivi dati)
- RAM
- n.2 DDR" per 2GB
- OS
- fedora 28 Mate, Ubuntu Mate, Linux Mint 19
L'uso delle matrici in freepascal sono per me un vero supplizio.
Sto scrivendo un programma che utilizza 3 matrici dichiarate come globali in frmmain:
Valorizzo bene le matrici sempre nella unit frmmain.
Nella unit frm2, dovrei però accedere ad una delle tre matrici, a seconda del contenuto della fariabile rifTb. Ho pensato perciò di scrivere una procedura comune, dove l'accesso alla tal matrice, avviene tramite una varibaile di puntamento:
Ebbene, in compilazione mi viene segnalato, dopo l'ultima modifica, il seguente Errore:
Mi potreste aiutare ad individuare la correzione da fare?
Sto scrivendo un programma che utilizza 3 matrici dichiarate come globali in frmmain:
Codice:
unit frmmain;
{$mode objfpc}{$H+}
interface
uses
Classes, SysUtils, DB, Forms, Controls, Graphics, Dialogs, StdCtrls, ComCtrls,
ExtCtrls, fpspreadsheet, laz_fpspreadsheet, Process, ZConnection, ZDataset,
fpstypes;
type
{ TForm1 }
TtbMovv = array of array of String;
TtbResta = array of array of String;
TtbRiep = array of array of String;
TForm1 = class(TForm)
--- bla --- bla ---
var
Form1: TForm1;
tbMovv: TtbMovv;
tbResta: TtbResta;
tbRiep: TtbRiep;
implementation
--- bla --- bla ---
Nella unit frm2, dovrei però accedere ad una delle tre matrici, a seconda del contenuto della fariabile rifTb. Ho pensato perciò di scrivere una procedura comune, dove l'accesso alla tal matrice, avviene tramite una varibaile di puntamento:
Codice:
procedure TForm2.CompilaFrm2(sdtTratt, rifTb:String);
type
TtbCor = array of array of String;
PtbCor = ^TtbCor;
PtbMov = ^TtbMovv;
PtbRes = ^TtbResta;
PtbRiep = ^TtbRiep;
var
tbCorr: PtbCor;
tbMovim: PtbMov;
tbResCas: PtbRes;
tbQuadra: PtbRiep;
--- bla --- bla ---
begin
case rifTb of
'M':
begin
nuRgTbCorr:= Length(tbMovv) div 5;
tbCorr:= @tbMovim; // carico in tbCorr l'indirizzo di memoria di tbMovim
end;
'R':
begin
nuRgTbCorr:= Length(tbResta) div 4;
tbCorr:= @tbResCas; // carico in tbCorr l'indirizzo di memoria di TtbResta
end;
'Q':
begin
nuRgTbCorr:= Length(tbRiep) div 6;
tbCorr:= @tbQuadra; // carico in tbCorr l'indirizzo di memoria di TtbRiep
end;
end;
i:= 0;
while (sw = False) do
begin
if (i = nuRgTbCorr) then
begin
sw:= True;
end
else
begin
striMia:= tbCorr[i, 0];
if (striMia = sdtTratt) then
// if (tbCorr[i, 0] = sdtTratt) then <--- istruzione originaria con errore |- Error: Operator is not overloaded: "{Dynamic} Array Of AnsiString" = "AnsiString"-|
begin
case swprimo of
False:
begin
i1:= i;
swPrimo:= True;
end;
end;
nuRgdtTratt:= nuRgdtTratt + 1;
end
--- bla --- bla ---
Ebbene, in compilazione mi viene segnalato, dopo l'ultima modifica, il seguente Errore:
Da due giorni cerco di capire come risolvere, ma non riesco ad andare avanti. Pare che il problema dipenda dall'uso della variabile di puntamento.frm2.pas(446,23) Error: Incompatible types: got "{Dynamic} Array Of AnsiString" expected "AnsiString"
Mi potreste aiutare ad individuare la correzione da fare?
Ultima modifica: