我有两节课。我的主要课程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 : CObject
和CMoveBlk : CObject
。我只是不确定为什么会出现这个问题,我认为它应该只是创建指针并让它们指向什么,直到我在AniInit()
分配它们?