2017-04-13 36 views
0

我有了typedef的类型不匹配传递给函数

typedef double func(double) 

头和一个叫

double function(func f); 

头函数声明这是定义做一些相应的.C文件。因此,访问此我有一个包含

#include"necessaryheader.h" 

double f(double x){ 
    return 1.0; 
} 

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

文件MAIN.C但是,当我试图编译这个它抛出一个错误

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

这是为什么,是不完全的类型'function(func f)'作为参数? 更好的问题是如何让这些类型匹配?

+2

您的“标题中的函数”只是一个声明,而不是一个定义。错误是说你从来没有定义函数,所以链接器不知道该调用什么。这不是类型不匹配。 –

+0

该功能在相应的.C文件中被适当地定义。 – Escap3faith

+0

@ Escap3faith但是,你真的编译该文件并将生成的obj文件链接到最终的可执行文件吗?这听起来像你没有这样做。 –

回答

1
typedef double func(double) 

应该

typedef double (*func)(double); 

并确保您链接到包含实际执行function()源文件。

而且你需要摆脱main()中的func f;声明。