2013-08-07 7 views
0

Я пытался создать двумерный список в MFC для сохранения и работы с некоторыми данными int и CString. Таким образом, я пытался что-то вроде этого:Ошибка утверждения AddTail() CList's

#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, но я не уверен, что это настоящая проблема. Я также пытался сделать некоторые новые и удалить перегрузку, но проблема стала даже хуже. Любые идеи?

ответ

0

Оба элементы списка объявляются как указатели, так что вам нужно либо выделить их или объявить их как

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