【问题标题】:Getting error message "Not declared in scope" [duplicate]收到错误消息“未在范围内声明”[重复]
【发布时间】:2014-05-28 18:27:56
【问题描述】:

我正在处理一个 C++ 项目,并且在编译时收到错误消息:

错误:mean 未在此范围内声明
错误:standard_dev 未在此范围内声明

我的代码是

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

【问题讨论】:

    标签: c++


    【解决方案1】:

    这些功能在你尝试使用时还没有看到;编译器不知道它们是什么导致错误。要么将它们移到main() 之前,要么将它们原型化,例如:

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

    这将为编译器提供对这些符号的期望,因此当它看到它们正在使用时,它就知道如何处理它们。

    【讨论】:

      【解决方案2】:

      任何名称都必须在使用前定义(与模板相关的极少例外)。您在声明中使用名称mean

      m =  mean(mydata, N);
      

      但名称 mean 尚未定义。

      将函数声明放在 main 之前

      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);
         //...
      

      【讨论】:

        【解决方案3】:

        您需要在文件顶部为您的函数mean()std_dev() 提供原型。否则,它们不会“存在”在主函数中。要么将整个函数复制到主函数上方的空间,要么为它们制作原型。祝你好运!

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2019-10-30
          • 2012-04-20
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多