()
Newbie
Messaggi:
Iscritto:
|
Ciao a tutti!
Codice sorgente - presumibilmente Plain Text |
writeln('La cella ( ',ascissa,',',ordinata,' ) aveva valore ',campo_array[ascissa,ordinata]);
campo_array[ascissa,ordinata]:=nuovo_valore;
writeln('La cella ( ',ascissa,',',ordinata,' ) ha valore ',campo_array[ascissa,ordinata]);
|
ricevo in output:
Codice sorgente - presumibilmente Plain Text |
La cella ( 6,25 ) aveva valore 2
La cella ( 6,25 ) ha valore 0
|
se poi cerco di modificare di nuovo la stessa si ripresenta lo stesso output
Codice sorgente - presumibilmente Plain Text |
La cella ( 6,25 ) aveva valore 2
La cella ( 6,25 ) ha valore 0
|
è come se l'array non si modificasse..o almeno come se si modificasse solo temporaneamente..è assurdo! idee?? |
|
a_butta (Member)
Expert
Messaggi: 578
Iscritto: 16/03/2010
|
puoi postare più codice?
|
|
()
Newbie
Messaggi:
Iscritto:
|
TheKaneB mi ha illuminato. In pratica questo array è contenuto in un'oggetto che io passo come parametro ad un metodo di un altro oggetto. Il problema sta nel fatto che passando un oggetto come parametro esso viene semplicemente copiato all'interno del metodo ma in realtà l'originale resta invariato. Quindi TheKaneB mi ha suggerito di passare un puntatore all'oggetto così che venga modificato l'originale. Il problema è che ora da problemi a riconoscere un puntatore della classe a cui appartiene tale oggetto. Elabora la ^ come un char :S
in pratica io scrivo
Codice sorgente - presumibilmente Pascal |
procedure pacmen.sposta(t:^oggetto);
|
e il compilatore mi risponde con il solito " ')' expected but "Char constant" found"...
Ultima modifica effettuata da il 30/06/2010 alle 20:51 |
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Non riesci a gestire i puntatori?
In alternativa, passa l' argomento alla funzione per parametro ( usa il qualificatore var ).
Ecco come:
Codice sorgente - presumibilmente Pascal |
procedure pacmen.sposta(var t:oggetto);
|
In questo modo, l' oggetto t ha lo stesso indirizzo dell' oggetto originale, quindi, qualsiasi modifica su t, si perquote sull' argomento passato.
Ultima modifica effettuata da Poggi Marco il 30/06/2010 alle 22:02 |
|
()
Newbie
Messaggi:
Iscritto:
|
Ok, grazie. Ha funzionato! Ma se volessi utilizzare i puntatori come dovrei fare???
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Di nulla.
Se intendi usare i puntatori, il mio consiglio è quello di crearti un tipo apposito in questo modo:
Codice sorgente - presumibilmente Pascal |
Nell' intestazione della funzione andrà:
Codice sorgente - presumibilmente Pascal |
procedure pacmen.sposta(t:Poggetto); (* t è un puntatore di tipo oggetto *)
|
Mentre nella chiamata alla funzione:
Codice sorgente - presumibilmente Plain Text |
...
p.sposta(@t) (* dove p è un oggetto pacman, mentre t è di tipo oggetto*)
(* da notare l' operatore '@', serve a ottenere l' indirizzo della
variabile *)
...
|
oppure
Codice sorgente - presumibilmente Plain Text |
...
p.sposta(pt) (* dove p è un oggetto pacman, mentre t è di tipo oggetto*)
(* mentre pt è di tipo Poggetto *)
...
|
|
|
()
Newbie
Messaggi:
Iscritto:
|
Grazie di nuovo per l'aiuto. Valuterò in seguito quale dei due metodi conviene usare. Sono comunque propenso ad utilizzare il primo da te spiegato. Non ho ancora molta dimestichezza con i puntatori. Comunque avrei altri 2 problemi "misteriosi" che non c'entrano nulla con questo topic. Li posto qui o ne apro uno nuovo?
|
|
Poggi Marco (Member)
Guru
Messaggi: 969
Iscritto: 05/01/2010
|
Di nulla.
Apri pure un nuovo topic per i tuoi dubbi, in modo che anche altri utenti possano risponderti. Il forum serve a questo scopo.
|
|