2011-12-01 56 views
1

我有一個cw.h文件,其中有一堆extern函數,我想從我的cw.cpp文件中調用。C++ extern函數錯誤:函數參數太多

他們在.h這樣表達。伴隨着的Type結構(例如剛功能,而不是功能的實際名稱)的聲明文件:

extern Type* new_type(), match(), sharetype(); 

但他們的定義和實現是在cw.cpp文件。
每個函數都有一個或多個傳遞給它的參數。

當我嘗試編譯,我不斷收到此錯誤信息爲每個功能:

cw.h:11: error: too many arguments to function Type new_type() 
cw.cpp:575: error: at this point in file 

我不知道如何解決它。我一直在尋找了幾個小時了(-_-)

EDIT [解決]:

我在.h文件相匹配的類型參數的改變了我的代碼被傳遞到功能時,他們被稱爲。 沒有更多的錯誤。

+2

請出示cw.cpp更完整的答案。您的問題的要點是您的聲明和定義不匹配。正如所宣稱的那樣,它們是無效的函數,它不會接受任何參數,所以即使1是太多的參數。聽你的編譯器;-) – AJG85

回答

4

在C++中,用()聲明的函數是一個原型,意味着該函數不帶任何參數。在C++中,它相當於使用(void)。它的含義與C中的含義不同(即該函數接受不定數量的參數)。

+0

所以我需要做的只是在圓括號內添加'void'? –

+2

@Lady_ari:不,您需要爲函數提供_correct_原型。由於我不知道它們是如何定義的,所以我不能告訴你這是什麼。 –

+0

這樣就增加了傳遞給函數的參數的類型? –

0

擴展CharlesBailey的回答是:

在C++中,Type* new_type()Type* new_type(int)因超載而不同的功能。

你的參數需要滿足他們的定義是:

//hpp: 
extern Type* new_type(int), match(float), sharetype(char); 

//cpp: 
Type* new_type(int x) { 
    // ... 
} 

Type* match(float x) { 
    // ... 
}