Problème urgent C++: aucun opérateur global

Résolu/Fermé
axelwolf87 - 2 janv. 2010 à 15:23
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 - 2 janv. 2010 à 21:26
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.

3 réponses

Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
2 janv. 2010 à 19:07
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 :
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 ;).
0
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.
0
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.
0
Pacorabanix Messages postés 3248 Date d'inscription jeudi 23 août 2007 Statut Membre Dernière intervention 19 mai 2013 661
2 janv. 2010 à 21:26
de rien c'est comme ça qu'on apprend le mieux ;).
Mais c'est vrai que pour débuter , les messages du compilateur ne donnent souvent pas la vrai raison de l'erreur, c'est difficile d'arriver à retrouver le véritable bug à partir de l'erreur.
0