|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
Vettori di strutture
Salve ragazzi, ho un problemino con i vettori di strutture in c++.
Ho creato il seguente vettore di strutture: struct { unsigned char *code; int nbit; } Codici[256]; Quello che vorrei fare è passare tale vettore ad una funzione, che mi accede ai campi della struttura e li modifica. Esempio: Codici[2].nbit= 3;(non so se scritto così va bene) In piu', tale funzione dovrebbe ritornarmi questo vettore di strutture, ma non so che dichiarazioni devo fare e non so principalmente se devo passare direttamente il vettore alla funzione od un puntatore a tale vettore. Thanks . |
![]() |
![]() |
![]() |
#2 |
Member
Iscritto dal: Jul 2003
Messaggi: 280
|
edit per non far incazzare ziosilvio .
Ultima modifica di honny : 19-07-2005 alle 15:06. |
![]() |
![]() |
![]() |
#3 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
mmm, ho provato ma mi dice che non riconosce il tipo PCodice: POi cosi' creo lo stesso un vettore di strutture?
|
![]() |
![]() |
![]() |
#4 |
Member
Iscritto dal: Jul 2003
Messaggi: 280
|
edit per non far incazzare ziosilvio .
Ultima modifica di honny : 19-07-2005 alle 15:06. |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
Ok, ora provo
Ultima modifica di Unrue : 19-07-2005 alle 14:53. |
![]() |
![]() |
![]() |
#6 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
Allora, nel file header ho scritto cosi':
PCodice crea_codice_Huffman(Huffman*node,unsigned char*codice,int numerobit,int numeroalberi,Pcodice miocodice); Nel file cpp lo definita cosi': PCodice Huffman::crea_codice_Huffman(Huffman*node,unsigned char*current_code,int nbit,int numeroalberi,Pcodice miocodice){ //codice della funzione} nel main ho scritto cosi': struct { unsigned char *code; int nbit; } HuffmanCodes; typedef HuffmanCodes*PCodice ; PCodice miocodice = NULL; miocodice=(PCodice)malloc( 256 * sizeof (Codice)); Dove sbaglio? |
![]() |
![]() |
![]() |
#7 | |||||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Tanta gente che posta del codice che presume corretto (tra l'altro senza spiegazione alcuna), ma nessuno che spiega cosa c'è che non va in quello per cui si chiede aiuto. Bah...
Quote:
Ne segue che non puoi usarlo come argomento di una funzione. Quote:
Quote:
Quote:
Codice:
struct elem { unsigned char *code; int nbit; }; elem Codici[256]; Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu Ultima modifica di Ziosilvio : 19-07-2005 alle 15:01. |
|||||
![]() |
![]() |
![]() |
#8 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
![]() |
![]() |
![]() |
#9 | |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
Quote:
Nel file header : TabHuffman crea_codice_Huffman(Huffman*node,unsigned char*codice,int numerobit,int numeroalberi,TabHuffman HuffmanCodes[]); Nel file cpp, definisco la funzione: TabHuffman Huffman::crea_codice_Huffman(Huffman*node,unsigned char*current_code,int nbit,int numeroalberi,TabHuffman HuffmanCodes[]){ //codice return HuffmanCodes} nel main: struct TabHuffman{ unsigned char *code; int nbit; }; TabHuffman HuffmanCodes[256]; Ultima modifica di Unrue : 19-07-2005 alle 15:22. |
|
![]() |
![]() |
![]() |
#10 | |
Member
Iscritto dal: Jul 2003
Messaggi: 280
|
Quote:
ho chiesto infatti quando ho notato che unrue ha scritto : "POi cosi' creo lo stesso un vettore di strutture?" mi si e' accesa la lampadina e ho chiesto... [/ot] ps: comunque il codice che ho eliminato era corretto , ed era talmente elementare che singole righe di commento fossero piu' che adeguate....( errore mio ) e con questo amici come prima ![]() |
|
![]() |
![]() |
![]() |
#11 | |||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Chiedo scusa. Quote:
Ma allora, dovevi lasciare il codice dov'era, e magari mettere qualche spiegazione in più. [Modalità "adesso honny mi mena" OFF] Scherzi a parte: purtroppo ho intrapreso una vera e propria crociata personale contro un certo modo di aiutare i meno esperti, e spesso (es. in questo caso) mi lascio trascinare dallo zelo. Chedo scusa. Quote:
![]() ![]() P.S.: l'origine del tuo nick è per caso "honny soyt qui mal y pense"?
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu Ultima modifica di Ziosilvio : 19-07-2005 alle 17:47. |
|||
![]() |
![]() |
![]() |
#12 | |||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Quote:
Invece, la riga: Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|||
![]() |
![]() |
![]() |
#13 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
Ciao, ho spostato la definizione della struct nel file header, ma mi da' un'errore di sintassi alla riga:
TabHuffman Huffman::crea_codice_Huffman(Huffman*node,unsigned char*current_code,int nbit,int numeroalberi,TabHuffman HuffmanCodes[]){ //codice } definita nel file cpp. Non riesco a capire cosa ci sia di sbagliato.Ti riporto quello che ho scritto: Nell'header: struct TabHuffman{ unsigned char *code; int nbit; }; TabHuffman crea_codice_Huffman(Huffman*node,unsigned char*codice,int numerobit,int numeroalberi,TabHuffman HuffmanCodes[]); Nel file cpp: la riga incriminata,e poi nel main: TabHuffman HuffmanCodes[256]; e poi per richiamare la funzione, sempre nel main: prova.crea_codice_Huffman(PHuff[posiniziale],current_code,0,numeroalberi,HuffmanCodes); Ultima modifica di Unrue : 19-07-2005 alle 19:35. |
![]() |
![]() |
![]() |
#14 | ||
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
||
![]() |
![]() |
![]() |
#15 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
Si, la dichiarazione della funzione l'ho messa nel public del file header. Mi da' un'errore di sintassi nel file cpp quando vado a definire la funzione:
//a questa riga qua mi da' l'errore TabHuffman Huffman::crea_codice_Huffman(Huffman*node,unsigned char*current_code,int nbit,int numeroalberi,TabHuffman HuffmanCodes[]) {//codice della funzione} |
![]() |
![]() |
![]() |
#16 |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Aspetta un attimo: tu dichiari nell'header:
Codice:
TabHuffman crea_codice_Huffman(Huffman*node,unsigned char*codice, int numerobit,int numeroalberi,TabHuffman HuffmanCodes[]); Codice:
TabHuffman Huffman::crea_codice_Huffman(Huffman*node,unsigned char*current_code, int nbit,int numeroalberi,TabHuffman HuffmanCodes[]){ //codice } Fa' una prova: nell'header, dichiara semplicemente: Codice:
TabHuffman crea_codice_Huffman(Huffman*,unsigned char*,int,int,TabHuffman[]);
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu Ultima modifica di Ziosilvio : 21-07-2005 alle 08:53. |
![]() |
![]() |
![]() |
#17 |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
Allora, ho provato prima a mettere i nomi uguali e poi a fare come hai detto tu, ma il problema persiste!
![]() ![]() |
![]() |
![]() |
![]() |
#18 | |
Moderatore
Iscritto dal: Nov 2003
Messaggi: 16211
|
Quote:
__________________
Ubuntu è un'antica parola africana che significa "non so configurare Debian" ![]() Scienza e tecnica: Matematica - Fisica - Chimica - Informatica - Software scientifico - Consulti medici REGOLAMENTO DarthMaul = Asus FX505 Ryzen 7 3700U 8GB GeForce GTX 1650 Win10 + Ubuntu |
|
![]() |
![]() |
![]() |
#19 | |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
Quote:
"Huffman.cpp": E2141 Declaration syntax error at line 68 alla riga incriminata. |
|
![]() |
![]() |
![]() |
#20 | |
Senior Member
Iscritto dal: Nov 2002
Messaggi: 6094
|
Quote:
Allora amico, ho dovuto cambiare un po' di cose in quanto la funzione incriminata è ricorsiva, quindi meglio non passargli l'array. Adesso gli faccio ritornare void, tanto non è necessario che ritorni qualcosa. Il problema pero' è questo, non avendolo piu' come parametro, come gli passo l'array di strutture? Ho definito nel file header la struttura struct TabHuffman{ unsigned char *code; int nbit; }; Nel main il vettore di strutture: TabHuffman HuffmanCodes[256]; Potrei creare tale vettore in modo dinamico dentro la funzione giusto? Tale vettore cosi' è disponibile anche dopo l'uscita dalla funzione, in quanto mi serve anche per un'altra funzione. Quello che non capisco pero' è, avendo creato la struttura nel file header e il vettore di strutture nel file cpp, come mai quando richiamo la funzione,nel corpo della funzione HuffmanCodes non lo riconosce? Analogamente non riconosce il tipo TabHuffman qua nel main: TabHuffman HuffmanCodes[256]; nonostante nel file header ci sia la dichiarazione alla struttura TabHuffman. |
|
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:12.