Gros problème implémentation

Résolu
Bebert450 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -  
Bebert450 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention   -
Bonjour à tous!
Je refais une fois de plus appel à vous car j'ai (de nouveau ^^) un gros problème!

Je vous explique:
J'ai un projet à faire dans le cadre de ma formation. Ce projet est en quelque sorte un petit jeu vidéo (rpg).

Voici une petite partie de la consigne que je n'arrive décidément pas à faire:
Déterminer et implémenter les diverses structures de données de votre projet:

Chaque structure de données sera accompagnée des primitives nécessaires à la création, la modification et l'observation de la structure.
Pour cela nous vous proposons l'analyse suivante:
La table OUTILS qui correspond à un type OUTILS muni des primitives:
OUTILS CREER_OUTIL(nom , type); // Créer un outil de nom nom, de type type et d'énergie par défaut
nom NOM_OUTIL(OUTILS); // Retourne le nom d'un outil.
type_outil TYPE_OUTIL(OUTILS); // Retourne le type d'un outil.
void MODIF_ENERGIE(OUTILS&); // Modifie l'énergie d'un outil.
énergie ENERGIE_OUTIL(OUTILS); // Retourne l'énergie d'un outil.

Et c'est ici que se trouve mon gros problème!!
J'ai essayé d'implémenter les primitives de toutes les manières que je pouvais, de changer ma structure OUTILS de multiples fois mais je n'y arrive décidément pas!!

Je vous montre le brouillon de ce que j'ai fait pour le moment (il y a de très nombreuses erreurs dont je vous fait la copie juste en dessous):

#include<iostream>
using namespace std;

#ifndef_OUTILSU
#define_OUTILSU

/*
Les profils des méthodes:

CREER_OUTIL: NOM * TYPE -> OUTILS (Constructeur)
NOM_OUTIL: OUTILS -> NOM (Observateur)
TYPE_OUTIL: OUTILS -> TYPE (Observateur)
ENERGIE_OUTIL: OUTILS -> N (Observateur)
MODIF_ENERGIE: OUTILS -> OUTILS (Extenseur)

Les regles:

Pour tout x qui appartient à NOM
Pour tout y qui appartient à TYPE
Pour tout z qui appartient à N

NOM_OUTIL(CREER_OUTIL(NOM,TYPE))=NOM
TYPE_OUTIL(CREER_OUTIL(NOM,TYPE))=TYPE
ENERGIE_OUTIL(CREER_OUTIL(NOM,TYPE))=N

*/

typedef char nom_outil[20];
typedef char type_outil[20];

struct OUTILS{
nom_outil n_out;
type_outil t_out;
int energie_outil;
};

void CREER_OUTIL(OUTILS&, nom_outil, type_outil); // Créer un outil de nom nom, de type type et d'énergie par défaut
nom_outil NOM_OUTIL(OUTILS); // Retourne le nom d'un outil.
type_outil TYPE_OUTIL(OUTILS); // Retourne le type d'un outil.
void MODIF_ENERGIE(OUTILS&); // Modifie l'énergie d'un outil.
int ENERGIE_OUTIL(OUTILS); // Retourne l'énergie d'un outil.

#endif


void CREER_OUTIL(OUTILS &outi, nom_outil nom_out, type_outil type_out){
outi.n_out=nom_out;
outi.t_out=type_out;
outi.energie_outil=100;
}

nom_outil NOM_OUTIL(OUTILS outi){
return outi.n_out; }

type_outil TYPE_OUTIL(outi){
return outi.t_out; }

void MODIF_ENERGIE(OUTILS &outi){
outi.energie_outil--;
}

int ENERGIE_OUTIL(OUTILS &outi){
return outi.energie_outil;
}

//-----------------------------------------------------------------------------------------------

int main(){

OUTILS outila,outilb;
nom_outil scie="scie";
type_outil electrique="electrique";

CREER_OUTIL(outila,scie,electrique);
cout<<"Nom: "<<NOM_OUTIL(outila)<<endl<<"Type: "<<TYPE_OUTIL(outila)<<endl;
cout<<"Energie initiale: "<<ENERGIE_OUTIL(outila)<<endl<<MODIF_ENERGIE(outila)<<"Energie modifiée: "<<ENERGIE_OUTIL(outila)<<endl;

return 0;

}

Erreurs:
`NOM_OUTIL' declared as function returning an array
`TYPE_OUTIL' declared as function returning an array
In function `void CREER_OUTIL(OUTILS&, char*, char*)':
incompatible types in assignment of `char*' to `char[20]'
incompatible types in assignment of `char*' to `char[20]'
At global scope:
`NOM_OUTIL' declared as function returning an array
In function `int NOM_OUTIL(OUTILS)':
invalid conversion from `char*' to `int'
At global scope:
`char TYPE_OUTIL[20]' redeclared as different kind of symbol
previous declaration of `int TYPE_OUTIL(OUTILS)'
declaration of `char TYPE_OUTIL[20]'
conflicts with previous declaration `int TYPE_OUTIL(OUTILS)'
`outi' was not declared in this scope
cannot initialize arrays using this syntax
expected `,' or `;' before '{' token
In function `int main()':
call of overloaded `ENERGIE_OUTIL(OUTILS&)' is ambiguous
:43 candidates are: int ENERGIE_OUTIL(OUTILS)
:43 int ENERGIE_OUTIL(OUTILS&)
call of overloaded `ENERGIE_OUTIL(OUTILS&)' is ambiguous
:43 candidates are: int ENERGIE_OUTIL(OUTILS)
:43 int ENERGIE_OUTIL(OUTILS&)


Je vous avais prévenu il y en a bien une grande liste ^^

En résumé, j'aimerais que vous m'aidiez à réussir cette implémentation et à corriger mon nombre très important d'erreurs!!!
Merci d'avance!

2 réponses

Pacorabanix Messages postés 3248 Date d'inscription   Statut Membre Dernière intervention   663
 
Bonjour! je constate d'après les premières lignes que ton code est du C++.

Or ton problèmes est un problème de chaine de caractere. Tu utilises des chaines de type C (tableau de char). Ce n'est pas interdit en C++, mais cela cause pas mal de problème de typage.

Une fonction ne peut pas retourner un tableau fixe (comme ton char [20] ) . A la limite si tu veux vraiment renvoyer un tableau tu peux le faire via un pointeur et allocation dynamique, mais ce n'est surement pas une bonne méthode pour renvoyer du texte !

A la place utilises simplement la bibliotheque <string> du C++ ! Tu verras, ça rend les choses beaucoup plus simples.
#include <string>
#include <iostream>

string& fonctionQuiRetourneUnString() {
   return "Salut !!!!";
}

int main {
    string chaine1= "Chaine 1", chaine2 = "deuxième chaine";
    
    chaine1 = chaine2 + " ABC " + std::endl + chaine1;

    std::cout << "Voici le résultat de cette petite cuisine avec des chaines :" << std::endl << chaine1;

    return 0;
}
2
Bebert450 Messages postés 17 Date d'inscription   Statut Membre Dernière intervention  
 
Déjà, désolé du retard de la réponse!
Deuxièmement, merci beaucoup!!!
Effectivement, je n'avais pas réalisé que mes fonctions retournaient des tableaux ^^
Je crois maintenant que tout va aller!

Et longue vie à ce forum car à chaque fois que j'ai posé une question sur celui-ci, j'ai eu le droit à une réponse très complète et surtout très précise!!

Merci encore!
-1