Italian community of Lazarus and Free Pascal

Programmazione => Generale => Topic aperto da: francesco - Dicembre 26, 2023, 04:06:37 pm

Titolo: creare una classe
Inserito da: francesco - Dicembre 26, 2023, 04:06:37 pm
ho fatto una classe:

Codice: [Seleziona]

unit ClassProgetto;

interface

type
  Progetto = class;
  nomestage=integer;

implementation

procedure PutNomeProgetto (NOMEstage A: Integer);
function getNomeStage(NomeStage: integer): integer;

begin;


procedure PutNomeProgetto(NomeStage : Integer);
begin
  if nomestage <> number then
  begin
    showmessage ("ERRORE")
    exit;
    end;
end;

function GETNomeprogetto(S: integer): integer;
begin
  Result := str(S) + ' strings are automatically managed';
end;

end.                           



ma mi appaiono gli errori:

Compila il progetto, Destinazione: PaintFreeShapes: Codice di uscita 256, Errori: 2
unitclassi.pas(1,6) Error: Illegal unit name: ClassProgetto
unitclassi.pas(6,14) Error: Forward type not resolved "Progetto"

cosa significa che una classe non puo' stare su una unit e senno dove?
lazarus 1.8.2

grazie
francesco
Titolo: Re:creare una classe
Inserito da: DragoRosso - Dicembre 26, 2023, 07:27:52 pm
ho fatto una classe:
Codice: [Seleziona]
interface
type
  Progetto = class;
  nomestage=integer;
implementation
ma mi appaiono gli errori:
unitclassi.pas(6,14) Error: Forward type not resolved "Progetto"

La definizione di classe č incompleta, deve terminare con "end" e non deve esserci il ";" dopo "class":
Codice: [Seleziona]
interface

type
  Progetto = class
    nomestage=integer;
end;

implementation

ho fatto una classe:
Codice: [Seleziona]
unit ClassProgetto;
ma mi appaiono gli errori:
unitclassi.pas(1,6) Error: Illegal unit name: ClassProgetto

La UNIT deve avere lo stesso nome del file in cui č dichiarata: in questo caso il nome file si chiama "unitclassi" ma dopo UNIT viene dichiarato "ClassProgetto"
Al posto di "ClassProgetto" devi scriverci "unitclassi" (senza virgolette).

il "begin;" non ci vā, devi eliminarlo.

ho fatto una classe:

Codice: [Seleziona]
implementation

procedure PutNomeProgetto (NOMEstage A: Integer);
function getNomeStage(NomeStage: integer): integer;

I due metodi non vanno dichiarati in quel punto ma bensė prima di "implementation", se devi usarli globalmente altrimenti puoi usarli solo localmente E DEVONO ESSERE ENTRAMBI DEFINITI !!!. I metodi non hanno alcun legame con la classe che stai cercando di dichiarare.

NON CI POSSONO ESSERE SPAZI NEI NOME DELLE VARIABILI: "NOMESTAGE A: ....." non č una definizione valida.

ho fatto una classe:
Codice: [Seleziona]
function GETNomeprogetto(S: integer): integer;
begin
  Result := str(S) + ' strings are automatically managed';
end;

"function GETNomeprogetto" nella definizione ha come parametro di ritorno un intero, ma nella funzione ritorni una stringa.
La funzione "str()" non sō cosa faccia (a memoria) ...

Mancano inoltre le USES essenziali, senza di quelle l'unitā non verrā mai compilata.

Crea un nuovo progetto e vedi quali USES vengono generati per l'untā principale.