离开课程文件时,变量会重置

时间:2019-02-12 06:11:50

标签: c++

我正在通过制作子手游戏来练习c ++。问题是,当我在一个类文件中设置子手单词,然后移到另一个类文件时,我发现它已被重置。当我调用该变量时,它为空。

我尝试使用引用而不是标准变量,因为据我了解,当您调用函数时,它只会创建变量的副本。我还有另一个buildGame.h和buildGame.cpp文件,但是它们所做的只是调用getPhrase();。功能。在这里,我发现该变量已重置,并且不包含短语值。

这是我的main.cpp文件:v

#include "genGame.h"
#include "buildGame.h"

int main(){
    genGame startGame;
    buildGame build;
    startGame.genPhrase();
    buildGame();
    return 0;
}

这是我的genGame.h文件:v

#ifndef GENGAME_H
#define GENGAME_H
#include <string>

class genGame{
    public:
        genGame();
        void genPhrase();
        std::string getPhrase() const;

    private:
        std::string phrase;
        int randnumb;
};

#endif

这是我的gengame.cpp文件:v

#include "genGame.h"
#include <iostream>
#include<time.h>
#include <fstream>
using namespace std;

genGame::genGame(){}

string genGame::getPhrase() const{
    cout << phrase << endl;     //included for testing purposes
    return phrase;
}

void genGame::genPhrase(){
    cout << "Welcome to hangman!" << endl;
    string& phraseRef = phrase;     //tried setting a reference to change the variable itself, not just the copy
    srand(time(0));
    randnumb = rand() % 852 + 1;    //random number to determine which word will be pulled out of 852 words
    ifstream wordlist ("wordlist.txt");     //list of hangman words

    if (wordlist.is_open()){
        for (int i = 1; i <= randnumb; i++){
            getline(wordlist, phraseRef);       //get the word, set it equal to the phrase variable
        }
        wordlist.close();
    }

    cout << phraseRef << endl;      //output word choice for testing purposes
    cin.get();

}

在类之外调用短语变量时,我希望它返回设置的短语。而是返回默认的空值。

编辑:谢谢水稻的帮助!答案在他的评论中,并且代码现在可以正常工作(我没有通过引用正确传递)。

1 个答案:

答案 0 :(得分:1)

  

我还有另一个buildGame.h和buildGame.cpp文件,但是他们所做的只是调用getPhrase();。功能。在这里,我发现该变量已重置,并且不包含短语值。

使用您当前编写的代码,我什至不需要看到buildGame类来回答。您在buildGame中创建的两个main对象(†)中的任何一个都不了解在{{ 1}}。

如果需要使标识为genGame的对象可用于main对象中的成员函数或类似函数,则需要将其作为引用传递。例如,您可能有以下内容:

startGame

buildGame中,您可能会这样做:

void buildGame::play(const genGame &startGame)
{
    std::cout << "Playing with phrase: " << startGame.getPhrase() << std::endl;
}

无论您怎么想,在原始代码中访问main时,您都错了。


(†):是,您创建了两个int main() { genGame startGame; buildGame build; startGame.genPhrase(); build.play(startGame); // <=== pass reference to startGame return 0; } 对象:

startGame