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

petrusic

Utente Attivo
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:
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:

Entra

oppure Accedi utilizzando
Discord Ufficiale Entra ora!