Ошибка подтверждения AddTail() в CList
Я пытался создать двумерный список в 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, но я не уверен, является ли это реальной проблемой. Я также пытался сделать некоторые новые и удалить перегрузку, но проблема стала еще хуже. Есть идеи?
1 ответ
Оба элемента списка объявлены как указатели, поэтому вам нужно либо выделить их, либо объявить их как
CList<A*, A*&> AList; // without the "*"
CList<CString, CString&> TestList; // without the "*"