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

时间:2016-05-28 09:07:13

标签: c++ combinatorics

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

3 个答案:

答案 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

Wikipedia info here.