这可能是一个业余问题,但在这里。我有三个课程:
可绘制对象:
class DrawableObject
{
private:
int x;
//...
public:
int getX();
//...
}
继承自 DrawableObject 的 FormElement:
class FormElement : public DrawableObject
FormElement 有一个名为 wasPushed 的方法:
bool FormElement::wasPushed(SDL_Event event)
{
bool wasPushed =
(
( event.motion.x >= getX()) //Inherited getX()
&& // Blah blah...
) ? true : false;
return wasPushed;
}
最后,继承自 FormElement 的 TextField:
class TextField : public DrawableObject
我还有一个名为 Form 的类:
class Form {
public:
list<FormElement*> getFormElements();
void generateForm();
private:
list<FormElement*> formElements;
}
Form 在其 generateForm() 方法中将一些 TextFields 添加到其列表中:
void Form::generateForm() {
TextField *aTextField = new TextField(10, 10, 120);
this->formElements.push_back(aTextField);
}
后来,它尝试迭代它:
for(list<FormElement*>::iterator it = getFormElements().begin()
; it != getFormElements().end()
; ++it)
{
if ( (*it)->wasPushed(theEvent) )
{ //Etc.
好吧,当程序尝试从 wasPushed 方法访问 getX() 时,程序退出了。
谁能告诉我为什么?我定义错了什么?
我非常感谢你。马丁。