2013-08-07 3 views
0

일부 int 및 CString 데이터를 저장하고 작업하기 위해 MFC에서 2 차원 목록을 만들려고했습니다. 그래서, 이런 식으로 뭔가를 시도했다 :CList의 AddTail() 어설 션 오류

#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 "*" 
로 그들을 할당하거나 선언 중 하나를해야합니다 모두