价值观没有正确传递?

时间:2011-05-18 00:45:45

标签: c++ object

我已经在这个项目上工作了一段时间,这对我来说是一种新语言,但我有一个有经验的伙伴,有点抛弃了我。无论如何,现在我无法将文本从一个对象获取到另一个对象。我在游戏类中实例化一个对象,然后尝试获取它并将其保存到主类中的另一个对象,但是当我得到该对象时它是空的!我不知道这里发生了什么,我似乎无法弄明白。

但是当我尝试绘制问题文本时,显示方法中的部分不起作用:

drawText((WinWidth/2)-225, (WinHeight/2) - 90, curQuestion.question.c_str());

curQuestion在顶部创建,但在鼠标方法中实例化:

curQuestion = g.getQuestion(col,row);

这是游戏类(在Cc.h中)

class Game {
public:
    Game(bool);
    void initQuestions();
    Question getQuestion(int, int);
    string getQuestionText(int, int);

private:
    Question questions[5][5];
};

Game::Game(bool m)
{
    mp = m;
    initQuestions();
}

void Game::initQuestions()
{
    bool hasDouble = false;
    srand( time(NULL));
    int blarg = rand() % 25 + 1;
    fstream questionFile;
    questionFile.open("questions.txt", ifstream::in);
    int cur = 0;
    for(int c = 0; c < 5; c++)
    {
        for(int r = 0; r < 5; r++)
        {
            char * q = new char[256];
            char * a = new char[256];
            questionFile.getline(q,256);
            questionFile.getline(a,256);
            questions[c][r] = Question(c,r, false, q, a);
            cout << questions[c][r].question.c_str() << questions[c][r].answer.c_str();
        }
    }
    questionFile.close();
}

Question Game::getQuestion(int c, int r)
{
    return questions[c][r];
}

string Game::getQuestionText(int c, int r)
{
    return questions[c][r].question;
}

注意:游戏方法中调用的cout确实会返回它应该的内容!

问题类:

class Question {
public:
    int col;
    int row;
    bool dailyDouble;
    string question;
    string answer;
    int value;
    Question();
    Question(int, int, bool, string, string);
    bool checkAnswer(string);
    string getQuestion();
};

Question::Question() { }

Question::Question(int c, int r, bool d,string q, string a)
{
    col = c; row = r; dailyDouble = d; question = q, answer = a;
    cout << "TEST> Q: " << question << ", A: " << answer << endl;
    if(d)
        value = r * 200 * 2;
    else
        value = r * 200;
}

bool Question::checkAnswer(string answer)
{
    if(answer.find("What is") && answer.find(answer))
        return true;
    return false;
}

string Question::getQuestion() {
    return question;
}

我真的无法理解这里出了什么问题,非常感谢任何帮助。我希望一旦我弄清楚这里出了什么问题,我就可以自己完成了!

2 个答案:

答案 0 :(得分:0)

看起来Game :: getQuestion(int c,int r)按值返回Question类。我不认为你想这样做,很可能你想要'curQuestion'成为一个指针(问题*)并让getQuestion也返回一个指向问题的指针。

这样问题将存储在游戏类中,并且只是通过任何调用getQuestion暂时引用。

答案 1 :(得分:0)

我在我的计算机上尝试过你的代码,似乎Question类和Game类都是正确的,我也试过Game :: getQuestion()和Game :: getQuestionText()方法,这一切都是正确的,返回正确的值。

顺便说一下,Question Class和Game Class中没有指针成员,因此不需要编写复制构造函数和operator =()重载方法。

也许你可以检查你在g.getQuestion(col,row)中传递的col和row是否正确。

抱歉,我必须在此处发布回答,因为我不知道如何在您的问题中添加评论。

希望这会有所帮助。