在不同函数中调用同一文件中的函数时出现 C2084 错误
C2084 error when calling function in same file in a diffrent function
所以,我正在尝试在 .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));
}
您提供的这段代码(或其中的一部分)在 header 中,并且您在两个 CPP 文件中包含了 header,因此出现错误。或者,错误地将 factorial
的实现放入两个源文件中。仔细看
So, I'm trying to make a combinatorics library in a .h file.
如果将非 class 成员实现放入头文件中,则需要在函数前加上 inline
关键字,例如:
inline long int factorial(int n) // factorial of n
// ^^^^^^
{
int summation = n;
for (int i = 1; i < n; i++)
{
summation *= i;
}
return summation;
}
此外,将所有函数放入它们自己的命名空间也是一个好习惯。
很可能你没有 header 守卫。您的 header 应如下所示:
#ifndef MYHEADERNAME_H
#define MYHEADERNAME_H
// Your code is here
#endif //end of MYHEADERNAME_H
所以,我正在尝试在 .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));
}
您提供的这段代码(或其中的一部分)在 header 中,并且您在两个 CPP 文件中包含了 header,因此出现错误。或者,错误地将 factorial
的实现放入两个源文件中。仔细看
So, I'm trying to make a combinatorics library in a .h file.
如果将非 class 成员实现放入头文件中,则需要在函数前加上 inline
关键字,例如:
inline long int factorial(int n) // factorial of n
// ^^^^^^
{
int summation = n;
for (int i = 1; i < n; i++)
{
summation *= i;
}
return summation;
}
此外,将所有函数放入它们自己的命名空间也是一个好习惯。
很可能你没有 header 守卫。您的 header 应如下所示:
#ifndef MYHEADERNAME_H
#define MYHEADERNAME_H
// Your code is here
#endif //end of MYHEADERNAME_H