0

統計分析を行うために、xcode を使用してプログラムを作成しています。ただし、サンプル分散を計算する関数を作成しているときに、xcode は関数sample_mean(これは私が定義した関数でもあります) の呼び出しがあいまいであると言い続けます。

コードは次のとおりです。

#include <iostream>
#include <fstream>
#include <cmath>
#include <vector>


//sample_mean
double sample_mean (std::vector<double> v);


//sample_variance
double sample_variance (std::vector<double> v);



int main()
{
    std::cout<<"hello world";
}


//sample_mean
double sample_mean (const std::vector<double>& v)
{
    double sum= 0;
    int i=0; for (; i<v.size(); ++i)
    {
        sum= sum+ v[i];
    }
    return sum/v.size();
}



//sample_variance
double sample_variance (const std::vector<double>& v)
{
    double average= sample_mean(v);
    double sum=0;
    int i=0; for (; i<v.size(); ++i)
    {
        sum= sum+ std::pow((v[i]-average), 2);
    }
    return sum/v.size();
}

このコードにはsample_meanとの定義しか含まれていませんが、コンパイラは( である)の定義内のの関数呼び出しがあいまいsample_varianceだと言い続けています。プログラムの何が問題になっていますか?sample_meansample_variancedouble average= sample_mean(v);

4

3 に答える 3

3

定義には、宣言とは異なる署名があります。

簡単な解決策:上記 の定義を移動mainし、関数の前方宣言を忘れます。

関数の前方宣言は C 主義であり、C++ では特に優れたアイデアではありません。作業が増えるだけで、問題が発生します。あなたが発見したように。

于 2012-08-13T07:18:04.870 に答える
1

1つだけでなく、 2つのメソッドがsample_meanあり、両方を呼び出すことができます。

double sample_mean (const std::vector<double>& v)

double sample_mean (std::vector<double> v)
于 2012-08-13T07:18:26.007 に答える
0

最初に関数宣言がdouble sample_mean (std::vector<double>)あり、次に関数定義がありますdouble sample_mean (const std::vector<double>&)。これらは、2つの異なる関数の識別子として扱われます。

于 2012-08-13T07:19:15.630 に答える