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

这段代码只包含 and 的定义sample_meansample_variance但是编译器一直告诉我(which is )sample_mean的定义中的函数调用是不明确的。我的程序有什么问题?sample_variancedouble average= sample_mean(v);

4

3 回答 3

3

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

简单的解决方法:移动上面 main的定义,忘记前向声明函数。

前向声明函数是一种 C 主义,在 C++ 中并不是一个特别聪明的想法。它只会增加工作,并产生问题。正如你所发现的。

于 2012-08-13T07:18:04.870 回答
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>&)。这些被视为两个不同功能的标识符。

于 2012-08-13T07:19:15.630 回答