2017-04-13 32 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;聲明。