No matching function for call, language C

Résolu
pandageek Messages postés 379 Statut Membre -  
pandageek Messages postés 379 Statut Membre -
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 11653 Statut Contributeur 1 847
 
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 2303 Statut Membre 261
 
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 2303 Statut Membre 261
 
ç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 379 Statut Membre 4
 
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 11653 Statut Contributeur 1 847
 
Ben, tu fais du C++ en utilisant un compilateur C.
C'est comme si tu parlais chinois à un japonnais ^^.
0
pandageek Messages postés 379 Statut Membre 4
 
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 11653 Statut Contributeur 1 847
 
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 379 Statut Membre 4
 
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