我这样写了一段测试代码:
class Sample
{
public:
Sample* GetClass() { return this; }
virtual void Msg() { ; }
}
class Sample2 : public Sample
{
public:
void Msg() {MessageBox(NULL, "Hello", "", MB_OK);}
}
class TestClass
{
public:
Sample *sample;
void SetClass(Sample *class)
{
sample = class->GetClass();
}
}
之后:
TestClass tc;
Sample2 sample2;
tc.SetClass(&sample2);
tc.sample->Msg();
这时会弹出消息框显示Hello。
但是,如果是在TestClass类中使用sample的Msg函数,而不是在其实例中使用这个函数,系统就会出现错误,和IE崩溃一样的错误信息。
这是为什么?如何解决?
还没试验,不过第二种情况下SetClass(&sample2)里面的sample2应该设成全局变量。
如果sample2一直有效,那么第二个例子应该和如下情况一样:
class TestClass
{
public:
Sample *sample;
TestClass()
{
sample = NULL;
}
void SetClass(Sample *class)
{
sample = class->GetClass();
if(sample != NULL) sample->Msg();
}
}