我正在使用C ++进行Windows编程,代码如下:
class A
{
public:
virtual void Func1 () {}
void Func2 () {}
}
class B : public A
{
public:
__override virtual void Func1 () {}
}
我使用LIST_ENTRY创建了一个B对象的双链表,并试图通过以下方式访问此列表中的元素:
LIST_ENTRY * pEntry; // I got this pointer using RemoveHeadList
A * pA;
pA = CONTAINING_RECORD (pEntry, A, m_le);
pA->Func2 (); // works fine
pA->Func1 (); // Access violation
如您所见,使用CONTAINING_RECORD检索的指针无法调用虚函数。可能有什么不对?谢谢你的帮助。
答案 0 :(得分:1)
从我在代码中看到的内容,CONTAINING_RECORD
返回一个无效指针。向我们展示它的代码。 Func2 wprks只是偶然,因为它不依赖于这个指针,但仍然是非法的。