所以,我正在尝试在.h文件中创建一个组合库。我有一个函数来计算数字n的阶乘,然后是一个函数(在同一个文件中),它使用阶乘函数来计算给定n和k的n选择k的组合。但是当我尝试编译代码时,它会向我抛出这个错误:C2048函数'long factorial(int)'已经有了一个正文。 (我正在使用VS 2015)
以下是代码:
long int factorial(int n) // factorial of n
{
int summation = n;
for (int i = 1; i < n; i++)
{
summation *= i;
}
return summation;
}
double combination(int n, int k) // n choose k
{
return (factorial(n) / (factorial(k) * factorial(n - k)));
}
double permutation(int n, int k) // n permutation k
{
if (k != n)
return (factorial(n) / factorial(n - k));
else
return factorial(n);
}
double repetitiveCombination(int n, int k) // repetitive combination of n choose k
{
return combination(n - 1 + k, k);
}
double orderEquals(int n, int p) // order n objects of wich p are equal
{
return (factorial(n) / factorial(p));
}
答案 0 :(得分:1)
所以,我试图在.h文件中创建一个组合库。
如果将非类成员实现放入头文件,则需要在函数前加上inline
关键字,例如:
inline long int factorial(int n) // factorial of n
// ^^^^^^
{
int summation = n;
for (int i = 1; i < n; i++)
{
summation *= i;
}
return summation;
}
将所有函数放入自己的命名空间也是一种好习惯。
答案 1 :(得分:0)
您提供的代码(或其中的一部分)位于标题中,并且您将标题包含在两个CPP文件中,因此出现错误。或者,错误地将factorial
的实现归入两个源文件中。仔细看。
答案 2 :(得分:0)
很可能你没有头部防护装置。您的标题应如下所示:
#ifndef MYHEADERNAME_H
#define MYHEADERNAME_H
// Your code is here
#endif //end of MYHEADERNAME_H