问个简单问题,麻烦大家回答一下

sivon 2004-12-22 08:57:33

#include "String.h"
String sivon;
sivon.display();

int _tmain(int argc, _TCHAR* argv[])
{



return 0;
}
为什么在main前的全局域调用成员函数display()会出错
而在main()中就没问题
难道这时候函数还不可见?奇怪....
...全文
91 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
zhangfjj 2004-12-22
  • 打赏
  • 举报
回复
因为C程序的执行是从main()开始,main()之前是一个装载过程,做一些初始化工作,如创建全局对象之类的,在main()中依次执行语句行,可以对其他函数调用,调用完毕后,返回main(),直至main()结束,程序就运行结束了,不可能执行到函数外的语句。
所以我猜的呀,人家就规定,在函数外定义语句就是一个语法错误
sivon 2004-12-22
  • 打赏
  • 举报
回复
感谢yhwangtiger的回答
我知道成员函数应该是所有对象共享的一段存储区 可能我有点钻牛角尖了
sivon 2004-12-22
  • 打赏
  • 举报
回复
我问的是为什么全局调用无效。。。。
yhwangtiger 2004-12-22
  • 打赏
  • 举报
回复
全局对象是在程序进入入口(比如main函数)之前构造的的,所以你可以定义全局对象,但是这时候程序还没有进入入口(典型的就是从main函数入口的,该函数还要进行许多初始化工作,之后程序才能运行),所以虽然这时候对象已经存在但是还不能执行(包括其他的代码,如 i=3+5;也不能执行)。另外,类中定义的成员函数其真正的代码也不包含在对象之中啊!
lookingfor 2004-12-22
  • 打赏
  • 举报
回复
display()只能在函数域中调用。
如:
void f()
{
sivon.display();
}
avalonBBS 2004-12-22
  • 打赏
  • 举报
回复
难道楼主的意思是将语句放在函数外(全局域)?
sivon 2004-12-22
  • 打赏
  • 举报
回复
是呀 今天碰巧遇到这个问题
也不知道什么原因 对象已经初始化了 为什么不能调用成员函数
zhangfjj 2004-12-22
  • 打赏
  • 举报
回复
呵呵,这么问真的不好答了!
只知道C程序是由函数组合成的,函数调用作为语句应该在函数里,函数外只能是一些非执行语句,如变量的定义、函数的声明这类的东西!

65,206

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

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