3

学期平均を計算しようとする単純な平均計算プログラムを作成しました。コードをコンパイルすると、「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;
}
4

2 に答える 2

4

これらの関数が存在することを知らせる必要があるため、上記の関数のプロトタイプを追加する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 <iostream>

もう 1 つの小さなアドバイスは、避けることusing namespace std;です。理論上だけでなく、それは悪い習慣であり、大規模なプロジェクトで名前空間の衝突につながる可能性があります。私のようにタイピングが嫌いな場合は、同じように使いやすくするためにコードにstd::string ...追加してください。using std::string;

于 2013-08-21T00:50:30.637 に答える
3

C/C++ では、関数を使用する前に宣言する必要があります。この場合、それは単に、メイン関数の前に関数プロトタイプを宣言し、メイン関数の後にそれらを実装することを意味します。

例:

// 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;
}
于 2013-08-21T00:51:45.933 に答える