Erreur undefined reference to 'ma_fonction(std::string*, int)'

Résolu
Salut,
Je suis en train de faire un petit code en C++ et j'ai rencontrer un petit problème :
Quand je compile le code suivant, j'ai l'erreur suivante :
"undefined reference to 'ma_fonction(std::string*, int)' "

ma_fonction.h :
void ma_fonction(std::string recu[], int tailleRecu = 0); 

ma_fonction.cpp :
#include "ma_fonction.h" 
#include <windows.h> 
#include <string> 
#include <iostream> 

using namespace std; 

void ma_fonction(string recu[], int tailleRecu()) 
{ 
} 

et mon main.cpp :
#include <iostream> 
#include <windows.h> 
#include <string> 
#include "ma_fonction.h" 

using namespace std; 

int main() 
{ 
//reste du code 
ma_fonction(texte, taille); 
//reste du code 
} 


Je n'ai pas mis le code en entier mais la variable 'texte' est de type string et 'taille' de type int.
Quelqu'un saurait-il résoudre mon problème ? Merci d'avance. :)



Celui qui pose une question est bête cinq minute, celui qui n'en pose pas l'est toute sa vie.

1 réponse

  1. Bonjour

    dans ma_fonction.h :
    void ma_fonction(std::string recu[], int tailleRecu = 0); 

    dans ma_fonction.cpp :
    void ma_fonction(string recu[], int tailleRecu())


    Ton prototype dit que le deuxième paramètre est un entier, alors que dans la définition le second paramètre est une fonction (qui rend un entier)
    1. Alors dans le ma_fonction.cpp dois-je mettre :
      void ma_fonction(string recu[], int tailleRecu = 0) 
      Si c'est ça, ça ne marche toujours pas et ça me mets d'autre erreur.
    2. Ce n'est pas à moi de te dire ce que tu dois mettre : je te montre juste que ta déclaration et ta définition sont incohérents et que c'est pourquoi tu avais ce message.
      Mais c'est à toi de savoir de quel paramètre tu as réellement besoin, je ne peux pas le deviner sans savoir à quoi sert ta fonction ni comment elle est écrite.
      Pas plus que je ne peux te parler de ta nouvelle erreur : je n'ai pas une assez bonne vue pour lire ce qui s'affiche sur ton écran, et tu ne recopies pas le message d'erreur ici.
    3. la première erreur :
      ma_fonction.cpp: default argument given for parameter 2 of 'void ma_fonction(std::string*, int)' [-fpermissive]
      et la deuxième :
      ma_fonction.h: after previous specification in 'void ma_fonction(std::string*, int)' [-fpermissive]
    4. La première erreur vient du fait que la valeur par défaut (=0) ne doit être précisée que dans le prototype de la fonction et non dans la déclaration, comme il est expliqué ici
      https://www.commentcamarche.net/contents/188-langage-c-les-fonctions
      au paragraphe 'Valeur par défaut des arguments'
      Je ne vois pas à quoi correspond le second message d'erreur, c'est peut-être une conséquence du premier
    5. Super, ça marche lorsque j'enlève '=0' dans ma_fonction.cpp.
      Merci beaucoup. :)