No matching function for call, language C

Résolu/Fermé
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 - Modifié par pandageek le 29/08/2012 à 20:01
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 - 29 août 2012 à 21:06
Bonjour,
Je débute en C et je me lance dans la programmation d'un petit jeu de combat simple. Seulement, dès le début je bloque.
je suis en train de faire le systeme d'attaque.
J'ai une structure Personnage et une Objet que je déclare sans problèmes mais que je ne peux pas manipuler.


main.cpp :
#include "structures.h"   
char attaque(Personnage *attaquant, Personnage *victime, Objet *arme);  

int main()   
{   
    //armes   
    Objet katana (20, 0, 40, 1, 0, 1, 0);   

    printf("Jeu\n");   

    Personnage heros(100, 5, 3, 0); //pv, attaque, def, effect   
    Personnage ennemi(100, 4, 4, 0);   

    attaque (&heros, &ennemi, &katana);   

    return 1;   
}   

char attaque(Personnage *attaquant, Personnage *victime, Objet *arme)   
{   
    char dommages = attaquant->attack + arme->degats - victime->defense;   

    if(dommages <= 0)   
    {   
        dommages = 0;   
    }   

    victime->vie =- dommages;   

    printf("l'attaqué perd %d points de vie, il lui en reste %d", dommages, victime->vie);   


    return 1;   
}   



structures.h :
typedef struct Personnage Personnage;   
struct Personnage   
{   
    char vie;   
    char attack;   
    char defense;   
    char effect;   

};   

typedef struct Objet Objet;   
struct Objet   
{   
    char degats;   
    char splash;   
    char critique; 
    char effect;
    char frequence; 
    char portee;    
    char transperce;   
};   

GCC renvoie :
/home/adrian/Documents/c/pdw/main.cpp||In function 'int main()':|  
/home/adrian/Documents/c/pdw/main.cpp|16|erreur: no matching function for call to 'Objet::Objet(int, int, int, int, int, int, int)'|  
/home/adrian/Documents/c/pdw/main.cpp|16|note: candidates are:|  
/home/adrian/Documents/c/pdw/structures.h|12|note: Objet::Objet()|  
/home/adrian/Documents/c/pdw/structures.h|12|note:   candidate expects 0 arguments, 7 provided|  
/home/adrian/Documents/c/pdw/structures.h|12|note: Objet::Objet(const Objet&)|  
/home/adrian/Documents/c/pdw/structures.h|12|note:   candidate expects 1 argument, 7 provided|  
/home/adrian/Documents/c/pdw/main.cpp|29|erreur: no matching function for call to 'Personnage::Personnage(int, int, int, int)'|  
/home/adrian/Documents/c/pdw/main.cpp|29|note: candidates are:|  
/home/adrian/Documents/c/pdw/structures.h|2|note: Personnage::Personnage()|  
/home/adrian/Documents/c/pdw/structures.h|2|note:   candidate expects 0 arguments, 4 provided|  
/home/adrian/Documents/c/pdw/structures.h|2|note: Personnage::Personnage(const Personnage&)|  
/home/adrian/Documents/c/pdw/structures.h|2|note:   candidate expects 1 argument, 4 provided|  
/home/adrian/Documents/c/pdw/main.cpp|30|erreur: no matching function for call to 'Personnage::Personnage(int, int, int, int)'|  
/home/adrian/Documents/c/pdw/main.cpp|30|note: candidates are:|  
/home/adrian/Documents/c/pdw/structures.h|2|note: Personnage::Personnage()|  
/home/adrian/Documents/c/pdw/structures.h|2|note:   candidate expects 0 arguments, 4 provided|  
/home/adrian/Documents/c/pdw/structures.h|2|note: Personnage::Personnage(const Personnage&)|  
/home/adrian/Documents/c/pdw/structures.h|2|note:   candidate expects 1 argument, 4 provided|  
||=== Build finished: 18 errors, 0 warnings ===|  


Je ne comprend pas l'erreur et toutes mes recherches m'ont amenée vers du C++ que je ne comprend pas.

ps : mon fichier main a une extension cpp mais c'est parce que j'ai fais un projet SDL.

A voir également:

3 réponses

fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
29 août 2012 à 20:09
Bonjour,

Ton fichier est en cpp, tu programmes façon C++ et tu utilises gcc.
Cherche l'intrus ^^.

Vu que tu souhaites programmer en C :
Objet katana (20, 0, 40, 1, 0, 1, 0);
Cela n'est pas du C. En C, cela donnerait : Objet katana = {20, 0, 40, 1, 0, 1, 0};
Cette remarque s'applique aux cas similaires.

Remarque : pourquoi ne pas le faire en C++ ? Main() renvoie 0 à la fin, pas 1.
1
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
29 août 2012 à 20:10
Salut,
Je connaît pas vraiment le C mais il n'y a pas de constructeur pour Personnage ou Objet, tu es sur que tu peux instancier tes structures de cette façon ?
0
Flachy Joe Messages postés 2103 Date d'inscription jeudi 16 septembre 2004 Statut Membre Dernière intervention 21 novembre 2023 259
Modifié par Flachy Joe le 29/08/2012 à 20:16
ça doit effectivement venir de là : regarde de ce coté : http://ltiwww.epfl.ch/Cxx/c1_2.html#c1_2_8

EDIT :grillé...
0
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 4
29 août 2012 à 20:21
j'ai mis des accolades à la place des parenthèses et le code fonctionne à présent.
fiddy, quel est l'intrus dont tu parle exactement?
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
29 août 2012 à 20:40
Ben, tu fais du C++ en utilisant un compilateur C.
C'est comme si tu parlais chinois à un japonnais ^^.
0
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 4
29 août 2012 à 20:48
non justement je fais du c mais je ne sais pas si renommer mon main.cpp en main.c ne génererai pas des problèmes de chemins
0
fiddy Messages postés 11069 Date d'inscription samedi 5 mai 2007 Statut Contributeur Dernière intervention 23 avril 2022 1 835
Modifié par fiddy le 29/08/2012 à 20:54
non justement je fais du c
Beh, tu fais du C++ sans le savoir : Objet katana (20, 0, 40, 1, 0, 1, 0); et tout ça, c'est du C++, pas du C ^^
C'est pour ça que j'ai traduit ton chinois en japonais (={...}) pour que gcc comprenne.

En changeant cpp en c, je ne sais pas. Mais ce qui est sûr c'est que les erreurs ci-dessus seraient également remontées.
0
pandageek Messages postés 359 Date d'inscription samedi 6 août 2011 Statut Membre Dernière intervention 27 mai 2014 4
29 août 2012 à 21:06
la correction que tu as faite à supprimer toute les erreurs et l'extension ne gêne ni moi ni GCC.
alors je ne vais pas m'embêter plus que ça pour le moment.
merci fiddy pour tes fidèles traduction ;)
0