No matching function for call, language C [Résolu/Fermé]

Signaler
Messages postés
360
Date d'inscription
samedi 6 août 2011
Statut
Membre
Dernière intervention
27 mai 2014
-
pandageek
Messages postés
360
Date d'inscription
samedi 6 août 2011
Statut
Membre
Dernière intervention
27 mai 2014
-
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.

3 réponses

Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 642
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
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 86899 internautes nous ont dit merci ce mois-ci

Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
222
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 ?
Flachy Joe
Messages postés
2120
Date d'inscription
jeudi 16 septembre 2004
Statut
Membre
Dernière intervention
4 novembre 2019
222
ça doit effectivement venir de là : regarde de ce coté : http://ltiwww.epfl.ch/Cxx/c1_2.html#c1_2_8

EDIT :grillé...
Messages postés
360
Date d'inscription
samedi 6 août 2011
Statut
Membre
Dernière intervention
27 mai 2014
5
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?
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 642
Ben, tu fais du C++ en utilisant un compilateur C.
C'est comme si tu parlais chinois à un japonnais ^^.
pandageek
Messages postés
360
Date d'inscription
samedi 6 août 2011
Statut
Membre
Dernière intervention
27 mai 2014
5
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
fiddy
Messages postés
11137
Date d'inscription
samedi 5 mai 2007
Statut
Contributeur
Dernière intervention
18 octobre 2016
1 642
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.
pandageek
Messages postés
360
Date d'inscription
samedi 6 août 2011
Statut
Membre
Dernière intervention
27 mai 2014
5
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 ;)