#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.