0

一部のintおよびCStringデータを保存して操作するために、MFCで2次元リストを作成しようとしていました。だから、私はこのようなことを試しました:

#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 派生クラスに関連していると最初に考えましたが、これが本当の問題かどうかはわかりません。また、新しいオーバーロードと削除のオーバーロードを実行しようとしましたが、問題はさらに悪化しました。何か案は?

4

1 に答える 1

0

リスト要素は両方ともポインターとして宣言されているため、それらを割り当てるか、次のように宣言する必要があります。

CList<A*, A*&> AList;              // without the "*"
CList<CString, CString&> TestList; // without the "*"
于 2013-08-08T06:39:35.337 に答える