Torna indietro   Hardware Upgrade Forum > Software > Programmazione

Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora
WF-1000X M6 è la sesta generazione di auricolare in-ear sviluppata da Sony, un prodotto che punta a coniugare facilità di utilizzo con una elevata qualità di riproduzione dei contenuti audio e una cura nella riduzione del rumore ambientale che sia da riferimento
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI
Snowflake ha presentato diverse novità per la sua piattaforma legate all'intelligenza artificiale. Quella forse più eclatante è una collaborazione con OpenAI, ma non mancano diverse nuove funzionalità che rendono la piattaforma più flessibile e in grado di rispondere meglio alle esigenze in continuo cambiamento delle aziende
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI
Con velocità teoriche fino a 11 Gbps, gestione tramite app intelligente e protezione avanzata dei dispositivi, Roamii BE Pro porta il Wi‑Fi 7 tri‑band nelle abitazioni più esigenti. Un sistema Wi-Fi Mesh proposto da MSI allo scopo di garantire agli utenti una rete fluida e continua capace di sostenere streaming 8K, gaming competitivo e le applicazioni moderne più esigenti in termini di banda
Tutti gli articoli Tutte le news

Vai al Forum
Rispondi
 
Strumenti
Old 12-07-2010, 15:45   #1
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
[C++] problemino puntatori

ciao a tutti, sto cercando di passare un puntatore ad un array tramite una funzione in C++..ma sbaglio qualcosa perchè non funziona..

ho creato una classe diciamo A che contiene un array di oggetti di questo tipo:

Codice:
Bumpcar *cars[6];
ho bisogno poi di creare una funzione che mi restituisca il puntatore all'array:

Codice:
Bumpcar* GameListener::getCars(){




	return cars	;
}
a questo punto un'altra classe B deve poter utilizzare questo metodo per ottenere le cars, allora in questa seconda classe ho un oggetto:

Codice:
Bumpcar* bc[6];
e cerco di ottenere le cars così:

Codice:
bc = oggettoclasseA->getCars();
ma mi restuisce l'errore:

error C2440: '=': impossibile convertire da 'Bumpcar *' a 'Bumpcar *[6]'

so che è un problema di come ho dichiarato le variabili..ma non riesco a trovare una soluzione...grazie
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 16:02   #2
Albi89
Senior Member
 
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
Non puoi farlo perché un array introduce un puntatore costante, dunque non è possibile modificare l'indirizzo a cui punta (cosa che stai cercando di fare).

Una possibile soluzione è dichiarare bc come Bumpcar**, ma anche il tipo di ritorno di getCars() mi sembra sbagliato: dovrebbe essere anche lui Bumcpar**.
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
--Gerald Weinberg
Albi89 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 16:10   #3
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
ti ringrazio della risposta ma ancora non funziona:
Codice:
 error C2440: 'return': impossibile convertire da 'Bumpcar *[6]' a 'Bumpcar *
cioè nella funzione getCars() non può ritornare il Bumpcar *[6] che mi serve..
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 16:11   #4
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
che stupido non ho letto la seconda parte del tuo messaggio! ora provo a modificare tutto..
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 16:18   #5
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
allora modificando il codice così:

Codice:
Bumpcar **cars[6];
nella classe A

e

Codice:
Bumpcar **bc[6];
nella classe B

e l'errore sulla funzione è sparito, però quando cerco di utilizzarla per farmi restituire le cars in questo modo:

Codice:
bc = oggettoclasseA->getCars();
l'errore è:

Codice:
error C2440: '=': impossibile convertire da 'Bumpcar *' a 'Bumpcar **[6]'
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 17:30   #6
shinya
Senior Member
 
L'Avatar di shinya
 
