Problème urgent C++: aucun opérateur global
Résolu
axelwolf87
-
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Pacorabanix Messages postés 3248 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Voilà, dans le cadre d'un projet, je dois réaliser un programme de gestion des livres d'une bilbliothèque. Pour ce faire, il m'a été demandé de créer plusieurs types nouveaux.
J'ai un problème au niveau de l'utilisation de n_auteur.
Voici la déclaration des types :
#include <string>
#define MAX 100
using namespace std;
#ifndef T_LIVRE_H
#define T_LIVRE_H
typedef struct{
string titre;
string n_auteur;
int annee;
int nbpages;
}t_livre;
#endif
#ifndef T_AUTEUR_H
#define T_AUTEUR_H
typedef struct{
string nom;
string prenom;
string nationalite;
int a_nais;
int a_deces;
}t_auteur;
#endif
#ifndef T_BIBLIO_H
#define T_BIBLIO_H
typedef struct{
t_livre tab[MAX];
int nblivres;
t_auteur auteur[MAX];
}t_biblio;
#endif
Et voici les lignes de la procédure dans laquelle ça bloque :
cout<<"Auteur : "<< biblio.auteur[biblio.tab[i].n_auteur].nom<<endl;
cout<<" "<<biblio.auteur[biblio.tab[i].n_auteur].prenom<<endl;
Le code d'erreur donné est le suivant :
error C2677: '[' binaire : aucun opérateur global trouvé qui accepte le type 'std::string' (ou il n'existe aucune conversion acceptable)
error C2228: la partie gauche de '.nom' doit avoir un class/struct/union
error C2677: '[' binaire : aucun opérateur global trouvé qui accepte le type 'std::string' (ou il n'existe aucune conversion acceptable)
error C2228: la partie gauche de '.prenom' doit avoir un class/struct/union
Merci d'avance, j'en aurait besoin avant demain.
Voilà, dans le cadre d'un projet, je dois réaliser un programme de gestion des livres d'une bilbliothèque. Pour ce faire, il m'a été demandé de créer plusieurs types nouveaux.
J'ai un problème au niveau de l'utilisation de n_auteur.
Voici la déclaration des types :
#include <string>
#define MAX 100
using namespace std;
#ifndef T_LIVRE_H
#define T_LIVRE_H
typedef struct{
string titre;
string n_auteur;
int annee;
int nbpages;
}t_livre;
#endif
#ifndef T_AUTEUR_H
#define T_AUTEUR_H
typedef struct{
string nom;
string prenom;
string nationalite;
int a_nais;
int a_deces;
}t_auteur;
#endif
#ifndef T_BIBLIO_H
#define T_BIBLIO_H
typedef struct{
t_livre tab[MAX];
int nblivres;
t_auteur auteur[MAX];
}t_biblio;
#endif
Et voici les lignes de la procédure dans laquelle ça bloque :
cout<<"Auteur : "<< biblio.auteur[biblio.tab[i].n_auteur].nom<<endl;
cout<<" "<<biblio.auteur[biblio.tab[i].n_auteur].prenom<<endl;
Le code d'erreur donné est le suivant :
error C2677: '[' binaire : aucun opérateur global trouvé qui accepte le type 'std::string' (ou il n'existe aucune conversion acceptable)
error C2228: la partie gauche de '.nom' doit avoir un class/struct/union
error C2677: '[' binaire : aucun opérateur global trouvé qui accepte le type 'std::string' (ou il n'existe aucune conversion acceptable)
error C2228: la partie gauche de '.prenom' doit avoir un class/struct/union
Merci d'avance, j'en aurait besoin avant demain.
3 réponses
biblio.tab[i].n_auteur
ceci est déclaré de type string. On s'attend donc à ce qu'il y ai une chaine. Par exemple : "Molière" (je suppose n_auteur est un raccourci pour nom_auteur ? )
Ensuite tu fais :
Ce qui n'a aucun sens car pour ton tableau la seule chose qui a un sens à mettre dans les crochets, c'est un nombre : monTableau[24] ou biblio.auteur[43].
C'est pour cela que le compilateur te donne ce message étrange pour toi apparemment : error C2677: '[' binaire : aucun opérateur global trouvé qui accepte le type 'std::string' (ou il n'existe aucune conversion acceptable)
(l'opérateur "crochet" n'existe pas en version qui accepte une chaine, donc il ne trouve rien à appliquer, et le pauvre compilateur est perdu!)
corrige déjà ça, et essaye de comprendre pourquoi tu as la deuxième ;).
ceci est déclaré de type string. On s'attend donc à ce qu'il y ai une chaine. Par exemple : "Molière" (je suppose n_auteur est un raccourci pour nom_auteur ? )
Ensuite tu fais :
biblio.auteur[biblio.tab[i].n_auteur], c'est comme si tu fais :
biblio.auteur["Molière"]
Ce qui n'a aucun sens car pour ton tableau la seule chose qui a un sens à mettre dans les crochets, c'est un nombre : monTableau[24] ou biblio.auteur[43].
C'est pour cela que le compilateur te donne ce message étrange pour toi apparemment : error C2677: '[' binaire : aucun opérateur global trouvé qui accepte le type 'std::string' (ou il n'existe aucune conversion acceptable)
(l'opérateur "crochet" n'existe pas en version qui accepte une chaine, donc il ne trouve rien à appliquer, et le pauvre compilateur est perdu!)
corrige déjà ça, et essaye de comprendre pourquoi tu as la deuxième ;).
J'ai bien compris que le string lui posait problème, mais je ne vois pas comment afficher le nom de l'auteur suivi de son prénom.
J'aimerais bien avoir une correction de mon code, parce que je ne vois pas comment résoudre cela, je suis un débutant.
Merci d'avance.
J'aimerais bien avoir une correction de mon code, parce que je ne vois pas comment résoudre cela, je suis un débutant.
Merci d'avance.
C'est bon, problème résolu, il suffisait de mettre : biblio.auteur[i].nom
Problème résolu, merci de m'avoir fait bidouiller.
Problème résolu, merci de m'avoir fait bidouiller.