Значения не передаются должным образом? - PullRequest
1 голос
/ 18 мая 2011

Я работал над этим проектом некоторое время, это новый язык для меня, но у меня был опытный партнер, который меня бросил.В любом случае, сейчас у меня проблемы с переносом текста с одного объекта на другой.Я создаю экземпляр объекта в игровом классе, затем пытаюсь получить его и сохранить в другом объекте в основном классе, но когда я получаю объект, он пуст!Я не знаю, что здесь происходит, и я просто не могу понять это.

, но часть, которая не работает, заключается в методе отображения, когда я пытаюсь нарисовать текст вопросов:

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;
}

Примечание: вызов метода в методе game возвращает именно то, что должен!

Класс вопроса:

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 голосов
/ 18 мая 2011

Я попробовал ваш код на моем компьютере, кажется, что и класс Question, и класс Game верны, я также попробовал метод Game :: getQuestion () и Game :: getQuestionText (), все правильно, ивозвращает правильное значение.

Кстати, в классе вопросов и игровом классе нет указателей, поэтому нет необходимости писать конструктор копирования и метод перегрузки operator = ().

Может быть, вы можете проверить, правильны ли столбец и строка, которые вы передали в g.getQuestion (столбец, строка).

Извините, я должен опубликовать здесь ответ, потому что я незнать, как добавить комментарий к вашему вопросу.

желаю, чтобы это помогло.

0 голосов
/ 18 мая 2011

Похоже, Game :: getQuestion (int c, int r) возвращает класс Question по значению.Я не думаю, что вы хотите делать это, скорее всего, вы хотите, чтобы curQuestion был указателем (Вопрос *), а getQuestion также возвращал указатель на Вопрос.

Таким образом, вопросы будутхранится в игровом классе и временно ссылается на любые вызовы getQuestion.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...