Salut,
La premiere erreur (new types may not be defined in a return type)vient du fait qu'il manque le point virgule ";" après l'accolade fermante de la définition de la structure...
Il suffit donc de rajouter ce point virgule après
1 2 3 4 5 6 7 8
| struct Msg
{
char message[256];
void aff_message(void)
{
cout<< message;
}
}; |
La deuxième erreur ('main' must return 'int'), comme l'a fait remarquer Trunks vient du fait que la fonction main doit renvoyer ... un int
Ceci dit, il reste quelques fautes dans ton code:
En C++, le fait de définir une sturcture (une classe, une énumération ou une union) définit automatiquement le type approprié.
Il n'est donc pas nécessaire de rappeler le mot clé struct lorsque tu souhaite déclarer une variable du type de ta structure
Enfin, il faut savoir que "message" fait partie intégrante de ta structure, et donc que tu ne peut y accéder qu'au départ de la variable de type Msg.
Et, comme tu n'a pas précisé de constructeur prenant une chaine de caractères en argument, tu ne peut pas initialiser directement le message de Msg en déclarant une variable de type Msg.
Le code que tu as écrit ici (même en supprimant le struct inutile)
Msg livre= {"je suis un mauvais programmeur en c++"};
est donc faux, et, comme tu travailles encore avec une chaine de caractères "C style" tu dois travailler "à la manière C" pour initialiser correctement le message
Au final, ton code devrait être modifié sous la forme de
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31
| #include <cstdlib>
#include <iostream>
using namespace std;
/* il faut vraiment prendre rapidement l'habitude de suivre
* une politique d'indentation stricte du code...
* cela te facilitera énormément la relecture de ton code,
* et je peux t'assurer que tu passera énormément de temps
* à le lire ;)
*/
struct Msg
{
char message[256];
void aff_message(void)
{
cout<< message;
}
};
int main(void)
{
/*déclarons une variable "livre" qui est de type Msg */
Msg livre;
/* initialisons le message à "je suis un mauvais programmeur" */
strcpy("je suis un mauvais programmeur",livre.message);
/* et faisons le afficher */
livre.affiche();
/* si tout s'est bien déroulé, main renvoie 0 */
return 0;
} |
Enfin, il faut savoir que la gestion de chaines de caractères à la manière "C style" (comme s'il s'agissait de tableau de caractères terminés par '\0') est très embêtante et de nature à apporter énormément de problèmes (risque de dépasser la taille que l'on a allouée pour la chaine, nécessité d'utiliser les fonctions str_* pour chaque modification, comparaison,...)
Le C++ fournit une classe qui est prévue pour gérer les chaines de caractères, et qui en facilite énormément l'usage.
Cette classe est la classe "string", disponible dans l'espace de noms std (comme tout ce qui est fourni par le standard) par inclusion du fichier d'en-tête <string>.
Tu devrais t'habituer directement à utiliser cette classe à chaque fois, tout comme le meilleur conseil à te donner est (de manière générale) de toujours préférer une solution issue du C++ à une solution équivalente issue du C, parce qu'elle sera généralement beaucoup plus sécurisante à l'emploi
Partager