2012-04-26 192 views
1

我是C++的新手。我正在爲價值傳遞而掙扎,沒有人能以我能理解的方式解釋我對我做錯了什麼。我知道這是我的錯,但是我正在尋求我的代碼幫助。請幫助!'SalesTaxPct'未在此範圍內聲明

#include <iostream> 
using namespace std; 

double getValues(); 
double getSalesTax(double SalesTaxPct); 
double gettotal_price(double base, double opt); 
void PrintFinal(double base,double opt,double SalesTaxPct); 

// function to control all other functions 
int main() 
{ 
    getValues(); 
    getSalesTax(SalesTaxPct); 
    PrintFinal(base,pt,SalesTaxPct); 
} 

// function to calculate sales tax percent into decimal 
double getSalesTax(double SalesTaxPct)  

{ 
    double SalesTax; 

    SalesTax = SalesTaxPct/100; 

    return SalesTax; 
} 



// function to find total 
double gettotal_price(double base, double opt, double SalesTax) 

{ 

    return = (base + opt) * (1 + SalesTax); 


} 


// function to show user all values input and also total 
void PrintFinal(double base, double opt, double SalesTaxPct) 

{ 
    cout << "Base vehicle price: $" << base << endl; 

    cout << "Options Price: $" << opt << endl; 

    cout << "Sales tax pct: " << SalesTaxPct << "%" << endl; 

    cout << "Total vehicle price: $" << gettotal_price(double base, double opt, double SalesTax) << endl; 

} 


// function to get input values 
void getValues() 
{ 
    double base, double opt, double SalesTaxPct; 

    cout << "Enter a base vehicle price: " << endl; 
    cin >> base; 

    cout << "Enter options price: " << endl; 
    cin >> opt; 

    cout << "Enter a sales tax percent: " << endl; 
    cin >> SalesTaxPct; 


} 
+0

我真的很喜歡你如何將所有輸入放在一個函數中,並將所有的輸出放在另一個函數中。這使您可以將所有主邏輯放在自己的代碼中,而不必關心如何獲得結果或執行操作。有一天,您可能想從文件獲取數據或通過網絡發送數據,而唯一需要更改的是輸入/輸出代碼。 – 2012-04-26 17:19:52

回答

4

當你在main,讓我們在節目看到的是:

int main() 
{ 
    getValues(); 
    getSalesTax(SalesTaxPct); 
    PrintFinal(base,pt,SalesTaxPct); 
} 

,你的程序知道在這一點上唯一的變量是:getValues()getSalesTax()gettotal_price()PrintFinal()。警告告訴你,在你的程序的這一點上,SalesTaxPct還沒有被聲明,並且查看我們的程序知道的變量/函數列表,實際上,SalesTaxPct不在列表中。我們期望SalesTaxPct的價值來自哪裏?

它看起來像來自功能getValues,我們從用戶輸入中獲取它。然而,任何時候你有{ ... },大括號內的東西不能在外面訪問。因此,SalesTaxPct僅在函數getValues內的「範圍內」。如果您希望在該功能之外(您可以)訪問該功能,則需要稍微改變一下。

int main() 
{ 
    double base; 
    double opt; 
    double SalesTaxPct; 
    getValues(base, opt, SalesTaxPct); 
    getSalesTax(SalesTaxPct); 
    PrintFinal(base, opt, SalesTaxPct); 
} 

現在當我們在main需要它們時,我們所有的變量仍然存在。但是,這裏仍然存在問題。我們希望我們傳入getValues的更改更改main中的變量。這意味着我們不能通過「按價值」,因爲這將首先製作副本,然後更改這些副本(不是我們想要的)。取而代之的是,我們必須說,我們所做的更改需要從功能一些如何返回:

void getValues(double & base, double & opt, double & SalesTaxPct); 

這一點&存在意味着,而不是製作副本和更改複製,我們講的是功能對我們直接傳入的變量進行操作。這被稱爲「通過參考」。

在你的代碼的其他部分有一些類似的問題,但現在你可以弄清楚如何解決它們。

+0

謝謝你,幫助了很多! – supasized 2012-04-26 17:56:48