2016-05-28 7 views
-2

したがって、私は.hファイルでコンビナトリアルライブラリを作成しようとしています。私は数nの階乗を計算し、階乗関数を使ってnの組み合わせを計算し、与えられたnとkに対してkを選ぶ関数(同じファイル内)を計算する関数を持っています。しかし、私がコードをコンパイルしようとすると、このエラーが私にスローされます。C2048関数 'long factorial(int)'にはすでにボディがあります。異なる関数で同じファイル内の関数を呼び出すときのC2084エラー

(私は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

は再現できませんでした。まだ[mcve]を作成しようとしましたか? – user2079303

+1

*おそらく*これを引き起こしているものがいくつかあります。しかし、私たちに推測させないでください。それは質問をする生産的な方法ではありません。どのようにこのコードを使用していますか?ヘッダファイルかコードファイルか?あなたはそれを#含まれていますか?もしそうなら、どうやってどこで?他の男が言ったように、問題を再現するための最小限の例が良いスタートになるでしょう。 –

答えて

0

ほとんどの場合、ヘッダーガードはありません。あなたのヘッダーは次のようになります。

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

Wikipedia info here.

+0

いいえ、ヘッダーガードが不足している可能性はほとんどありません。 –

+0

問題を修正してくれてありがとう! – CGRaul

0

あなたが提示(またはその一部)このコードは、ヘッダーにあり、次の2つのCPPファイルのヘッダーので、誤差を含めています。または、誤ってfactorialの実装が2つのソースファイルに分類されます。よく見て。

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; 
    } 

また、すべてあなたを置くために良い習慣でしょう関数を独自の名前空間に変換します。

関連する問題