我正在通过制作子手游戏来练习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();
}
在类之外调用短语变量时,我希望它返回设置的短语。而是返回默认的空值。
编辑:谢谢水稻的帮助!答案在他的评论中,并且代码现在可以正常工作(我没有通过引用正确传递)。
答案 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