2016-04-25 14 views
0

Ich bin neu in C++ und ich versuche zu verstehen, wie Sie Variablen durch mehrere Funktionen übergeben. Ich verstehe, dass Sie globale Variablen oder Argumentübergabe verwenden können.Nicht verstehen, C++ - Argument über Funktionen

In meinem Code habe ich zwei Funktionen nach der Hauptfunktion definiert. Ich habe es mit Prototypen eingerichtet. Der Fehler in CodeBlocks ist .error: 'studentFees' was not declared in this scope. Dies ist sinnvoll, da ich in den Zeilen 123 und 124 nichts implementiert habe. Aber ich bin mir nicht ganz sicher, wie. Ich fühle mich auch nicht gut darin, die Prototypen richtig zu implementieren.

Kann mir jemand auf die richtige Art und Weise dabei helfen?

#include <iostream> 
#include <iomanip> 
#include <cstdlib> 
#include <fstream> 
#include <string> 
using namespace std; 

void undergradBill(
       double finalBill = 0; 
       double studentTuition, 
       double studentFees, 
       double studentID, 
       string studentLevel, 
       string studentBio, 
       string studentRes, 
       string studentLife, 
       string studentCredit 
       ); 
void gradBill(
       double finalBill = 0; 
       double studentTuition, 
       double studentFees, 
       double studentID, 
       string studentLevel, 
       string studentBio, 
       string studentRes, 
       string studentLife, 
       string studentCredit 
      ); 

int main() 
{ 
    double finalBill = 0; 
    double studentTuition = 0; 
    double studentFees = 0; 
    double studentID = 0; 
    string studentLevel = ""; 
    string studentBio = ""; 
    string studentRes = ""; 
    string studentLife = ""; 
    string studentCredit = ""; 

    cout << "Welcome College Student!" << endl; 
    cout << "This program is designed to assist you in calculating your college tuition per semester." << endl; 
    cout << endl; 
    cout << "Please provide the following information:" << endl; 
    cout << " -Student ID" << endl; 
    cout << " -Graduate/Undergraduate" << endl; 
    cout << " -Residency" << endl; 
    cout << " -Major" << endl; 
    cout << " -Full Time/Part Time" << endl; 
    cout << " -Credits taken this semester" << endl; 
    cout << endl; 
    system("PAUSE"); 

    system("CLS"); 
    cout << "Please enter your student ID." << endl; 
    cout << "Student ID: "; 
    cin >> studentID; 
    while(cin.fail()) { 
     cout << "Error: please enter a valid entry." << endl; 
     cin.clear(); 
     cin.ignore(256,'\n'); 
     cout << "Student ID :"; 
     cin >> studentID; 
    } 

    cout << endl; 
    cout << "Are you a graduate or undergraduate student?" << endl; 
    cout << "(G/U) :"; 
    cin.get(); 
    getline(cin, studentLevel); 
    while(studentLevel != "g" && studentLevel != "G" && studentLevel != "u" && studentLevel != "U") { 
     cout << "Error: please enter a valid entry." << endl; 
     cout << "(G/U) :"; 
     getline(cin, studentLevel); 
    } 
    if(studentLevel == "g" || studentLevel == "G") { 
     cout << endl; 
     cout << "Are you apart of the biology program?" << endl; 
     cout << "(Y/N) :"; 
     getline(cin, studentBio); 
     while(studentBio != "y" && studentBio != "Y" && studentBio != "n" && studentBio != "N") { 
     cout << "Error: please enter a valid entry." << endl; 
     cout << "(Y/N) :"; 
     getline(cin, studentBio); 
     } 
    } 

    cout << endl; 
    cout << "Are you a resident or New York State?" << endl; 
    cout << "(Y/N) :"; 
    getline(cin, studentRes); 
    while(studentRes != "y" && studentRes != "Y" && studentRes != "n" && studentRes != "N") { 
     cout << "Error: please enter a valid entry" << endl; 
     cout << "(Y/N) :"; 
     getline(cin, studentRes); 
    } 

    cout << endl; 
    cout << "Are you a full time student or a part time student?" << endl; 
    cout << "(F/P) :"; 
    getline(cin, studentLife); 
    while(studentLife != "f" && studentLife != "F" && studentLife != "p" && studentLife != "P") { 
     cout << "Error: please enter a valid entry." << endl; 
     cout << "(F/P) :"; 
     getline(cin, studentLife); 
    } 
    if (studentLife == "p" || studentLife == "P") { 
     cout << endl; 
     cout << "How many credit hours are you taking this semester?" << endl; 
     cout << "Credit Hours :"; 
     cin >> studentCredit; 
     while(cin.fail()) { 
     cout << "Error: please enter a valid entry." << endl; 
     cin.clear(); 
     cin.ignore(256,'\n'); 
     cout << "Credit Hours :"; 
     cin >> studentCredit; 
     } 
    } 

    if(studentLevel == "u" || studentLevel == "U" || studentLife == "p" || studentLife == "P") {undergradBill();} 
    else {gradBill();} 

    system("CLS"); 
    finalBill = studentTuition + studentFees; 
    cout << "Student Account: " << studentID << endl; 
    cout << "Billing Total: " << finalBill << endl; 
} 

