C2084 在不同函数的同一文件中调用函数时出错

C2084 error when calling function in same file in a diffrent function

本文关键字:函数 调用 出错 文件 C2084      更新时间:2023-10-16

所以,我正在尝试在.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));
}

很可能你没有标题护罩。您的标题应如下所示:

#ifndef MYHEADERNAME_H
#define MYHEADERNAME_H
// Your code is here
#endif //end of MYHEADERNAME_H

维基百科信息在这里。

提供的此代码(或其中的一部分)位于标头中,并且您将标头包含在两个CPP文件中,因此出现错误。或者,错误地将factorial的实现放入两个源文件中。仔细看。

所以,我正在尝试在.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;
  }

此外,将所有

函数放入自己的命名空间中也是一个好习惯。