成员变量在使用前重置

Member variables resetting before use

本文关键字:变量 成员      更新时间:2023-10-16

我正在学习一个名为"虚幻引擎开发者课程"的 udemy.com 教程,我被困在C++部分的某个部分。

创建了一个带有构造函数的对象来初始化我的变量,它可以工作,当我在构造函数运行时打印变量时,我得到了预期的行为,但是当我在程序中使用 getter 输出变量时,值始终为 0。请帮忙=(

牛.cpp

#include "FBullCow.h"
FBullCow::FBullCow()
{
    Reset();
}
void FBullCow::Reset()
{
    constexpr int MAX_TRIES = 8;
    int MyCurrentTry = 1;
    int MyMaxTries = MAX_TRIES;
    return;
}
int FBullCow::GetMaxTries() const
{
    return MyMaxTries;
}
int FBullCow::GetCurrentTry() const
{
    return MyCurrentTry;
}
bool FBullCow::IsGameWon() const
{
    return false;
}
bool FBullCow::CheckGuessValidity(std::string) const
{
    return false;
}

FBullCow.h

#pragma once
#include <string>
class FBullCow
{
public:
    FBullCow();
    void Reset();
    int GetMaxTries() const;
    int GetCurrentTry() const;
    bool IsGameWon() const;
    bool CheckGuessValidity(std::string) const;
private:
    int MyCurrentTry;
    int MyMaxTries;
};

主.cpp

#include <iostream>
#include <string>
#include "FBullCow.h"
void intro();
std::string GetGuess();
void PlayGame();
bool AskToPlayAgain();
FBullCow BCGame;
int main()
{
    //Introduce the game
    intro();
    do
    {
        //Play the game
        PlayGame();
    }
    while (AskToPlayAgain() == true);
    return 0;
}
void intro ()
{
    //Introduce the game
    constexpr int WORD_LENGTH = 5;
    std::cout << "Welcome to my bull cow gamen";
    std::cout << "Can you gues the " << WORD_LENGTH << " letter isogram I'm thinking of?n";
    return;
}
std::string GetGuess()
{
    std::string Guess = "";
    std::cout << "You are on try " << BCGame.GetCurrentTry() << std::endl;
    std::cout << "Enter your guess: ";
    std::getline(std::cin, Guess);
    return Guess;
}
void PlayGame()
{
    std::cout << BCGame.GetMaxTries() << std::endl;
    std::cout << BCGame.GetCurrentTry() << std::endl;
    int MaxTries = BCGame.GetMaxTries();
    //Loop for the number of turns asking for guesses
    for(int i = 0; i < MaxTries; i++)
    {
        std::string Guess = GetGuess();
        //Get a guess from the player
        //Repeat guess back to them
        std::cout << "Your guess was " << Guess << std::endl;
    }
}
bool AskToPlayAgain()
{
    std::cout << "Do you want to play again? Y or N: ";
    std::string response = "";
    std::getline(std::cin, response);
    if(response[0] == 'y' || response[0] == 'Y')
    {
        return true;
    }
    return false;
}

在方法中:

void FBullCow::Reset()
{
    constexpr int MAX_TRIES = 8;
    int MyCurrentTry = 1;
    int MyMaxTries = MAX_TRIES;
    return;
}

在这里,您设置的是局部变量,而不是成员变量。只需删除int部分:

void FBullCow::Reset()
{
    constexpr int MAX_TRIES = 8;
    MyCurrentTry = 1;
    MyMaxTries = MAX_TRIES;
    return;
}

它现在应该可以工作了。请注意,编译器应该警告您正在初始化但未使用的变量。