DOMANDA freepascal errore nell'uso di una variabili di puntamento a matrici

Pubblicità

petrusic

Utente Attivo
Messaggi
229
Reazioni
20
Punteggio
46
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:
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 ---
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:
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:
frm2.pas(446,23) Error: Incompatible types: got "{Dynamic} Array Of AnsiString" expected "AnsiString"
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.
Mi potreste aiutare ad individuare la correzione da fare?
 
Ultima modifica:
Pubblicità
Pubblicità
Indietro
Top