MessageBox在公共类的静态函数里为什么不能用?

zziilii 2012-09-03 12:31:27
我MFC里建了个MFC类 目的是放些 静态变量 静态函数什么的,可是这个read函数有错误,我找不出在哪,反正程序总是终止,还有一个MessageBox为什么说“非静态成员引用必须与特定对象相对啊”

void CPublic::read(char* local)
{
MessageBox((CString)"OK");
//LPCTSTR str1=(LPCTSTR)(LPTSTR)local;
CPublic::str.Empty();
CStdioFile myFile;
CFileException fileException;
if(myFile.Open((LPCTSTR)local,CFile::typeText|CFile::modeReadWrite))
{
myFile.SeekToBegin();
myFile.ReadString(CPublic::str);
}

myFile.Close();

}
...全文
549 14 打赏 收藏 转发到动态 举报
AI 作业
写回复
用AI写文章
14 条回复
切换为时间正序
请发表友善的回复…
发表回复
jimette 2013-03-21
  • 打赏
  • 举报
回复
您好, 由于您长时间不结贴,上一次答复已超一个月并且已有最佳答案,本人帮你结贴。 若是觉得答案不嘉,请放在本版的疑难杂症帖链接: http://bbs.csdn.net/topics/390351579。 如果您有什么意见,请您联系我。
fly4free 2012-09-05
  • 打赏
  • 举报
回复
构造函数调用的是对象成员函数,也就是“非静态函数”

而静态函数中不能引用 非静态成员。
fly4free 2012-09-04
  • 打赏
  • 举报
回复
CWnd 中没有静态的 MessageBox 所以
要么你使用 AfxMessageBox

要么你用 ::MessageBox(NULL, "OK", "Yeah", MB_OK);// 第一个参数你可以换成某个窗口句柄,如果调用的时候没有存在的窗口,只能 NULL了。
zziilii 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 11 楼 的回复:]

我试了下,添加一个MFC类,继承CWnd类,
可以在成员函数里使用MessageBox
[/Quote]
是不是和静态的有关系。
zwfgdlc 2012-09-04
  • 打赏
  • 举报
回复
我试了下,添加一个MFC类,继承CWnd类,
可以在成员函数里使用MessageBox
zziilii 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 9 楼 的回复:]

CWnd 中没有静态的 MessageBox 所以
要么你使用 AfxMessageBox

要么你用 ::MessageBox(NULL, "OK", "Yeah", MB_OK);// 第一个参数你可以换成某个窗口句柄,如果调用的时候没有存在的窗口,只能 NULL了。
[/Quote]
为什么在构造函数中可以用?
为什么在普通对话框按钮中可以用?
zziilii 2012-09-04
  • 打赏
  • 举报
回复
[Quote=引用 7 楼 的回复:]

引用 6 楼 的回复:

引用 3 楼 的回复:

错误很明显了
MessageBox((CString)"OK");
->
AfxMessageBox((CString)"OK");

为什么呢?我在其他地方这样写都没问题

估计你这个CPublic类没有继承CWnd类.
你继承CWnd类,肯定可以用.
其他地方能用也是因为那个类继承了CWnd类.
[/Quote]
CPublic类继承了CWnd,特意查了类向导。我的意思MessageBox()在CPublic 静态函数里不能用,但是构造函数里面可以用的。为什么?
看不见的裂痕 2012-09-03
  • 打赏
  • 举报
回复
把双冒号打出来,好好看看API的结构吧。楼上兄弟都说了。
tbg1986tbg 2012-09-03
  • 打赏
  • 举报
回复
::MessageBox((CString)"OK");
这样试试
你在debug模式下。运行,看看终止的时候.call stack停在哪里,哪里就有可能是错误的地方
gameslq 2012-09-03
  • 打赏
  • 举报
回复
错误很明显了
MessageBox((CString)"OK");
->
AfxMessageBox((CString)"OK");
Eleven 2012-09-03
  • 打赏
  • 举报
回复
AfxMessageBox(_T("OK!"));
Occam's_Razor 2012-09-03
  • 打赏
  • 举报
回复
::MessageBox(NULL,(CString)"OK","",MB_OK);
zwfgdlc 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 6 楼 的回复:]

引用 3 楼 的回复:

错误很明显了
MessageBox((CString)"OK");
->
AfxMessageBox((CString)"OK");

为什么呢?我在其他地方这样写都没问题
[/Quote]
估计你这个CPublic类没有继承CWnd类.
你继承CWnd类,肯定可以用.
其他地方能用也是因为那个类继承了CWnd类.
zziilii 2012-09-03
  • 打赏
  • 举报
回复
[Quote=引用 3 楼 的回复:]

错误很明显了
MessageBox((CString)"OK");
->
AfxMessageBox((CString)"OK");
[/Quote]
为什么呢?我在其他地方这样写都没问题

16,548

社区成员

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

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

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