2013-02-20 9 views
0

J'ai une classe appelée Planet.Pour passer un tableau dans une fonction

Et j'ai un tableau d'objets Planet.

Je déclare le tableau comme suit:

planet * planetList[5] = 
{ 
    new planet(...), 
    new planet(...), 
    new planet(...), 
    new planet(...), 
    new planet(...), 
}; 

Et donc je dois passer ce tableau dans ces 2 fonctions.

Pour les deux fonctions, je les déclare en tant que telle, avec exactement les mêmes paramètres:

void function1 (planet planetList[5], int numOfPlanets) {...} 
void function2 (planet planetList[5], int numOfPlanets) {...} 

Mais quand je l'appelle ces 2 fonctions,

// receives no error 
function1(planetList, numOfPlanets); 
// error saying "cannot convert parameter 1 from 'planet *[5]' to 'planet []'" 
function2(planetList, numOfPlanets); 

Quelqu'un peut-il expliquer ce phénomène?

+0

Vous pourriez probablement faire un tableau de planètes sans utiliser de nouvelles. C'est habituellement comme ça que je fais des choses comme ça. –

Répondre

2

Vous avez déclaré un tableau de pointeurs de planète (planète * []), mais les paramètres de la fonction sont des tableaux d'objets planétaires (planète []). En tant que tel, aucun appel de fonction ne devrait fonctionner.

Essayez:

void function1(planet *planetList[5], int numOfPlanets) {} 
void function2(planet *planetList[5], int numOfPlanets) {} 
+0

Merci! Vous avez résolu mon problème! – user1802890

0

Essayez ceci:

void function1 (planet** planetList, int numOfPlanets) {...} 
void function2 (planet** planetList, int numOfPlanets) {...} 
0

Vous avez un tableau de pointeurs qui pointe vers le object.You avez un tableau de pointeurs qui pointe vers l'objet de sorte que tout pointeur sur un tableau de pointeur fera le wrk pour vous
ex
void function1 (planet *planetList[5], int numOfPlanets) {...}
void function2 (planet *planetList[5], int numOfPlanets) {...}

ou

void function1 (planet **planetList, int numOfPlanets) {...}
void function2 (planet **planetList, int numOfPlanets) {...}

0

je un tableau d'objets Planète

Non, vous avez un tableau de pointeurs vers des objets planète. Un tableau d'objets ressemblerait à:

planet planetList[5] = 
{ 
    planet(...), 
    planet(...), 
    planet(...), 
    planet(...), 
    planet(...), 
}; 

C'est probablement ce que vous voulez.

Si vous voulez vraiment un tableau de pointeur pour une raison quelconque, vous aurez besoin de changer les fonctions d'accepter que:

void function1(planet * planetList[5], int numOfPlanets); 

ou équivalente

void function1(planet ** planetList, int numOfPlanets); 

Quelqu'un peut-il expliquer Ce phénomène?

Non, les deux fonctions doivent échouer à compiler de la même manière. Pourriez-vous poster un exemple plus complet afin que nous puissions reproduire le phénomène nous-mêmes?

+0

Oui, vous aviez raison que les deux fonctions ne fonctionnent pas comme prévu. Il est cependant, pour l'une de mes fonctions, il ne montre aucune erreur de compilation. Les fonctions fonctionnent correctement maintenant après l'implémentation de vos déclarations. Je vous remercie. – user1802890

Questions connexes