2013-08-21 166 views
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

你需要讓人們知道這些功能存在,所以添加的原型爲您的以上功能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>相同的方式(各種)包含在文件中。

另一個小建議是避免using namespace std;。如果不僅在理論上這是不好的做法,並可能導致大型項目中的命名空間衝突。如果你像我一樣,恨打字std::string ...,然後將using std::string;添加到您的代碼爲同樣的易用性。

2

在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; 
} 
+2

你有語法錯誤。 – ChiefTwoPencils

+2

@BobbyDigital哎呀,早上太早了。謝謝。 – ilent2