2017-12-04 13 views
0

クラスmoneyboxを作成したいと思います。これは合計コイントに値1.5と10セントを加算することができます。ここで変数がこのクラススコープで宣言されていませんC++

は私のコードは次のとおりです。

#include <iostream> 
#include <vector> 
#include <string> 
#include <stdexcept> 
using namespace std; 

class MoneyBox{ 
public: 
    MoneyBox(int one_num = 0 ,int five_num = 0,int ten_num = 0); 
    void print(); 
    MoneyBox add(int ones,int fives,int tens); 

private: 
    int sum; 
    int one_num; 
    int five_num; 
    int ten_num; 
}; 



MoneyBox::MoneyBox(int ones,int fives,int tens){ 
    sum = 1*ones + 5*fives + 10*tens; 
    one_num = ones; 
    five_num = fives; 
    ten_num = tens; 
} 

void MoneyBox::print(){ 
    cout << one_num <<"*"<<"1Cent" << five_num <<"*"<<"5Cent" << ten_num <<"*"<<"10Cent" << "=" << sum; 
} 


MoneyBox MoneyBox::add(int ones,int fives,int tens){ 
    one_num += ones; 
    five_num += fives; 
    ten_num += tens; 
    sum += 1 * ones + 5 * fives + 10*tens; 
    return MoneyBox(one_num,five_num,ten_num); 
} 


int main(){ 
    MoneyBox m_1; 
    MoneyBox m_2(five_num = 3); 

    m_1.add(ones = 4, tens = 3); 
    m_2.add(fives = 3, ones = 2); 

    m_1.print(); 
    cout << "\n"; 
    m_2.print(); 

} 

しかし、コンパイラはエラーを私にスローされます。

45:15:エラー:エラー: 'five_num' がこの範囲に 47:10を宣言していませんでした "ものはこのスコープで宣言されていない 47:20:エラー: 『十は』このスコープで宣言されていなかった 48:10:エラー: 『ファイブは、』このスコープで宣言されていなかったのはなぜそれがhappends、どのように

修理する?

+2

これはPythonではありません。 'MoneyBox m_2(five_num = 3);'あなたが思う通りのことをしません – UKMonkey

+0

@UKMonkeyどうすればいいですか? – vitsuk

+0

@vitsukは[this](http://en.cppreference.com/w/cpp/language/default_arguments)を見て、それをクリアする必要があります。 –

答えて

0

C++ではパラメータを名前で渡すことはできません。

MoneyBox m_2(five_num = 3); 

MoneyBox m_2(0/*required to pass explicitly*/, 3); 

などと書かれる必要があります。 five_num & c。呼び出し側のサイトで宣言されていないため、コンパイラの診断が行われません。 C++は、非常に強力な言語であり、そしていくつかの巧妙なコーディングあなたが効果的にサポートできるという名前のパラメータで可変引数テンプレートを使用して

MoneyBox(Five(5), One(2), /*any number of parameters in any order*.) 

ような構文を呼び出し可能にします。 Boost(www.boost.org)は、このスタイルをかなり使います。

関連する問題