[英]object of abstract type “NumericQuestion” is not allowed in c++
另外,这段代码到底在做什么?
const int MAX_QUESTIONS = 100;
Question* questions[MAX_QUESTIONS];
questions[numQuestions++] = createQuestion("How many degrees are there in a full circle?", 360);
和
Question* createQuestion(const char question[], const double answer)
{
NumericQuestion* nq = new NumericQuestion(question, answer);
return nq;
}
非常感谢。 我真的需要你的帮助才能向我解释
编辑:这是问题的声明
class Question
{
char *q;
protected:
void writeQuestion(ostream& ostr) const;
public:
Question(const char question[])
{
int n = strlen(question);
q = new char[n];
strcpy(q, question);
cout << q;
}
void askQuestion() const;
virtual void getAnswer();
virtual bool isCorrect() const=0;
};
编辑:声明为NumericQuestion
class NumericQuestion : public Question
{
double ans, geta;
public:
NumericQuestion(const char question[], const double answer): Question(question)
{
ans = answer;
getAnswer();
}
void getAnswer()
{
cout << "Answer: ";
cin >> geta;
isCorrect();
}
bool isCorrect()
{
return ((geta==ans)? true : false);
}
};
Stackoverflow不允许我发布太多代码
需要声明isCorrect()
为const
在NumericQuestion
:
bool isCorrect() const // <--- add const keyword here
原因是因为const
是方法签名的一部分,例如其名称和参数。 isCorrect() const
比命名的功能的不同方法isCorrect()
不是常量。
当您看到带有=0
的虚拟方法时,表示该方法是“纯虚拟”的。 基类通常不指定实现,但是在实例化任何派生类之前,必须定义实现。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.