CList 的 AddTail() 断言错误



我试图在MFC中创建一个二维列表,以便保存和处理一些int和CString数据。所以,我试过这样的东西:

#include "A.h"
//A.cpp
A::A()
{
}
A::~A()
{
}
//**********************
#pragma once
// A.h
class A: public CObject
{
public:
    A();
    virtual ~A();
    int ID;
    CString label;
};
//**********************
#include "A.h"
#pragma once
// B.h
class B : public CObject
{
public:
    B();
    virtual ~B();
    int anotherID;
    CString anotherLabel;
    CList<A*, A*&> * AList;
    CList<CString, CString&> * TestList;
};
//Note: B.cpp is pretty much the same as A.cpp
//*********************
//C.cpp
void C::Foo()
{
    B * b = new B;
    A * a = new A;
    a->ID = 1;
    a->label = L"something";
    b->AList->AddTail(a); //Assertion error!
    CString aux = L"another thing";
    b->TestList->AddTail(aux); //Assertion error!
}

问题是:当我尝试使用AddList()方法时,我收到错误"读取位置的访问冲突"。我最初认为这个问题与CObject派生类有关,但我不确定这是否是真正的问题。我也尝试过做一些新的和删除重载,但问题变得更糟了。有什么想法吗?

这两个列表元素都被声明为指针,因此您需要将它们分配或声明为

CList<A*, A*&> AList;              // without the "*"
CList<CString, CString&> TestList; // without the "*"

相关内容

  • 没有找到相关文章

最新更新