c ++中的不同声明和定义

时间:2010-08-26 14:47:44

标签: c++ declaration

我对声明与定义的规则有点模糊。

我在funcs.h中有以下声明:

void sumTotalEnrgyAndClush(Protein &A,Protein &B,double ans[2],double enrgyA[18][18],double     enrgyB[18][18]);

请注意,ans [2]在enrgyA和B之前。

在funcs.cpp文件中,定义的开头如下:

void sumTotalEnrgyAndClush(Protein &A,Protein &B,double enrgyA[18][18],double enrgyB[18][18],double ans[2])

它编译(通过makefile)并且工作正常。

我还注意到,如果删除声明,编译器似乎管理得很好。

为什么参数顺序的变化不重要?难道最后3个项目都是指针,所以顺序上的差异无关紧要吗?

1 个答案:

答案 0 :(得分:12)

  

为什么参数顺序的变化不重要?

订单 很重要。在C ++中,函数可以重载,因此如果两个或多个函数具有不同的参数(或者,如果它们是成员函数,如果它们在const限定条件上不同),则它们可以具有相同的名称。

您实际上已声明了两个sumTotalEnrgyAndClush函数。头文件中的声明声明了一个永远不会定义的函数,源文件中的声明声明并定义了第二个函数。

如果您尝试使用头文件中声明的函数(例如,通过调用它或使用其地址),您将收到错误,因为该函数未定义。