2011-12-01 57 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) { 
    // ... 
}