Значения не передаются должным образом?

#c #object

#c #объект

Вопрос:

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

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

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

curQuestion создается вверху, но создается в методе mouse:

 curQuestion = g.getQuestion(col,row);
  

и вот класс game (который находится в 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, вызванный в методе 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") amp;amp; answer.find(answer))
        return true;
    return false;
}

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

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

Комментарии:

1. Слишком.Много.кода. Всегда помните об этом .

2. Извините, я не был уверен, что кому-то, пытающемуся помочь, понадобится все это.. хотел подстраховаться. Я вырежу это.

3. Хорошо, еще одна вещь: что именно в коде отображения не работает? Какой результат вы ожидаете? Какой результат вы получаете?

4. Проблема связана с классом вопросов. Пожалуйста, опубликуйте код вопроса класса.

5. Скорее всего, вы определили конструктор копирования для вопроса, который не копирует элементы. Возвращает ли getQuestionText строку вопроса нормально? Ну, похоже, это связано с operator = из другого вопроса, опубликованного Xeo.

Ответ №1:

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

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

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

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

хотелось бы, чтобы это помогло.

Комментарии:

1. хорошо.. Я все еще не могу заставить это работать:/ это становится действительно расстраивающим. Я проверил это снова, и он выдает правильные столбец и строку

2. @JavaJosh94 можете ли вы прислать мне свое решение целиком? Мне очень любопытно. Мое электронное письмо отправляется НА 126.com

3. извините, я только сейчас вернулся и заметил это. Я полностью удалил класс game и класс question, затем просто поместил пару массивов в основной класс, в котором хранились вопросы и ответы. Это не очень эффективно, но сработало: P

Ответ №2:

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

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