Visual C++ error C2248: 'CObject::CObject' : cannot access private member declared in class 'CObject

错误:
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;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

haimianjie2012

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值