如何在全局函数中调用局部函数

hukai19851029 2011-03-28 04:28:04
请问如何在全局函数中调用局部函数,请高手指教!

int PASCAL ABC()//全局函数 第一个函数
{
DrawGragh();
}

void CTestDlg::DrawGragh()
{
......
}
...全文
340 17 打赏 收藏 转发到动态 举报
写回复
用AI写文章
17 条回复
切换为时间正序
请发表友善的回复…
发表回复
大风扯 2011-04-15
  • 打赏
  • 举报
回复
看看~~
hukai19851029 2011-04-15
  • 打赏
  • 举报
回复
谢谢各位的回答,问题已经解决,谢谢!
TandyT 2011-03-28
  • 打赏
  • 举报
回复
[Quote=引用 12 楼 tandyt 的回复:]
那按照下面这方法吧:
在你的全局函数里面:


C/C++ code

CTestDlg* Pdlg;
Pdlg = (CWwDlg*)AfxGetMainWnd();//晕,这里忘了改了。。。。
Pdlg->类内函数();



这样应该不会出错了
[/Quote]

晕,上面那里忘了改了。。应该是

Pdlg = (CTestDlg*)AfxGetMainWnd();//
CppCoder 2011-03-28
  • 打赏
  • 举报
回复
在全局函数所在文件a.cpp中 #include "CTestDlg.h"
在a.cpp中,定义一个全局变量保存CTestDlg实例的指针
CTestDlg *pGlobleDlg;
在全局函数中,用pGlobleDlg访问CTestDlg类方法

在CTestDlg.cpp中,extern CTestDlg *pGlobleDlg;
pGlobleDlg在CTestDlg初始化时赋值
TandyT 2011-03-28
  • 打赏
  • 举报
回复

//对了, 7楼 的方法里面,添加的那两行声明语句应该改为指针的,如下:


//在TestDlg.cpp 里

CTestDlg *myDialog=NULL;

//在TestDlg.h 里

extern CTestDlg *myDialog;

//然后,全局函数里调用:

myDialog->类内函数();
TandyT 2011-03-28
  • 打赏
  • 举报
回复
那按照下面这方法吧:
在你的全局函数里面:


CTestDlg* Pdlg;
Pdlg = (CWwDlg*)AfxGetMainWnd();
Pdlg->类内函数();


这样应该不会出错了
TandyT 2011-03-28
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 hukai19851029 的回复:]
TandyT您好:
按照您的步骤操作,在extern CWwDlg myDialog;这个地方出现错误
D:\ultrasonicscanforarm\ultrasonicscanforarmview.h(296) : error C2146: syntax error : missing ';' before identifier 'myDialog'
[/Quote]

你应该我上面方法里的CWwDlg 类名全部改成你的类名: CTestDlg

因为我的工程和你的不同名,你当然不能直接这样写啊,我只是举个例子这样可以实现全局函数调用类内函数而已。

我这里是可以的。实在不行发你工程 给我
傻X 2011-03-28
  • 打赏
  • 举报
回复
2个字,静态
hukai19851029 2011-03-28
  • 打赏
  • 举报
回复
TandyT您好:
按照您的步骤操作,在extern CWwDlg myDialog;这个地方出现错误
D:\ultrasonicscanforarm\ultrasonicscanforarmview.h(296) : error C2146: syntax error : missing ';' before identifier 'myDialog'
waitingforlll 2011-03-28
  • 打赏
  • 举报
回复
全局函数想要调用类中的成员函数,必须要得到类对象的指针
你可以这样

void GlobleGunc(void* p)
{//传入的类指针p
...
}
TandyT 2011-03-28
  • 打赏
  • 举报
回复
第一步:
在 TestDlg.cpp 的


END_MESSAGE_MAP() 后面加上:

CWwDlg myDialog;


第二步:
在 TestDlg.h 的


//{{AFX_INSERT_LOCATION}}
之前加上
extern CWwDlg myDialog;


加完后是:

extern CWwDlg myDialog;
//{{AFX_INSERT_LOCATION}}
// Microsoft Visual C++ will insert additional declarations immediately before the previous line.

#endif // !defined(AFX_WWDLG_H__5B77F0C5_6575_458E_BFD2_D19D28DEACC9__INCLUDED_)


第三步:在你的全局函数里,想要调用主类CTestDlg 里面的函数 LocalFunc() :如下:

void GlobalFuc()
{
myDialog.LocalFunc();
}


了解了么?
hukai19851029 2011-03-28
  • 打赏
  • 举报
回复
两个函数是在同一个类中,好像不能这么调用啊
jieleiping 2011-03-28
  • 打赏
  • 举报
回复

int PASCAL ABC()//全局函数 第一个函数
{
DrawGragh();
}

这个ABC函数增加一个CTestDlg*类型的参数,然后就可以用这个参数去调用CTestDlg的方法DrawGragh了,这只是一种,呵呵。
kxywnljz 2011-03-28
  • 打赏
  • 举报
回复
要调用局部函数,不如将函数设为静态函数,随你怎么玩,哈哈
hukai19851029 2011-03-28
  • 打赏
  • 举报
回复
感谢您的回复,两个函数都在主框架类CTestDlg中,好像不能这样调用吧?
Dreadnought 2011-03-28
  • 打赏
  • 举报
回复

CTestDlg *pTestDlg = new CTestDlg;
pTestDlg->DrawGragh();
delete pTestDlg;
singwhatiwanna 2011-03-28
  • 打赏
  • 举报
回复
CTestDlg dlg;
dlg.DrawGragh();

16,471

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

试试用AI创作助手写篇文章吧