Iscritto dal: Jul 2005
Città: Bologna
Messaggi: 1130
Umh... ma tu vuoi un array di Bumpcar o un array di puntatori a Bumpcar?
Sei sicuro di non volere semplicemente un bel
Codice:
std::vector<Bumpcar> cars
??
shinya è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 18:09   #7
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
XD allora..per dirla grezzamente, ho bisogno che la classe B possa accedere ai bumpcar definiti nella classe A, perciò ogni metodo concepibile va bene :P..solo che mancando d'esperienza sono andato un pò a tentativi.
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 18:47   #8
Albi89
Senior Member
 
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
L'errore è il
Codice:
Bumpcar **bc[6];
nella classe B, che dovrebbe essere un semplice
Codice:
Bumpcar** bc;
cioè un puntatore ad un puntatore a Bumpcar (tipo compatibile con un array di puntatori a Bumpcar) e non costante (in modo da permettere l'assegnazione "di ritorno" dal metodo getCars).
Nella classe A devi mantenere il
Codice:
Bumpcar* cars[6];
mentre a cambiare deve essere il metodo getCars
Codice:
Bumpcar** getCars() const { return cars; }
Occhio insomma ai tipi e al "significato" della notazione [N], che riserva spazio proporzionalmente a N e introduce un puntatore costante: volendo anche ignorare la "constness", nel tuo codice c'è un mismatch tra i tipi perché fai ritornare un Bumpcar** (cars) da una funzione che indica come tipo di ritorno un Bumpcar*!

Ovviamente mi accodo a tutte le considerazioni del caso: a meno che non sia un progetto didattico per scuola/università (con vincoli imposti dal prof.), è il caso di utilizzare il container vector nel proprio codice C++ per renderlo non solo più "error-proof", ma più semplice da correggere.
Tra l'altro, col tuo codice B potrà modificare il contenuto di A direttamente agendo sul puntatore che riceve, che gli garantisce l'accesso diretto all'array: un std::vector invece può essere copiato facilmente.
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
--Gerald Weinberg

Ultima modifica di Albi89 : 12-07-2010 alle 18:57. Motivo: Ho aggiunto qualche dettaglio ;)
Albi89 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 20:58   #9
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
hai ragione avevo fatto confusione con i puntatori, nella B devo dichiarare Bumpcar** bc; quindi un puntatore al puntatore del primo elemento dell'array...però visto che ci siamo, se volessi usare un vector?
grazie mille
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 21:44   #10
Albi89
Senior Member
 
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
Quote:
Originariamente inviato da Re_Kotc Guarda i messaggi
hai ragione avevo fatto confusione con i puntatori, nella B devo dichiarare Bumpcar** bc; quindi un puntatore al puntatore del primo elemento dell'array...però visto che ci siamo, se volessi usare un vector?
grazie mille
Non c'è molto da dire al proposito... in classe A e B dovresti avere un
Codice:
std::vector<Bumpcar> cars;
e la funzione in A potrebbe essere qualcosa del tipo
Codice:
std::vector<Bumpcar> getCars() const { return cars; }
Ci sono ovviamente una serie di questioni da considerare... questa strategia provoca la copia di tutto il vector, e conseguentemente di ogni oggetto Bumpcar, ad ogni chiamata di getCars(), e non ti permette di modifica da B il contenuto di A (cosa che, a stretto rigore, dovrebbe essere vera sempre, ma potrebbe non essere quello che volevi fare nel tuo programma).
Nulla ti vieta, in questo caso, di utilizzare un vector di puntatori.
__________________
If builders built buildings the way programmers wrote programs, then the first woodpecker that came along would destroy civilization.
--Gerald Weinberg
Albi89 è offline   Rispondi citando il messaggio o parte di esso
Old 12-07-2010, 21:47   #11
Re_Kotc
Senior Member
 
L'Avatar di Re_Kotc
 
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
ti ringrazio moltissimo della disponibilità! adesso adatto il mio codice con i suggerimenti che mi hai dato, thanks!
__________________
CASE: Cooler Master Stacker 831 Silver MOBO: Asus Maximus Formula CPU: Intel Q6600@2,4ghz RAM: 2x 1GB Corsair XMS2 pc2-8500@1066mhz + 2x2GB Corsair XMS2 pc2-8500@1066mhzVGA: ATI Sapphire RADEON 5830 1GB GDDR5 HD: 2 x WD Caviar SE16 500GB Raid 0
Re_Kotc è offline   Rispondi citando il messaggio o parte di esso
 Rispondi


Sony WF-1000X M6: le cuffie in-ear di riferimento migliorano ancora Sony WF-1000X M6: le cuffie in-ear di riferiment...
Snowflake porta l'IA dove sono i dati, anche grazie a un accordo con OpenAI Snowflake porta l'IA dove sono i dati, anche gra...
Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo MSI Sistema Mesh Roamii BE Pro: il Wi-Fi 7 secondo M...
Recensione HUAWEI Mate X7: un foldable ottimo, ma restano i soliti problemi Recensione HUAWEI Mate X7: un foldable ottimo, m...
Nioh 3: souls-like punitivo e Action RPG Nioh 3: souls-like punitivo e Action RPG
Panasonic 55'' QLED con Dolby Vision e F...
TOP 250 PLUS e TOP 300 PLUS ritornano: v...
Incentivi auto elettriche, si va verso r...
Crimson Desert non è un Soulslike...
Sostituzione caldaia con nuovi sistemi, ...
La Germania verso il divieto e il ban de...
Questo super TV Samsung OLED da 65'' con...
Android Auto 16.3 svela due segreti di G...
Apple Podcasts introduce video con HLS e...
Gli iPhone 17, 17 Pro e 16e sono conveni...
Sentite l'Agenzia delle Entrate: le e-bi...
Recensione Synology DS1825+: 8 hard disk...
App IO: i numeri del portafoglio digital...
4 novità pesanti nelle offerte Am...
Kyndryl rafforza il SOC di Roma e apre i...
Chromium
GPU-Z
OCCT
LibreOffice Portable
Opera One Portable
Opera One 106
CCleaner Portable
CCleaner Standard
Cpu-Z
Driver NVIDIA GeForce 546.65 WHQL
SmartFTP
Trillian
Google Chrome Portable
Google Chrome 120
VirtualBox
Tutti gli articoli Tutte le news Tutti i download

Strumenti

Regole
Non Puoi aprire nuove discussioni
Non Puoi rispondere ai messaggi
Non Puoi allegare file
Non Puoi modificare i tuoi messaggi

Il codice vB è On
Le Faccine sono On
Il codice [IMG] è On
Il codice HTML è Off
Vai al Forum


Tutti gli orari sono GMT +1. Ora sono le: 13:54.


Powered by vBulletin® Version 3.6.4
Copyright ©2000 - 2026, Jelsoft Enterprises Ltd.
Served by www3v