CPen当做函数参数出错

自己写了一个类,其中一个成员函数为voidDisplay(CPenpen)。没有调用到这个函数的时候编译没有问题。当在程序中加入这个函数的调用this->Display(... 自己写了一个类,其中一个成员函数为void Display(CPen pen)。没有调用到这个函数的时候编译没有问题。当在程序中加入这个函数的调用this->Display(pen)的时候出错,错误代码为:error C2248:“CObject::CObject”: 无法访问 private 成员(在“CObject”类中声明)。
请各位高手为我解惑
补充一下,这个是个MFC应用程序,我是用VS2008编程的,调用函数代码为:
CTest t;
CPen pen(PS_SOLID, 1, RGB(255,0,0));
t.Display(pen);
一楼的回答我试过了,把这个自定义类改成继承CWnd以后还是会出错,新建一个继承自CWnd的类写一个Display(CPen pen)函数以后调用的时候也会出错。
补充下二楼的问题。这里的CPen不是其他类的私有成员变量。在Display函数定义的时候没有出错,只在调用函数的时候才出错的,其他地方也没有用到过这个pen变量。
三楼的回答我试过了,引入头文件以后还是出错的。而且我想,如果是没有引入头文件才出错的话声名的时候就应该报错啊,因为无法识别CPen是一个类。
四楼的回答是正解,各位看到的可以了解一下。
展开
 我来答
无尽星空ljm
2010-07-28 · TA获得超过1793个赞
知道小有建树答主
回答量:441
采纳率:0%
帮助的人:0
展开全部
对象如果要作为参数来传递,必须定义拷贝构造函数。但实际上很多对象的创建和销毁过程是比较复杂的,不适合直接拷贝。如果你要用CPen作为参数传递,建议采用引用的方法:
void Display(CPen& pen)
{
}
或者
void Display(const CPen& pen)
{
}
100duman
2010-07-27 · TA获得超过966个赞
知道小有建树答主
回答量:1014
采纳率:100%
帮助的人:264万
展开全部
你的程序要继承CWnd类才行的
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
olive1986717
2010-07-27 · TA获得超过693个赞
知道小有建树答主
回答量:246
采纳率:0%
帮助的人:372万
展开全部
你没有给出代码,我也只能猜一猜,你传递给Display函数的CPen对象是哪里来的?是其他类的私有成员变量吗?希望你能把你的代码发上来看看,或者是把问题说得清楚一些
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
L_o_o_n_i_e
2010-07-28 · TA获得超过4.2万个赞
知道大有可为答主
回答量:8507
采纳率:38%
帮助的人:5227万
展开全部
CPen 要头文件 #include <afxwin.h>

不是声明了 CPen pen, 就可以调用。
要 CPen::CreatePen(....) 或 CPen::CreatePenIndirect(...)
建了对象后才真正有pen

“自己写了一个类”, CPen pen 应当是属于这个类的成员啦,这个类的constructor 要对它初始化。真正有pen后才能调用。

void Display(CPen pen){。。。} 属于声明,这里的 CPen pen 是形参。
调用函数时候,用实参,你的实参有问题,就会出错。

“pen变量”-- pen 是 class, 不是简单的变量,所以问题比较复杂。
CObject--CGdiObject--CPen
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
draweyetmd
2010-07-28
知道答主
回答量:17
采纳率:0%
帮助的人:4.5万
展开全部
既然是private成员无法访问,那么到CObject类中去把自己的类声明为友元函数应该可以吧...
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(3)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式