Torna indietro   Hardware Upgrade Forum > Software > Programmazione

DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort
Fino a 740 km WLTP con la batteria da 97,2 kWh, sospensioni che leggono la strada con una telecamera e un abitacolo da salotto parigino. La nuova DS N°7 raccoglie l'eredità della DS 7 e la porta, per la prima volta, nel mondo 100% elettrico. Ecco come è fatta, cosa offre e quanto costa.
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più
Abbiamo provato Samsung Galaxy Tab S12 Ultra nella versione 12 GB + 256 GB con tastiera, e il risultato è un tablet che in questa configurazione si comporta come un notebook con la fluidità tipica di Android. Spessore di 5,1 mm, display Dynamic AMOLED 2X da 14,6 pollici, MediaTek Dimensity 9500 e un software senza incertezze compongono un prodotto di vertice, con prezzi da 1.539 euro, frenato solo da un'autonomia nella parte bassa del confronto
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura)
Abbiamo provato per dieci giorni la Hyundai IONIQ 5 N, con 650 CV, 770 Nm e uno 0-100 km/h in 3,4 secondi. Il suo punto forte è N e-Shift, che simula un cambio a otto rapporti con suoni da motore termico e perfino un bang supersonico
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


DS N°7 E-Tense: il SUV premium made in Melfi che punta su autonomia e comfort DS N°7 E-Tense: il SUV premium made in Melfi...
Recensione Samsung Galaxy Tab S12 Ultra: non chiamatelo tablet... è molto di più Recensione Samsung Galaxy Tab S12 Ultra: non chi...
Hyundai IONIQ 5 N, l'elettrica che finge di essere termica (e ci riesce da paura) Hyundai IONIQ 5 N, l'elettrica che finge di esse...
CES Unveiled Milan, l'IA diventa tecnologia fondativa e il commercio torna centrale CES Unveiled Milan, l'IA diventa tecnologia fond...
 Recensione OPPO Find X10 Pro Max: un top di gamma completo con tre fotocamere da 200MP Recensione OPPO Find X10 Pro Max: un top di gam...
Un portatile per i militari, ma con un o...
Discord, i messaggi di oltre 63.000 serv...
Nascosto nei meandri di Amazon, questo p...
Motorola Moto Buds 2 a 39,90€: prezzo di...
Due schede Raspberry Pi mai annunciate n...
Microfono gaming Yeti GX a 72,19€: -44% ...
PagoPA, false multe da 198 euro arrivano...
107,99€ su Amazon da stamattina: prezzo...
Cowboy Space Corp. presenta il suo razzo...
Per NetSuite il vantaggio nell'IA sta ne...
Scoperta la zona d'origine del segnale W...
La Stazione Spaziale Internazionale cont...
La Difesa statunitense ha pubblicato la ...
vivo X500 Pro e Pro Max ufficiali: tanta...
iOS 27.2: l'iPhone chiede ai numeri scon...
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: 08:57.


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