【问题标题】:Not declared in Scope未在范围内声明
【发布时间】:2016-05-18 09:21:34
【问题描述】:

我编写了一个简单的平均计算程序,试图计算一个学期的平均数。当我编译代码时,我收到一个错误,告诉我我的“inputExam”函数没有在这个范围内声明。我研究了错误消息,但不知道如何修复它。

我也收到其他功能的此错误,但一旦我了解我的错误,我认为我可以修复其他功能。

 #include <iostream>

using namespace std;

int main()
{
    double finalExam=0.0;
    double midterm = 0.0;
    double quizzes = 0.0;
    double labs = 0.0;
    double semGrade=0.0;

    midterm=inputExam("Midterm");
    finalExam=inputExam("Final");
    quizzes=inputAndAvgQuizzes();
    labs=inputAndAvgLabs();

    semGrade=(midterm*.2)+(finalExam*.2)+(labs*.5)+(quizzes*.1);

    cout<<"Your End of Semester Grade is: " semGrade;

    return 0;
}

double inputExam(string examType)
{
    double grade;
    cout<< "Enter the " examType " Score: ";
    cin>>grade;
    return (grade);
}

double inputAndAvgLabs()
{
    double num [4];
    double sum;
    double avg;

    if (int a=0, a<3,a++)
    {
        cout<<"What is the grade?"<<endl;
        cin>>num[a]>>endl;
    }
    if (int a=0, a<3, a++)
    {
        sum=sum+num[a];
    }
    avg=sum/4;

    return avg;
}

double inputAndAvgQuizzes()
{
    double num[3];
    double sum;
    double avg;
    double lowest = num[0];

    if (int a=0, a<2,a++)
    {
        cout<<"What is the grade?"<<endl;
        cin>>num[a]>>endl;
    }

    if (lowest>num[1])
    {
        lowest=num[1];
    }
    if (lowest>num[2])
    {
        lowest=num[2];
    }
    sum=num[1]+num[2]+num[3]-lowest;
    avg=sum/2;

    return avg;
}

【问题讨论】:

    标签: c++


    【解决方案1】:

    您需要让人们知道这些函数存在,因此在main 上方为您的函数添加原型或在那里定义您的函数。像这样:

    ...
    double inputExam(string examType);
    double inputAndAvgLabs();
    double inputAndAvgQuizzes();
    
    int main() { ... }
    
    //definitions after main
    

    ..或将调用上方的所有这些定义复制粘贴到main,如下所示:

    ...
    // Function defs here
    // Prototypes no longer needed
    ...
    int main() {...}
    // Defs no longer needed here
    

    或者,您可以将所有定义放在一个外部文件中,并通过make 文件或更好的方式将其编译到项目中,随着您的进展,在头文件和实现文件中创建类并将它们同样包含在您的文件中你做#include &lt;iostream&gt;的方式(有点)。

    另一个小建议是避免using namespace std;。如果不仅在理论上这是不好的做法,并且可能导致大型项目中的命名空间冲突。如果您像我一样讨厌输入 std::string ...,那么将 using std::string; 添加到您的代码中,同样易于使用。

    【讨论】:

      【解决方案2】:

      在 C/C++ 中,您需要在使用之前声明函数。在这种情况下,它只是意味着在 main 函数之前声明函数原型,然后在 main 函数之后实现它们。

      例子:

      // declare a prototype
      double Function(int variable);
      
      int main()
      {
          Function(5);
          return 0;
      }
      
      // Implement the function
      double Function(int variable)
      {
          /* Do Something */
      }
      

      或者,您可以将代码更改为以下形式:

      // Implement the function first
      double Function(int variable)
      {
          /* Do Something */
      }
      
      int main()
      {
          Function("Testing");
          return 0;
      }
      

      【讨论】:

      • @BobbyDigital 哎呀,早上太早了。谢谢。
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-09-20
      • 2011-09-14
      • 2016-08-09
      • 2019-02-17
      • 2021-01-07
      相关资源
      最近更新 更多