所以我差不多完成了这项任务,但现在我又遇到了困难。当我尝试从问题类中绘制文本时,我从xstring获取无效的空指针。我有大约2个小时,所以任何帮助都会非常感激
这是问题类:
class Question {
public:
int col;
int row;
bool dailyDouble;
char* question;
char* answer;
double value;
Question();
Question(int, int, bool, char*, char*);
bool checkAnswer(string);
Question& operator=(const Question&);
};
Question::Question() {}
Question::Question(int c, int r, bool d, char* q, char* a)
{
col = c; row = r; dailyDouble = d; question = q, answer = a;
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;
}
Question& Question::operator=(const Question&)
{
return *this;
}
我有一个绘图文本方法(有效)但我的空间不足,所以这就是导致错误的行:
drawText((WinWidth/2)-200,(WinHeight/2) - 100, curQuestion.question);
真的很感激任何帮助!
答案 0 :(得分:1)
你的operator =(const Question&)是错误的,它只会返回当前对象。如果该对象是使用默认构造函数创建的,则“问题”和“答案”未初始化,如果使用此运算符,您的程序可能会崩溃。
运算符“=”应该复制每个字段。对于像“question”和“answer”这样的字符串指针,您需要为字符串内容分配新内存,并从作为参数传递的对象的字符串中复制字符。但你可能应该摆脱operator =无论如何,并使用std :: string代替“问题”和“回答”而不是char *(见下文)。
最后,
if(answer.find("What is") && answer.find(answer))
没有意义。它可能应该是这样的:
bool Question::checkAnswer(string proposedAnswer)
{
if(question.find("What is") && answer.find(proposedAnswer))
return true;
return false;
}
...假设您将问题类型从char *更改为字符串:
public:
int col;
int row;
bool dailyDouble;
string question;
string answer;
...