0

Я новичок в C++, и я пытаюсь понять, как передавать переменные через несколько функций. Насколько я понимаю, вы можете использовать глобальные переменные или передачу аргументов.Непонимание аргумента C++, передаваемого через функции

В моем коде я определил две функции после основной функции. Я установил его с прототипами. Ошибка, которую я получаю в CodeBlocks, - .error: 'studentFees' was not declared in this scope. Это имеет смысл, поскольку я ничего не реализовал в строках 123 и 124. Но я не совсем уверен, как это сделать. Я также не очень хорошо себя чувствую при правильном использовании прототипов.

Может ли кто-нибудь помочь мне в правильном направлении?

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

Я знаю, что это много, чтобы спросить ... Спасибо вам всем, кто может помочь мне понять, как это сделать немного лучше!

+0

добавить параметры от прототипов к реализациям gradBill() и undergradBill(). – dgsomerton

+0

Вам нужно [начать с хорошей книги для начинающих] (http://stackoverflow.com/questions/388242/the-definitive-c-book-guide-and-list), поскольку эти объявления функций недействительны на C++ и должны дать вам ошибки. –

+0

Параметры с аргументами по умолчанию должны формировать смежную группу в конце списка параметров. Поэтому, если вы хотите предоставить параметр по умолчанию finalBill, это должно быть передано как последний параметр, или вы должны указать значение по умолчанию для следующих параметров. – Stefano

ответ

1

Проблема заключается в том, что в C++ у вас есть функцию перегружать, что означает, что вы можете иметь две функции с одинаковыми именами, но разными подписи (в основном аргументы).

Например, если у вас есть функция

void undergradBill(double finalBill); 

, который отличается от функции

void undergradBill(); 

Вы объявили (незаконно, я мог бы добавить) объявление функций принимают аргументы. Затем вы определили функции, принимающие аргументы. Это действительно в C++ из-за перегрузки.

Итак, ваша проблема связана с множеством причин: сначала у вас есть незаконные объявления функций, которые дадут вам ошибки. Из-за этого компилятор не имеет деклараций функций, которые вы хотите вызвать. И из-за вашей проблемы с объявлением и определением, не совпадающим, вы не сможете вызывать функции в любом случае, поскольку функции, которые вы вызываете, на самом деле не существуют.

И, конечно, поскольку вы определяете функции без аргументов, использование «аргументов» даст вам ошибки, поскольку эти переменные не существуют внутри определений функций.