我对声明与定义的规则有点模糊。
我在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个项目都是指针,所以顺序上的差异无关紧要吗?
答案 0 :(得分:12)
为什么参数顺序的变化不重要?
订单 很重要。在C ++中,函数可以重载,因此如果两个或多个函数具有不同的参数(或者,如果它们是成员函数,如果它们在const限定条件上不同),则它们可以具有相同的名称。
您实际上已声明了两个sumTotalEnrgyAndClush
函数。头文件中的声明声明了一个永远不会定义的函数,源文件中的声明声明并定义了第二个函数。
如果您尝试使用头文件中声明的函数(例如,通过调用它或使用其地址),您将收到错误,因为该函数未定义。