实例化变量

时间:2014-08-12 17:50:07

标签: c++

我有两节课。我的主要课程CPlotView:CScrollView和另一个课程CAnimateMachine。主类有一些绘图功能,即简单动画。我已将动画建模为状态机。为了帮助保持状态机排队,我创建了第二个类。我的问题是尝试实例化第二个类的实例。

PlotView中,标题中有变量CAnimateMachine m_AniMach;。执行某些操作后,将调用函数AniInit()来初始化状态机对象。我目前正尝试使用此行m_AniMach = CAnimateMachine()执行此操作但收到C2248错误'CObject::operator =' : cannot access private member declared in class 'CObject'

当调用AniInit()时,我想重新实例化一个全新的CAnimateMachine对象,并根据CPlotView的当前状态初始化变量。

以下是CAnimateMachine的简洁版及其使用的类。

class  CMoveBlk : public CObject
{
    // ints and floats
}

class CSheetData : public CObject
{
    // ints and floats
    CTypedPtrList<CObList, CMoveBlk*> m_MoveList;
}

class CAnimateMachine
{
public:
    CAnimateMachine(); // Not implemented

    int startX;
    int startY;
    float lastX; 
    float lastY;

    POSITION curShtPos;
    POSITION curBlkPos;
    CMoveBlk *curMoveBlk;
    CSheetData *curShtData;

    CPen myPen1;
    CPen myPen2;
    CPen myPen3;
};

这是我完整的AniInit方法。第一行是抛出错误的那一行。

BOOL CPlotView::AnimateInit()
{
    m_AniMach = CAnimateMachine();

    // Get the Document containing the sheet information
    CPlotDoc* pDoc = (CPlotDoc*)GetDocument();
    ASSERT_VALID(pDoc);
    if (pDoc->m_nCurSheet == 0)
        return FALSE; 

    // Get the actual information we need
    m_AniMach.sheetPos = pDoc->m_SheetList.FindIndex(pDoc->m_nCurSheet - 1);
    if (m_AniMach.sheetPos == NULL) 
        return FALSE;
    m_AniMach.curShtData = pDoc->m_SheetList.GetAt(m_AniMach.sheetPos);
    if (m_AniMach.curShtData == NULL)
        return FALSE;

    // Erase the current drawing/background
    CDC *pDC = GetDC();
    CRect rect;
    GetClientRect(&rect);
    pDC->DPtoLP(&rect); 
    pDC->FillSolidRect( &rect, GetBackgroundColor());

    // Set the start position
    m_AniMach.startX = (int)(m_AniMach.curShtData->m_fStartX * m_fScaleX + 0.5) + m_nOffsetX;
    m_AniMach.startY = (int)(m_AniMach.curShtData->m_fStartY * m_fScaleY + 0.5) + m_nOffsetY;

    m_AniMach.lastX = m_AniMach.curShtData->m_fStartX;
    m_AniMach.lastY = m_AniMach.curShtData->m_fStartY;

    // Get the current Block
    m_AniMach.curBlkPos = m_AniMach.curShtData->m_MoveList.GetHeadPosition();

    // Create all of the pens used to draw
    m_AniMach.myPen1.CreatePen(PS_SOLID, 1, RGB(0,0,0));
    m_AniMach.myPen2.CreatePen(PS_SOLID, 1, RGB(0,0,0));
    m_AniMach.myPen3.CreatePen(PS_SOLID, 1, RGB(0,0,0));

    return TRUE;
}

我怀疑问题是基于错误的,我的CAnimateMachine课程中的两个指针指向CSheetData : CObjectCMoveBlk : CObject。我只是不确定为什么会出现这个问题,我认为它应该只是创建指针并让它们指向什么,直到我在AniInit()分配它们?

0 个答案:

没有答案