Comment passez-vous un tableau de caractères dans une fonction.
déclarations
char fromName[64];
char fromStreet[64];
char fromSuburb[64];
char fromCountry[64];
appel de fonction
Trans[i]->putAddress(fromName, fromStreet, fromSuburb, fromCountry);
prototype
void putAddress(char,char,char,char);
function
void putAddress(char fName,char fStreet,char fSuburb,char fCountry){
return;
}
et Erreur "main.cpp", ligne 86: Erreur: L'argument formel 1 du type char dans l'appel à Mail :: putAddress (char, char, char, char) est passé à char *.
Votre fonction devrait être:
void putAddress(char *,char *,char *,char *);
Vous devez passer des pointeurs à char
void putAddress(char* fName,char* fStreet,char* fSuburb,char* fCountry);
Vous devez ensuite faire attention à connaître la taille de chaque tableau afin de ne pas indexer à la fin. Dans votre cas, ils sont tous de 64.
Vous pouvez passer un tableau de 2 manières:
(1) C-style conventionnel:
Ici vous passez par adresse et recevez en utilisant un pointeur
void putAddress(char *,char *,char *,char *);
(2) Passage C++ par référence:
Vous transmettez le tableau par référence avec la spécification de taille:
void putAddress(char (&a1)[64], char (&a2)[64],char (&a3)[64], char (&a4)[64]);
Cela vous aide à obtenir immédiatement la taille du tableau (le pointeur n'est pas autorisé). Ceci peut être rendu plus sophistiqué en utilisant template
également.
Vous pouvez également utiliser l'option std::string
pour effectuer une copie de l'ensemble du tableau et le gérer comme une variable automatique.
void putAddress(char* array){
//use array as usual
}
Vous passez des chaînes (tableaux de caractères) en tant que pointeur sur le premier caractère du tableau:
void something(char *str) { /* ... */ }
int main(int argc, char **argv) {
char somestring[] = "Hell World!\n";
something(somestring);
return 0;
}
Comme les tableaux se désintègrent automatiquement en pointeurs lorsqu'ils sont transmis à une fonction, il vous suffit de transmettre le tableau de caractères et cela fonctionne. Donc dans votre exemple:
void putAddress(char*, char*, char*, char*);
Le compilateur vous dit juste là ... Il est passé comme char*
. Donc, utilisez soit char*
ou char ar[]
.
Pour corriger votre code:
void putAddress(char*,char*,char*,char*);
mais c'est toujours faux. Les tableaux se désintègrent en pointeurs, c'est pourquoi ils compileront, mais entraîneront une erreur si les arguments ne sont pas terminés par null. Vous devez également indiquer la taille si vous choisissez cette approche.
Cependant , comme il s'agit de C++ et non de C, je vous suggère d'utiliser std::string
à la place:
void putAddress(const std::string&,const std::string&,const std::string&,const std::string&);
void putAddress(char[],char[],char[],char[]);
function
void putAddress(char fName[],char fStreet[],char fSuburb[],char fCountry[]){
return;
}
Vous avez oublié de mettre les parenthèses, mettez-les comme dans le code ci-dessus.
L'erreur du compilateur fait sence puisque fromName est en effet un pointeur sur le (premier élément du tableau) fromName. Ceci est juste la syntaxe C++ (et C simple).
Afin de passer un tableau de caractères à une fonction, vous devez faire ce que vous êtes en train de faire, c'est-à-dire passer un pointeur sur le (premier élément du tableau).
Donc, tout ce que vous devez faire est de changer
void putAddress(char,char,char,char);
à
void putAddress(char *, char *, char *, char *);
PS: Votre prochain problème est de savoir (en mettant putAddress au courant) la longueur de chaque tableau. Si ceux-ci sont résolus, vous n'avez aucun problème.