免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1576 | 回复: 4
打印 上一主题 下一主题

C++中关于 struct 的问题,不解。 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-04-23 21:34 |只看该作者 |倒序浏览

  1. struct Test {
  2.     Test() { }
  3.     Test(int) { }
  4.     void fun() { }
  5. };

  6. int main() {

  7.     Test a(1); // 1
  8.     Test b(); // 2
  9.     a.fun(); // 3
  10.     b.fun(); // 4
  11.    
  12.     return 0;
  13. }
复制代码

上面那段代码,在定义 Test b(); 时会有问题,但定义 Test a(1) 却可以。为什么?

论坛徽章:
0
2 [报告]
发表于 2009-04-23 21:39 |只看该作者
Test b();
应该被当作是定义一个其返回值是Test struct的名字函数b(),由于c是不支持函数嵌套定义的,所以报错。

论坛徽章:
0
3 [报告]
发表于 2009-04-23 21:46 |只看该作者

回复 #2 gz80 的帖子

谢谢。
原来自己一直把Test b() 当成定义对象,编译器居然把他当成了函数声明。
那定义不带初始值的对象只能是Test b;

论坛徽章:
0
4 [报告]
发表于 2009-04-23 22:12 |只看该作者
c好像是支持函数里面声明函数的

应该不是 Test b();报错 是b.fun报错吧

改成Test b; 原因如2F所说

论坛徽章:
0
5 [报告]
发表于 2009-04-24 10:42 |只看该作者
原帖由 皇家救星 于 2009-4-23 22:12 发表
c好像是支持函数里面声明函数的


恩,是支持在函数里声明函数的。但是不支持在函数里定义函数。

原帖由 gz80 于 2009-4-23 21:39 发表
由于c是不支持函数嵌套定义的,所以报错。


恩,函数不能直接嵌套定义,但C++的话就有办法绕过这个限制间接嵌套定义。可参见我的代码:
http://libasdl.svn.sourceforge.n ... ion.cpp?view=markup
C目前暂时没有办法绕过。

[ 本帖最后由 swxlion 于 2009-4-24 10:43 编辑 ]
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP