为什么函数“sample_mean”的调用不明确?

时间:2012-08-13 07:16:19

标签: c++ xcode function

我正在用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_meansample_variance的定义,但编译器一直告诉我sample_mean的定义中sample_variance的函数调用(即double average= sample_mean(v);)含糊不清。我的计划有什么问题?

3 个答案:

答案 0 :(得分:3)

您的定义与声明的签名不同。

简单治愈:移动 main上方的定义,忘记向前声明函数。

前向声明函数是一个C-ism,在C ++中并不是一个特别好的想法。它只是增加了工作,并产生了问题。正如你所发现的那样。

答案 1 :(得分:1)

您有2个名为sample_mean的方法,而不仅仅是一个,两者都可以调用:

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

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

答案 2 :(得分:0)

首先你有一个函数声明double sample_mean (std::vector<double>),然后你有一个函数定义double sample_mean (const std::vector<double>&)。这些被视为两种不同功能的标识符。