我正在用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_mean
的定义中sample_variance
的函数调用(即double average= sample_mean(v);
)含糊不清。我的计划有什么问题?
答案 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>&)
。这些被视为两种不同功能的标识符。