错误:
出现错误原因:
修改方法,CSuppressWnd对象改为指针CSuppressWnd*,修改后的代码如下
SigAnaFrame.cpp
1>d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(1936) : error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(561) : see declaration of 'CObject::CObject'
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(532) : see declaration of 'CObject'
1> This diagnostic occurred in the compiler generated function 'CCmdTarget::CCmdTarget(const CCmdTarget &)'
1>d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(312) : error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject'
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(561) : see declaration of 'CObject::CObject'
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(532) : see declaration of 'CObject'
1> This diagnostic occurred in the compiler generated function 'CGdiObject::CGdiObject(const CGdiObject &)'
1>TopFrame.cpp
1>d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(1936) : error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(562) : see declaration of 'CObject::operator ='
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(532) : see declaration of 'CObject'
1> This diagnostic occurred in the compiler generated function 'CCmdTarget &CCmdTarget::operator =(const CCmdTarget &)'
1>d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(312) : error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(562) : see declaration of 'CObject::operator ='
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(532) : see declaration of 'CObject'
1> This diagnostic occurred in the compiler generated function 'CGdiObject &CGdiObject::operator =(const CGdiObject &)'
SigAnaFrame.h文件代码:
#pragma once
#include "SuppressWnd.h"
// CSigAnaFrame.h文件
class CSigAnaFrame : public CWnd
{
DECLARE_DYNAMIC(CSigAnaFrame)
public:
CSigAnaFrame();
virtual ~CSigAnaFrame();
protected:
DECLARE_MESSAGE_MAP()
private:
CTopFrame* m_wndTop;
CSuppressWnd m_wndSuppress;
public:
afx_msg int OnCreate(LPCREATESTRUCT lpCreateStruct);
};
// SigAnaFrame.cpp : implementation file
#include "stdafx.h"
#include "Test.h"
#include "SigAnaFrame.h"
#include "TopFrame.h"
IMPLEMENT_DYNAMIC(CSigAnaFrame, CWnd)
CSigAnaFrame::CSigAnaFrame()
{
}
CSigAnaFrame::~CSigAnaFrame()
{
}
BEGIN_MESSAGE_MAP(CSigAnaFrame, CWnd)
ON_WM_CREATE()
END_MESSAGE_MAP()
int CSigAnaFrame::OnCreate(LPCREATESTRUCT lpCreateStruct)
{
if (CWnd::OnCreate(lpCreateStruct) == -1)
return -1;
m_wndTop.Create(NULL, NULL, WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, IDR_PAN_PRESS);
m_wndSuppress.Create(NULL, NULL, WS_CHILD | WS_VISIBLE, CRect(0, 0, 0, 0), this, ID_PANE_SUPPARAMWND);
m_wndTop->SetSupressWnd(m_wndSuppress);
return 0;
}
注释掉SigAnaFrame窗口类的,编译时错误减少只有CTopFrame报错,具体如下:
1>TopFrame.cpp
1>d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(1936) : error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(562) : see declaration of 'CObject::operator ='
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(532) : see declaration of 'CObject'
1> This diagnostic occurred in the compiler generated function 'CCmdTarget &CCmdTarget::operator =(const CCmdTarget &)'
1>d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afxwin.h(312) : error C2248: 'CObject::operator =' : cannot access private member declared in class 'CObject'
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(562) : see declaration of 'CObject::operator ='
1> d:\program files\microsoft visual studio 9.0\vc\atlmfc\include\afx.h(532) : see declaration of 'CObject'
1> This diagnostic occurred in the compiler generated function 'CGdiObject &CGdiObject::operator =(const CGdiObject &)'
CTopFrame.h文件代码:
#pragma once
#include "SuppressWnd.h"
// CTopFrame
class CTopFrame : public CWnd
{
DECLARE_DYNAMIC(CTopFrame)
public:
CTopFrame();
virtual ~CTopFrame();
protected:
DECLARE_MESSAGE_MAP()
private:
CSuppressWnd m_pWndSuppress; //压制参数窗体
public:
void SetSupressWnd(CSuppressWnd supWnd);
};
CTopFrame.cpp文件代码:
// TopFrame.cpp : implementation file
//
#include "stdafx.h"
#include "Test.h"
#include "TopFrame.h"
// CTopFrame
IMPLEMENT_DYNAMIC(CTopFrame, CWnd)
CTopFrame::CTopFrame()
{
}
CTopFrame::~CTopFrame()
{
}
BEGIN_MESSAGE_MAP(CTopFrame, CWnd)
END_MESSAGE_MAP()
void CTopFrame::SetSupressWnd(CSuppressWnd supWnd)
{
m_pWndSuppress = supWnd;
}
// CTopFrame message handlers
出现错误原因:
对象作为参数,执行如下赋值操作时会调用拷贝构造函数:
m_pWndSuppress = supWnd;
所以,会报错拷贝对象出错,如下:
'CGdiObject &CGdiObject::operator =(const CGdiObject &)
修改方法,CSuppressWnd对象改为指针CSuppressWnd*,修改后的代码如下
#pragma once
#include "SuppressWnd.h"
class CTopFrame : public CWnd
{
DECLARE_DYNAMIC(CTopFrame)
public:
CTopFrame();
virtual ~CTopFrame();
protected:
DECLARE_MESSAGE_MAP()
private:
CSuppressWnd* m_pWndSuppress; //压制参数窗体
public:
void SetSupressWnd(CSuppressWnd* supWnd);
};
IMPLEMENT_DYNAMIC(CTopFrame, CWnd)
CTopFrame::CTopFrame()
{
}
CTopFrame::~CTopFrame()
{
}
BEGIN_MESSAGE_MAP(CTopFrame, CWnd)
END_MESSAGE_MAP()
void CTopFrame::SetSupressWnd(CSuppressWnd* supWnd)
{
m_pWndSuppress = supWnd;
}