2012-04-26 13 views
1

私はC++を初めて使用しています。私は価値のあるものでパスすることに苦労しています、そして、私が理解できる方法で私が間違っていることを誰も説明することはできません。私はこれが私のせいだと知っていますが、私のコードで助けを求めています。助けてください!あなたがmainである場合'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

私は本当にあなたの入力のすべてを1つの関数に入れておき、あなたのすべての出力を別の関数に入れておきたいと思います。これにより、すべての主要なロジックを自分のコードに入れて、結果を得る方法やそれを使って何をするのか気にする必要はありません。ある日、ファイルからデータを取得したり、ネットワーク経由でデータを送信したい場合があります。変更する必要があるのは、入力/出力コードだけです。 –

答えて

4

、のプログラムは見るものの上に行ってみよう:

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

あなたのプログラムは、この時点で知っている唯一の変数は以下のとおりです。getValues()getSalesTax()gettotal_price()、そしてPrintFinal()。プログラムのこの時点でSalesTaxPctがまだ宣言されておらず、プログラムが知っている変数/関数のリストを見ると、実際にはSalesTaxPctはリストにはないことがわかります。 SalesTaxPctの値はどこから来ると思いますか?

これは機能getValuesから来ているようですが、私たちはユーザーの入力からそれを取得しています。しかし、あなたが{ ... }を持っているときはいつも、中括弧内のものは外部にアクセスできません。したがって、SalesTaxPctは、機能getValues内の「スコープ内」のみです。あなたがその機能の外でアクセスできるようにしたいのであれば、ちょっとしたことを変える必要があります。我々はmainでそれらを必要なとき

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

今、私たちのすべての変数のはまだ存在しています。しかし、ここでも問題は残っています。 mainの変数を変更するには、getValuesに渡す変更が必要です。つまり、最初にコピーを作成し、そのコピーを変更する(必要なものではない)ため、「価値ある」ものを渡すことはできません。代わりに、我々は我々が行った変更は、いくつかの方法が関数から返される必要があることを言う必要がある:

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

がほとんど&ではなくコピーを作成し、そのコピーを変更するよりも、我々は機能を言っていることを意味します変数に直接作用します。これは「参照渡し」と呼ばれます。

コードの他の部分にも同様の問題がいくつかありますが、おそらくこれを修正する方法を見つけることができます。

+0

ありがとう、それは多くの助けて! – supasized

関連する問題