2016-07-05 12 views
-3

私はここで全く新しいばかりですので、許してください。 結果が得られないので、コード全体をここに掲載します。C++で関数が動作しない

class DigitalPet 
{ 
public: 
    DigitalPet (std::string); 
    ~DigitalPet(); 
    void talk(); 
    void play(); 
    void feed(); 
    void setMemberName (std::string); 
    void setMemberMood(); 
    std::string getMemberMood() const; 
    int getMemberHunger() const; 
    int getMemberBoredom() const; 


private: 
    std::string m_memberName; 
    int m_memberHunger; 
    int m_memberBoredom; 
    std::string m_memberMood; 
}; 

実装。

DigitalPet::DigitalPet(std::string name) 
{ 
    setMemberName (name); 
    m_memberHunger = 8; 
    m_memberBoredom = 4; 
    setMemberMood(); 
} 
DigitalPet::~DigitalPet() 
{ 

}; 
void DigitalPet::talk() 
{ 
    std::cout << "\nHello. My name is " << m_memberName << " and I am " << getMemberMood()<< std::endl; 
    m_memberHunger -= 2; 
    m_memberBoredom -= 2; 
} 
void DigitalPet::play() 
{ 
    m_memberHunger -= 4; 
    m_memberBoredom -= 2; 
} 
void DigitalPet::feed() 
{ 
    m_memberHunger += 4; 
    m_memberBoredom -= 1; 
} 
void DigitalPet::setMemberName (std::string name) 
{ 
    while (name.length() > 10) 
    { 
     std::cout << "The name you entered is too long. Please enter a smaller name!!!" << std::endl; 
     std::cin >> name; 

    } 
    m_memberName = name; 
} 
void DigitalPet::setMemberMood() 
{ 

    if (m_memberHunger <= 0 && m_memberBoredom <= 0) 
    { 
     m_memberMood = "mad"; 
    } 
    else if (m_memberHunger > 0 && m_memberHunger <= 4 && m_memberBoredom > 0 && m_memberBoredom <= 2) 
    { 
     m_memberMood = "frustrated"; 
    } 
    else if (m_memberHunger > 4 && m_memberHunger <= 8 && m_memberBoredom > 2 && m_memberBoredom <= 4) 
    { 
     m_memberMood = "good"; 
    } 
    else if (m_memberHunger > 8 && m_memberHunger <= 12 && m_memberBoredom > 4 && m_memberBoredom <= 6) 
{ 
     m_memberMood = "happy"; 
} 
} 
std::string DigitalPet::getMemberMood() const 
{ 
    return m_memberMood; 
} 
int DigitalPet::getMemberHunger() const 
{ 
    return m_memberHunger; 
} 
int DigitalPet::getMemberBoredom() const 
{ 
    return m_memberBoredom; 
} 

ここで私はそれらを呼び出します。

int main() 
{ 
    DigitalPet Yama("Yama"); 

    Yama.talk(); 

    std::cout << Yama.getMemberBoredom()<< std::endl; 

    std::cout << Yama.getMemberHunger() << std::endl; 

    Yama.talk(); 

    return 0; 
} 

今の問題はm_memberHungerとm_memberBoredomが減少するものの、それは「良い」気分を入力し続けていることです。

+3

あなたのプログラムを投稿してください。あなたが行ったことを推測するのは嫌です。私は 'main()'を見ることができません。 – nvoigt

+1

setMemberMood()はどこですか? – PierrOz

+0

私はあなたが設定していて、別のインスタンスに乗っている感傷を持っています。あなたの呼び出しコードを確認する必要があります。 –

答えて

7

これは、デバッガの使用方法を学習するための時間です。

setMemberNameメソッドは、最初から正しい長さの場合は決して名前を設定しません。エラーのみが、メンバー変数の実際の設定をトリガーします。

+0

問題はsetMemberName関数ではなく、setMemberMoodで問題になります。 – Stepan

+2

@Stepan問題が 'setMemberMood'であることを、あなたが呼び出していないときにどう知っていますか? –

3

問題は関数自体である、ここでは修正されています

void DigitalPet::setMemberName (std::string name) 
{ 
    while (name.length() > 10) 
    { 
     std::cout << "The name you entered is too long. Please enter a smaller name!!!" << std::endl; 
     std::cin >> name; 
    } 

    m_memberName = name; 
} 

問題のパラメータが10文字以上だったとあなたは再びそれをチェックしていなかったときにのみだけで、名前を付けましたそれを割り当てた。

+1

問題はsetMemberName関数ではなく、setMemberMoodで問題になります。 – Stepan

+0

@AalgirdasPreidžiusのコメントを参照してください.. –

関連する問題