2009-11-05 6 views
0

J'ai deux tableaux de chaînes "Array1 [size]" et "Array2 [size]". Ils ont tous les deux la même taille. Je voudrais écrire une fonction qui contient ces deux tableaux mais j'ai des problèmes dans la façon dont je les déclare.Comment faire deux tableaux dans une fonction en C++?

Je déclare comme ceci: void Thefunction (string& Array1[], string& Array2[], int size);

Et quand je l'appelle je l'appelle comme ceci: Thefunction (Array1, Array2, size);

Qu'est-ce que je fais mal?

Merci.

+0

quelle erreur le compilateur vous donne? – int3

+2

En plus des réponses ci-dessous: vous devriez utiliser 'void' au lieu de' Void'. –

+0

Merci, c'était en fait une faute de frappe quand je l'ai écrit dans la question. Mais j'ai écrit "void" minuscule dans mon code source. Je vous remercie de l'avoir signalé de toute façon, car je ne savais pas que les minuscules ou les majuscules comptaient. –

Répondre

12

Vous déclarez une fonction qui prend des tableaux de références de chaîne. Vous voulez presque certainement prendre des tableaux de chaînes.

Comme ceci:

void TheFunction(string Array1[], string Array2[], int size); 
+2

BTW, tableaux de références sont interdites par Standard quelque part dans le chapitre 8. –

+0

Merci beaucoup! –

+0

Si vous voulez passer le tableau par valeur (décomposé en un pointeur vers le premier élément) ce sera une solution, mais toujours, en utilisant la syntaxe du pointeur comme dans la solution de Will sera plus claire: http://stackoverflow.com/questions/ 1683367/comment faire deux tableaux en une fonction en c/1683381 # 1683381. Si d'un autre côté vous voulez passer le * tableau par référence * (et là vous pouvez omettre le paramètre size) alors suivez la solution de fnieto: http://stackoverflow.com/questions/1683367/how-to-make-two- tableaux-dans-une-fonction-en-c/1684483 # 1684483 –

4
void TheFunction(string* Array1,string* Array2,int size) { ... } 

tableaux désintégration dans des pointeurs automatiquement.

+0

En vérité, les tableaux sont des pointeurs (et vice versa). La seule différence se produit lors de la déclaration, et les paramètres de la fonction ne sont pas des déclarations. –

+2

@ T.E.D: les tableaux ne sont * pas * des pointeurs! Lorsque vous passez un tableau, la fonction reçoit un pointeur. La différence étant dans le résultat de l'opérateur sizeof(). – Clifford

+0

@Clifford: Non seulement le résultat de typeof() est différent, mais le type lui-même est différent. Cela signifie que les déductions de type de modèle seront différentes. –

2

Vous pouvez faire:

template <std::size_t size> 
void TheFunction(string (&Array1)[size], string (&Array2)[size]); 
+0

+1, c'est la seule solution sûre car le compilateur garantira que le tableau transmis est de la taille appropriée. D'un autre côté, cela ne fonctionnera pas pour la mémoire allouée dynamiquement. –

Questions connexes