2017-04-13 1 views
0

J'ai un en-tête qui aincompatibilité de type typedef passage dans une fonction

typedef double func(double) 

et une déclaration de fonction dans un en-tête appelé

double function(func f); 

Ceci est défini pour faire quelque chose dans un .C correspondant fichier. Donc, pour accéder à ce que j'ai un MAIN.C de fichier qui contient

#include"necessaryheader.h" 

double f(double x){ 
    return 1.0; 
} 

int main(){ 
    func f; 
    double x = function(f); 
    std::cout << x << std::endl; 
} 

Mais lorsque je tente de compiler cela, il renvoie une erreur

undefined reference to `function(double (*)(double))' 

Pourquoi est-ce, est-ce pas exactement le type 'function (func f)' prend comme paramètre? Une meilleure question est de savoir comment faire correspondre les types?

+2

Votre "fonction dans un en-tête" est seulement une déclaration, pas une définition. L'erreur indique que vous n'avez jamais défini 'function', donc l'éditeur de liens ne sait pas quoi appeler. Ce n'est pas une incompatibilité de type. –

+0

la fonction est définie de manière appropriée dans un fichier .C correspondant. – Escap3faith

+0

@ Escap3faith mais, êtes-vous en train de compiler ce fichier et de lier le fichier obj résultant dans l'exécutable final? On dirait que tu ne fais pas ça. –

Répondre

1
typedef double func(double) 

devrait être

typedef double (*func)(double); 

Et assurez-vous que vous créez un lien vers un fichier source qui contient la mise en œuvre effective de function(). Vous devez vous débarrasser de la déclaration func f; dans main().