2014-04-14 143 views
0

我在C++项目工作“不在范围内声明”,并在编译时,我收到错误消息:收到错误消息

error: mean was not declared in this scope
error: standard_dev was not declared in this scope

我的代码是

#include <iostream> 
#include <iomanip> 
#include <fstream> 
#include <cmath> 
#include <string> 

using namespace std; 

int main() 
{ 
    int N(0); 
    char filename[100]; 
    double m, stdev; 
    string temp; 

    double next; 
    int count = 0; 
    cout << "Enter name of file: "; 
    cin >> filename; 

    ifstream myfile; 
    myfile.open(filename); 
    while (myfile >> next) 
    { 
     count++; 
    } 
    N = count; 
    double* mydata; 
    mydata = new double[N]; 

    for (int i = 0; i < N; i++) 
    { 
     myfile >> mydata[i]; 
    } 
    m = mean(mydata, N); 
    stdev = standard_dev(mydata, m, N); 
    cout << "The standard deviation is:" << stdev << endl; 

    myfile.close(); 
    delete[] mydata; 
    return 0; 
} 

double mean(double* mydata, double N) 
{ 
    double sum(0), m; 
    for (int i = 0; i < N; i++) 
    { 
     sum += mydata[i]; 
    } 
    m = (sum/(double) N); 
    return (m); 
} 
double standard_dev(double* mydata, double m, int N) 
{ 
    double* mydata2 = new double[N]; 
    for (int i = 0; i < N; i++) 
    { 
     mydata2[i] = pow((mydata[i] - m), 2); 
    } 
    double sum(0), S, X; 
    for (int i = 0; i < N; i++) 
    { 
     sum += mydata2[i]; 
    } 
    X = sum/N; 
    S = sqrt(X); 
    return (S); 
} 

回答

0

这些功能有当你尝试使用它们时还没有看到;编译器不知道它们是什么导致了错误。无论是main()之前移动它们或它们的原型,比如:

double mean(double * mydata, double N); 
double standard_dev(double * mydata, double m, int N); 
int main() 
{ 
    ... 

这将使编译它那些符号的期望,所以当它看到他们在使用它知道如何与他们无关。

0

任何名称必须在其使用之前定义(极少数例外情况相对于模板)。您在声明

m = mean(mydata, N); 

使用名称mean但名称mean尚未确定。之前主要

double mean(double *mydata, double N); 
double standard_dev(double *mydata, double m, int N); 

int main() 
{ 
//... 

或者其使用前

将函数声明。

int main() 
{ 
    double mean(double *mydata, double N); 
    double standard_dev(double *mydata, double m, int N); 

    //... 
    m = mean(mydata, N); 
    //... 
0

你需要有原型的功能mean()std_dev()在你的文件的顶部。否则,它们在主函数中不存在。将整个功能复制到主功能上方的空间,或者为它们制作原型。祝你好运!