|
|
|
![]() |
|
Strumenti |
![]() |
#1 |
Senior Member
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]; Codice:
Bumpcar* GameListener::getCars(){ return cars ; } Codice:
Bumpcar* bc[6]; Codice:
bc = oggettoclasseA->getCars(); 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 |
![]() |
![]() |
![]() |
#2 |
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 |
![]() |
![]() |
![]() |
#3 |
Senior Member
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 *
__________________
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 |
![]() |
![]() |
![]() |
#4 |
Senior Member
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 |
![]() |
![]() |
![]() |
#5 |
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
allora modificando il codice così:
Codice:
Bumpcar **cars[6]; e Codice:
Bumpcar **bc[6]; e l'errore sulla funzione è sparito, però quando cerco di utilizzarla per farmi restituire le cars in questo modo: Codice:
bc = oggettoclasseA->getCars(); 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 |
![]() |
![]() |
![]() |
#6 |
Senior Member
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 ![]()
__________________
-> The Motherfucking Manifesto For Programming, Motherfuckers |
![]() |
![]() |
![]() |
#7 |
Senior Member
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 |
![]() |
![]() |
![]() |
#8 |
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
L'errore è il
Codice:
Bumpcar **bc[6]; Codice:
Bumpcar** bc; Nella classe A devi mantenere il Codice:
Bumpcar* cars[6]; Codice:
Bumpcar** getCars() const { return cars; } 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 17:57. Motivo: Ho aggiunto qualche dettaglio ;) |
![]() |
![]() |
![]() |
#9 |
Senior Member
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 |
![]() |
![]() |
![]() |
#10 | |
Senior Member
Iscritto dal: May 2004
Città: Napoli
Messaggi: 773
|
Quote:
Codice:
std::vector<Bumpcar> cars; Codice:
std::vector<Bumpcar> getCars() const { return cars; } 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 |
|
![]() |
![]() |
![]() |
#11 |
Senior Member
Iscritto dal: Aug 2003
Città: verona
Messaggi: 541
|
ti ringrazio moltissimo della disponibilità!
![]()
__________________
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 |
![]() |
![]() |
![]() |
Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 18:46.