void undergradBill() { 
    if(studentLife == "f" || studentLife == "F") { 
     if(studentRes == "y" && studentRes == "Y") { 
      studentTuition = 3085.00; 
      studentFees = 588.50; 
     } 
     else { 
      studentTuition = 7910.00; 
      studentFees = 588.50; 
     } 
    } 
    else { 
     if(studentRes == "y" && studentRes == "Y") { 
      studentTuition = 257.00; 
      studentFees = studentCredit * 48.95; 
     } 
     else { 
      studentTuition = 659.00; 
      studentFees = studentCredit * 48.95; 
     } 
    } 
} 

void gradBill() { 
    if(studentBio == "y" || studentBio == "Y") { 
     if(studentLife == "f" || studentLife == "F") { 
      if(studentRes == "y" && studentRes == "Y") { 
       studentTuition = 5185.00; 
       studentFees = 342.14 + 900.00; 
      } 
      else { 
       studentTuition = 10095.00; 
       studentFees = 342.14 + 900.00; 
      } 
     } 
     else { 
      if(studentRes == "y" && studentRes == "Y") { 
       studentTuition = studentCredit * 432.00; 
       studentFees = (studentCredit * 28.37) + 900.00; 
      } 
      else { 
       studentTuition = studentCredit * 841.00; 
       studentFees = (studentCredit * 28.37) + 900.00; 
      } 
     } 
    } 
    else { 
     if(studentLife == "f" || studentLife == "F") { 
      if(studentRes == "y" && studentRes == "Y") { 
       studentTuition = 5185.00; 
       studentFees = 342.14; 
      } 
      else { 
       studentTuition = 10095.00; 
       studentFees = 342.14; 
      } 
     } 
     else { 
      if(studentRes == "y" && studentRes == "Y") { 
       studentTuition = studentCredit * 432.00; 
       studentFees = studentCredit * 28.37; 
      } 
      else { 
       studentTuition = studentCredit * 841.00; 
       studentFees = studentCredit * 28.37; 
      } 
     } 
    } 
} 

Ich weiß, das ist viel zu fragen ... Sie Dank an alle, die mir helfen, verstehen können, wie dies ein wenig besser zu machen!

+0

Fügen Sie die Parameter von den Prototypen zu den Implementierungen von gradBill() und undergineBill() hinzu. – dgsomerton

+0

Sie müssen [beginnen mit einem guten Anfänger Buch] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list), weil diese Funktionsdeklarationen in C++ nicht gültig sind und sollten gib dir Fehler. –

+0

Parameter mit Standardargumenten müssen am Ende der Parameterliste eine zusammenhängende Gruppe bilden. Wenn Sie also finalBill einen Standardparameter geben möchten, sollte dieser als letzter Parameter übergeben werden oder Sie sollten auch einen Standardwert für die folgenden Parameter angeben. – Stefano

Antwort

1

Das Problem ist, dass in C++ Sie Funktion Überlastung haben, was bedeutet, dass Sie zwei Funktion mit dem gleichen Namen, aber unterschiedlicher Unterschrift (im Grunde Argumente) haben können.

Zum Beispiel, wenn Sie eine Funktion

void undergradBill(double finalBill); 

haben, die von einer Funktion unterscheidet

void undergradBill(); 

Sie erklärt haben (illegal möchte ich hinzufügen) Funktionsdeklarationen unter Argumente. Dann haben Sie Funktionen unter keine Argumente definiert. Dies ist in C++ aufgrund der Überlastung gültig.

So ist Ihr Problem wegen vieler Gründe: Zuerst haben Sie ungültige Funktionsdeklarationen, die Ihnen Fehler geben werden. Aus diesem Grund hat der Compiler nicht die Deklarationen der Funktionen, die Sie aufrufen möchten. Und da Ihr Problem mit der Deklaration und der Definition nicht zusammenpasst, können Sie die Funktionen sowieso nicht aufrufen, da die Funktionen, die Sie aufrufen, nicht existieren.

Und natürlich, da Sie die Funktionen ohne Argumente definieren, wird die Verwendung der "Argumente" Ihnen Fehler geben, da diese Variablen nicht innerhalb der Funktionsdefinitionen existieren.