MFC GetEditCtrl 报错非静态成员函数的非法调用

VS2012代码:voidCMainFrame::OnButton2(){//TODO:在此添加命令处理程序代码CEdit&theEdit=CEditView::GetE... VS2012 代码:

void CMainFrame::OnButton2()
{
// TODO: 在此添加命令处理程序代码
CEdit& theEdit = CEditView::GetEditCtrl();
}
提示:

error C2352: “CEditView::GetEditCtrl”: 非静态成员函数的非法调用
1> e:\vs\vc\atlmfc\include\afxext.h(853) : 参见“CEditView::GetEditCtrl”的声明
为什么?
展开
 我来答
bhtzu
推荐于2016-07-07 · TA获得超过1.1万个赞
知道大有可为答主
回答量:8088
采纳率:85%
帮助的人:4043万
展开全部

你需要获取一个CEditView的实际指针,再调用GetEditCtrl。

现在这样的调用获取不到有效的指针。


解决办法:

  1. 你可以将按钮2的响应函数放到View类(删除现在的响应函数,重新在View类建立即可),这样就可以直接调用GetEditCtrl了。

  2. 如果一定要从主框架类CMainFrame获取视图类,你需要通过框架方式获取,这个单、多文档不同。如果单文档,一般这样使用:

CEditView* pView = (CEditView*)GetActiveView();
CEdit& theEdit = pView->GetEditCtrl();
追问
谢,但是多文档怎么实现?我这个工程是多文档……多谢指教!
追答
CEditView* pView = (CEditView*)(MDIGetActive()->GetActiveView());
CEdit& theEdit = pView->GetEditCtrl();

大致就是这样,不过说实话,这是获取当前活动视图,多视图的话其实还是使用第一种方法更好些。

本回答被提问者采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
就烦条0o
2018-07-31 · 知道合伙人软件行家
就烦条0o
知道合伙人软件行家
采纳数:33315 获赞数:46484
从事多年系统运维,喜欢编写各种小程序和脚本。

向TA提问 私信TA
展开全部
如果你想直接引用该方法的话就得在方法声明时加上static
否则就声明GetEditCtrl类的一个实例,例GetEditCtrl rw;
非静态成员,必须首先实例化一个类对象。才能使用,如果没有构造函数,这样就行了
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

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

类别

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

说明

0/200

提交
取消

辅 助

模 式